diff --git a/packages/uni-api/src/protocols/network/socket.ts b/packages/uni-api/src/protocols/network/socket.ts index 39e0cd911350d71cc257b7836b5ce9bd92462352..9d9172ccd098aeea6233615534a312a84893be91 100644 --- a/packages/uni-api/src/protocols/network/socket.ts +++ b/packages/uni-api/src/protocols/network/socket.ts @@ -3,7 +3,7 @@ export const API_CONNECT_SOCKET = 'connectSocket' export type API_TYPE_CONNECT_SOCKET = typeof uni.connectSocket export const ConnectSocketOptions: ApiOptions = { formatArgs: { - header(value, params) { + header(value: Record, params: Record) { params.header = value || {} }, method(value, params) { diff --git a/packages/uni-components/src/helpers/useHover.ts b/packages/uni-components/src/helpers/useHover.ts index 22a4ede90610c22e43853961cfbeafe195cf5d02..69c5e1dfe0e0c01eaf9f48955ec4988656beea9b 100644 --- a/packages/uni-components/src/helpers/useHover.ts +++ b/packages/uni-components/src/helpers/useHover.ts @@ -40,7 +40,7 @@ export function useHover(props: UseHoverOptions) { }, parseInt(props.hoverStayTime as string)) }) } - function onTouchstart(evt: TouchEvent) { + function onTouchstartPassive(evt: TouchEvent) { // TODO detect scrolling if ((evt as any)._hoverPropagationStopped) { return @@ -77,7 +77,7 @@ export function useHover(props: UseHoverOptions) { return { hovering, binding: { - onTouchstart, + onTouchstartPassive, onTouchend, onTouchcancel, }, diff --git a/packages/uni-h5/dist/uni-h5.esm.js b/packages/uni-h5/dist/uni-h5.esm.js index 3f89a0d2b593d4c96faddba091848002fdd48cde..db259f1f146533a3800f0cf11e786d8fa51c66be 100644 --- a/packages/uni-h5/dist/uni-h5.esm.js +++ b/packages/uni-h5/dist/uni-h5.esm.js @@ -1286,9 +1286,10 @@ function initPublicPage(route) { } function initPage(vm) { const route = vm.$route; + const page = initPublicPage(route); vm.$vm = vm; - vm.$page = initPublicPage(route); - currentPagesMap.set(normalizeRouteKey(route.path, vm.$page.id), vm); + vm.$page = page; + currentPagesMap.set(normalizeRouteKey(page.path, page.id), vm); } function normalizeRouteKey(path, id2) { return path + SEP + id2; @@ -2006,7 +2007,7 @@ function useHover(props) { }, parseInt(props.hoverStayTime)); }); } - function onTouchstart(evt) { + function onTouchstartPassive(evt) { if (evt._hoverPropagationStopped) { return; } @@ -2041,7 +2042,7 @@ function useHover(props) { return { hovering, binding: { - onTouchstart, + onTouchstartPassive, onTouchend, onTouchcancel } @@ -12387,7 +12388,7 @@ function usePageRefresh(refreshRef) { refreshControllerElemStyle.clip = "rect(" + (45 - y) + "px,45px,45px,-5px)"; refreshControllerElemStyle.transform = "translate3d(-50%, " + y + "px, 0)"; } - function onTouchstart(ev) { + function onTouchstartPassive(ev) { const touch = ev.changedTouches[0]; touchId = touch.identifier; startY = touch.pageY; @@ -12397,7 +12398,7 @@ function usePageRefresh(refreshRef) { canRefresh = true; } } - function onTouchmove(ev) { + function onTouchmovePassive(ev) { if (!canRefresh) { return; } @@ -12500,8 +12501,8 @@ function usePageRefresh(refreshRef) { const timeout = setTimeout(restoreTransitionEnd, 350); } return { - onTouchstart, - onTouchmove, + onTouchstartPassive, + onTouchmovePassive, onTouchend, onTouchcancel: onTouchend }; diff --git a/packages/uni-h5/src/framework/components/page/page-refresh/index.ts b/packages/uni-h5/src/framework/components/page/page-refresh/index.ts index 4060550adfb02bba8495e81e5e4bf18151182703..358d809c1359637c217efe08ca1273514dd32e6e 100644 --- a/packages/uni-h5/src/framework/components/page/page-refresh/index.ts +++ b/packages/uni-h5/src/framework/components/page/page-refresh/index.ts @@ -113,7 +113,7 @@ export function usePageRefresh(refreshRef: Ref) { refreshControllerElemStyle.transform = 'translate3d(-50%, ' + y + 'px, 0)' } - function onTouchstart(ev: TouchEvent) { + function onTouchstartPassive(ev: TouchEvent) { const touch = ev.changedTouches[0] touchId = touch.identifier startY = touch.pageY @@ -124,7 +124,7 @@ export function usePageRefresh(refreshRef: Ref) { } } - function onTouchmove(ev: TouchEvent) { + function onTouchmovePassive(ev: TouchEvent) { if (!canRefresh) { return } @@ -258,8 +258,8 @@ export function usePageRefresh(refreshRef: Ref) { } return { - onTouchstart, - onTouchmove, + onTouchstartPassive, + onTouchmovePassive, onTouchend, onTouchcancel: onTouchend, } diff --git a/packages/uni-h5/src/framework/plugin/page.ts b/packages/uni-h5/src/framework/plugin/page.ts index 969d5f8639bddc7f62bb99074df0f353929cf12e..5ee86c146448b08aefa0fc39cff59011bb74781f 100644 --- a/packages/uni-h5/src/framework/plugin/page.ts +++ b/packages/uni-h5/src/framework/plugin/page.ts @@ -73,10 +73,11 @@ function initPublicPage(route: RouteLocationNormalizedLoaded) { export function initPage(vm: ComponentPublicInstance) { const route = vm.$route + const page = initPublicPage(route) ;(vm as any).$vm = vm - ;(vm as any).$page = initPublicPage(route) + ;(vm as any).$page = page currentPagesMap.set( - normalizeRouteKey(route.path, vm.$page.id), + normalizeRouteKey(page.path, page.id), (vm as unknown) as Page.PageInstance ) } diff --git a/packages/vite-plugin-uni/src/config/index.ts b/packages/vite-plugin-uni/src/config/index.ts index 40f767986afa8c241daea121dc48f5a07fffcfb7..8a3a2a28dc139760b62f62a93606e02ead9b27bb 100644 --- a/packages/vite-plugin-uni/src/config/index.ts +++ b/packages/vite-plugin-uni/src/config/index.ts @@ -1,3 +1,7 @@ +import fs from 'fs' +import path from 'path' +import { parse } from 'jsonc-parser' + import { Plugin } from 'vite' import { VitePluginUniResolvedOptions } from '..' @@ -7,14 +11,23 @@ import { createDefine } from './define' import { createServer } from './server' import { createBuild } from './build' import { createOptimizeDeps } from './optimizeDeps' - +function resolveBase(inputDir: string) { + const manifest = parse( + fs.readFileSync(path.join(inputDir, 'manifest.json'), 'utf8') + ) + return (manifest.h5 && manifest.h5.router && manifest.h5.router.base) || '/' +} export function createConfig( options: VitePluginUniResolvedOptions ): Plugin['config'] { return (config, env) => { - if (config.root) { - options.root = config.root - } + const root = config.root || process.cwd() + const inputDir = process.env.UNI_INPUT_DIR || path.resolve(root, 'src') + const outputDir = process.env.UNI_OUTPUT_DIR || path.resolve(root, 'dist') + options.root = root + options.base = resolveBase(inputDir) + options.inputDir = inputDir + options.outputDir = outputDir options.command = env.command return { base: options.base, diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/copy.ts b/packages/vite-plugin-uni/src/configResolved/plugins/copy.ts index c3d5d301eea169c67ccd2d22c710221356aea85f..c949fcad5d263b0ac82dd522a87aab5bd3efa894 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/copy.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/copy.ts @@ -18,7 +18,7 @@ export function uniCopyPlugin({ { src: path.resolve(inputDir, 'uni_modules/*/' + PUBLIC_DIR), dest: outputDir, - rename: (name, extension, fullPath) => { + rename: (_name, _extension, fullPath) => { return path.relative(inputDir, fullPath) }, }, diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/index.ts b/packages/vite-plugin-uni/src/configResolved/plugins/index.ts index 6ce06609d91a53c6322bf0e812ee43dbeca8dd6f..1e7c746889c87c396d861634e70d5f3def57345c 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/index.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/index.ts @@ -87,7 +87,7 @@ export function resolvePlugins( ) addPlugin(plugins, uniMainJsPlugin(options), 1, 'pre') addPlugin(plugins, uniPagesJsonPlugin(config, options), 1, 'pre') - addPlugin(plugins, uniManifestJsonPlugin(options), 1, 'pre') + addPlugin(plugins, uniManifestJsonPlugin(config, options), 1, 'pre') addPlugin( plugins, diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/manifestJson.ts b/packages/vite-plugin-uni/src/configResolved/plugins/manifestJson.ts index a598207c5f69981ea049bf8ad13c3cd2e0cd739a..e308202a0fce3dbc6ca33f494ddeb712fcea0952 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/manifestJson.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/manifestJson.ts @@ -1,10 +1,11 @@ import fs from 'fs' import path from 'path' - +import slash from 'slash' import { parse } from 'jsonc-parser' -import { Plugin } from 'vite' +import { Plugin, ResolvedConfig } from 'vite' import { VitePluginUniResolvedOptions } from '../..' -import slash from 'slash' + +import { FEATURE_DEFINES } from '../../utils' const MANIFEST_JSON_JS = 'manifest.json.js' @@ -31,6 +32,7 @@ const defaultNetworkTimeout = { const defaultQQMapKey = 'XVXBZ-NDMC4-JOGUS-XGIEE-QVHDZ-AMFV2' export function uniManifestJsonPlugin( + config: ResolvedConfig, options: VitePluginUniResolvedOptions ): Plugin { const manifestJsonPath = slash(path.join(options.inputDir, 'manifest.json')) @@ -43,11 +45,14 @@ export function uniManifestJsonPlugin( }, transform(code, id) { if (id.endsWith(MANIFEST_JSON_JS)) { + const define = config.define! as FEATURE_DEFINES const manifest = JSON.parse(code) const { debug, h5 } = manifest const appid = (manifest.appid || '').replace('__UNI__', '') const router = { ...defaultRouter, ...((h5 && h5.router) || {}) } - const async = { ...defaultAsync, ...((h5 && h5.async) || {}) } + const async = define.__UNI_FEATURE_PAGES__ + ? { ...defaultAsync, ...((h5 && h5.async) || {}) } + : {} const networkTimeout = { ...defaultNetworkTimeout, diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts b/packages/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts index c27d55120dba6588de2d58ad59f9256108117c2e..0f3b003bd372fc412c4d4ca7392516b67fbf0620 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts @@ -54,7 +54,7 @@ function parsePagesJson( options: VitePluginUniResolvedOptions ) { const pagesJson = normalizePagesJson(jsonStr, options.platform) - const definePagesCode = generatePagesDefineCode(pagesJson) + const definePagesCode = generatePagesDefineCode(pagesJson, config) const uniRoutesCode = generateRoutes(pagesJson) const uniConfigCode = generateConfig(pagesJson, options) const manifestJsonPath = slash( @@ -129,7 +129,18 @@ function generatePageDefineCode(pageOptions: UniApp.PagesJsonPageOptions) { }.vue?mpType=page').then(comp=>setupPage(comp))},AsyncComponentOptions))` } -function generatePagesDefineCode(pagesJson: UniApp.PagesJson) { +function generatePagesDefineCode( + pagesJson: UniApp.PagesJson, + config: ResolvedConfig +) { + const define = config.define! as FEATURE_DEFINES + if (!define.__UNI_FEATURE_PAGES__) { + // single page + const pagePath = pagesJson.pages[0].path + return `import {default as ${normalizePageIdentifier( + pagePath + )}} from './${pagePath}.vue?mpType=page'` + } const { pages } = pagesJson return ( `const AsyncComponentOptions = { diff --git a/packages/vite-plugin-uni/src/index.ts b/packages/vite-plugin-uni/src/index.ts index 9dd66e0eca6f0989afc9a5c76d3f6c0d50f41000..868f9b379b247d4a9452ec53607b4984053907d4 100644 --- a/packages/vite-plugin-uni/src/index.ts +++ b/packages/vite-plugin-uni/src/index.ts @@ -1,7 +1,3 @@ -import fs from 'fs' -import path from 'path' -import { parse } from 'jsonc-parser' - import { Plugin, ResolvedConfig, ViteDevServer } from 'vite' import { initEnv } from './env' @@ -27,32 +23,16 @@ export interface VitePluginUniResolvedOptions extends VitePluginUniOptions { export * from './vue' -function resolveBase(inputDir: string) { - const manifest = parse( - fs.readFileSync(path.join(inputDir, 'manifest.json'), 'utf8') - ) - return (manifest.h5 && manifest.h5.router && manifest.h5.router.base) || '/' -} - export default function uniPlugin( rawOptions: VitePluginUniOptions = {} ): Plugin { - const inputDir = - process.env.UNI_INPUT_DIR || - rawOptions.inputDir || - path.resolve(process.cwd(), 'src') - const outputDir = - process.env.UNI_OUTPUT_DIR || - rawOptions.outputDir || - path.resolve(process.cwd(), 'dist') - const options: VitePluginUniResolvedOptions = { ...rawOptions, root: process.cwd(), - base: resolveBase(inputDir), + base: '/', assetsDir: 'assets', - inputDir, - outputDir, + inputDir: '', + outputDir: '', command: 'serve', platform: 'h5', }