From 48858790cadbf279fa950352269a83fbedb0da49 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Wed, 6 Apr 2022 16:43:09 +0800 Subject: [PATCH] feat: support vitest (#3398) --- packages/size-check/env.ts | 5 ----- packages/size-check/vite.config.ts | 1 - packages/uni-app-plus/vite.config.ts | 2 +- packages/uni-cli-shared/src/hbx/alias.ts | 5 +++++ packages/uni-components/src/helpers/hidpi.js | 7 +++++-- packages/uni-h5-vite/src/plugins/resolveId.ts | 5 ++++- packages/uni-h5/dist/uni-h5.es.js | 3 +++ packages/vite-plugin-uni/src/cli/utils.ts | 13 +++++++++++-- packages/vite-plugin-uni/src/index.ts | 5 ++++- packages/vite-plugin-uni/src/resolveId/index.ts | 4 ++-- scripts/build.js | 1 + 11 files changed, 36 insertions(+), 15 deletions(-) delete mode 100644 packages/size-check/env.ts diff --git a/packages/size-check/env.ts b/packages/size-check/env.ts deleted file mode 100644 index 2d56d7363..000000000 --- a/packages/size-check/env.ts +++ /dev/null @@ -1,5 +0,0 @@ -import path from 'path' -process.env.UNI_CLI_CONTEXT = __dirname -process.env.UNI_INPUT_DIR = path.resolve(__dirname, 'src') -process.env.UNI_OUTPUT_DIR = path.resolve(__dirname, 'dist') -process.env.UNI_PLATFORM = 'h5' diff --git a/packages/size-check/vite.config.ts b/packages/size-check/vite.config.ts index f3072fe95..9839844bb 100644 --- a/packages/size-check/vite.config.ts +++ b/packages/size-check/vite.config.ts @@ -1,4 +1,3 @@ -import './env' import path from 'path' import { terser } from 'rollup-plugin-terser' import uniH5VitePlugins from '@dcloudio/uni-h5-vite' diff --git a/packages/uni-app-plus/vite.config.ts b/packages/uni-app-plus/vite.config.ts index b10838b0e..934f49c91 100644 --- a/packages/uni-app-plus/vite.config.ts +++ b/packages/uni-app-plus/vite.config.ts @@ -34,7 +34,7 @@ const rollupPlugins = [ _NODE_JS_: 0, }, // 忽略 pako 内部条件编译 - exclude: ['**/pako/**/*.js'], + exclude: [/pako/ as unknown as string], }), babel({ babelHelpers: 'bundled', diff --git a/packages/uni-cli-shared/src/hbx/alias.ts b/packages/uni-cli-shared/src/hbx/alias.ts index a62907ebd..068606783 100644 --- a/packages/uni-cli-shared/src/hbx/alias.ts +++ b/packages/uni-cli-shared/src/hbx/alias.ts @@ -22,6 +22,11 @@ export function initModuleAlias() { 'vue/compiler-sfc': compilerSfcPath, 'vue/server-renderer': serverRendererPath, }) + if (process.env.VITEST) { + moduleAlias.addAliases({ + vue: '@dcloudio/uni-h5-vue', + }) + } if (isInHBuilderX()) { Object.keys(hbxPlugins).forEach((name) => { moduleAlias.addAlias( diff --git a/packages/uni-components/src/helpers/hidpi.js b/packages/uni-components/src/helpers/hidpi.js index cd0a7e008..d80261e29 100644 --- a/packages/uni-components/src/helpers/hidpi.js +++ b/packages/uni-components/src/helpers/hidpi.js @@ -3,6 +3,9 @@ import { hasOwn } from '@vue/shared' export const pixelRatio = __NODE_JS__ ? 1 : /*#__PURE__*/ (function () { + if (__PLATFORM__ === 'h5' && navigator.userAgent.includes('jsdom')) { + return 1 + } const canvas = document.createElement('canvas') canvas.height = canvas.width = 0 const context = canvas.getContext('2d') @@ -134,7 +137,7 @@ export function initHidpi() { // 会导致 canvas 无法绘制。 if (args[3] && typeof args[3] === 'number') { args[3] *= pixelRatio - } + } var font = this.font this.font = font.replace( @@ -164,7 +167,7 @@ export function initHidpi() { // 会导致 canvas 无法绘制。 if (args[3] && typeof args[3] === 'number') { args[3] *= pixelRatio - } + } var font = this.font this.font = font.replace( diff --git a/packages/uni-h5-vite/src/plugins/resolveId.ts b/packages/uni-h5-vite/src/plugins/resolveId.ts index cc6f037ce..378a7d87f 100644 --- a/packages/uni-h5-vite/src/plugins/resolveId.ts +++ b/packages/uni-h5-vite/src/plugins/resolveId.ts @@ -17,7 +17,10 @@ export function uniResolveIdPlugin(): Plugin { path.join(ownerModuleName, 'dist/uni-h5.es.js') ) resolveCache['@dcloudio/uni-h5-vue'] = resolveBuiltIn( - path.join('@dcloudio/uni-h5-vue', `dist/vue.runtime.esm.js`) + path.join( + '@dcloudio/uni-h5-vue', + `dist/vue.runtime.${process.env.VITEST ? 'cjs' : 'esm'}.js` + ) ) }, resolveId(id) { diff --git a/packages/uni-h5/dist/uni-h5.es.js b/packages/uni-h5/dist/uni-h5.es.js index ff7cfa015..97a9ec516 100644 --- a/packages/uni-h5/dist/uni-h5.es.js +++ b/packages/uni-h5/dist/uni-h5.es.js @@ -6320,6 +6320,9 @@ function useResizeSensorLifecycle(rootRef, props2, update, reset) { }); } const pixelRatio = /* @__PURE__ */ function() { + if (navigator.userAgent.includes("jsdom")) { + return 1; + } const canvas = document.createElement("canvas"); canvas.height = canvas.width = 0; const context = canvas.getContext("2d"); diff --git a/packages/vite-plugin-uni/src/cli/utils.ts b/packages/vite-plugin-uni/src/cli/utils.ts index 171a61ebe..0bcb624a9 100644 --- a/packages/vite-plugin-uni/src/cli/utils.ts +++ b/packages/vite-plugin-uni/src/cli/utils.ts @@ -49,7 +49,15 @@ export function addConfigFile(inlineConfig: InlineConfig) { return inlineConfig } -export function initEnv(type: 'dev' | 'build', options: CliOptions) { +let initliazed = false +export function initEnv( + type: 'unknown' | 'dev' | 'build', + options: CliOptions +) { + if (initliazed) { + return + } + initliazed = true if (options.platform === 'mp-360') { console.error(M['mp.360.unsupported']) process.exit(0) @@ -87,7 +95,8 @@ export function initEnv(type: 'dev' | 'build', options: CliOptions) { process.env.UNI_SUB_PLATFORM = options.platform options.platform = 'quickapp-webview' } - process.env.VITE_ROOT_DIR = process.env.UNI_INPUT_DIR || process.cwd() + process.env.VITE_ROOT_DIR = + process.env.VITE_ROOT_DIR || process.env.UNI_INPUT_DIR || process.cwd() process.env.UNI_INPUT_DIR = process.env.UNI_INPUT_DIR || path.resolve(process.cwd(), 'src') diff --git a/packages/vite-plugin-uni/src/index.ts b/packages/vite-plugin-uni/src/index.ts index 02b48e881..ebb955a2a 100644 --- a/packages/vite-plugin-uni/src/index.ts +++ b/packages/vite-plugin-uni/src/index.ts @@ -27,7 +27,7 @@ import { initPluginVueJsxOptions, initPluginVueOptions, } from './vue' -// import { createResolveId } from './resolveId' +import { initEnv } from './cli/utils' const debugUni = debug('uni:plugin') @@ -63,6 +63,9 @@ export { runDev, runBuild } from './cli/action' export default function uniPlugin( rawOptions: VitePluginUniOptions = {} ): Plugin[] { + // 三方插件(如vitest)可能提供了自己的入口命令,需要补充 env 初始化逻辑 + initEnv('unknown', { platform: process.env.UNI_PLATFORM || 'h5' }) + const options: VitePluginUniResolvedOptions = { ...rawOptions, base: '/', diff --git a/packages/vite-plugin-uni/src/resolveId/index.ts b/packages/vite-plugin-uni/src/resolveId/index.ts index 4ae39e413..3d7594516 100644 --- a/packages/vite-plugin-uni/src/resolveId/index.ts +++ b/packages/vite-plugin-uni/src/resolveId/index.ts @@ -8,9 +8,9 @@ export function createResolveId( const inputDir = normalizePath(options.inputDir) return function (id) { if (id.startsWith('@/')) { - return inputDir + id.substr(1) + return inputDir + id.slice(1) } else if (id.startsWith('~@/')) { - return inputDir + id.substr(2) + return inputDir + id.slice(2) } } } diff --git a/scripts/build.js b/scripts/build.js index e8d318a87..7f6efc8fb 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -127,6 +127,7 @@ async function build(target) { { stdio: 'inherit', env: Object.assign({ FORMAT: 'es' }, process.env), + cwd: pkgDir, } ) if (target === 'uni-h5') { -- GitLab