diff --git a/packages/uni-cli-shared/src/hbx/log.ts b/packages/uni-cli-shared/src/hbx/log.ts index 2defe352d14312da1d079642c832885f632e22a9..3983e7a89d373ffc9b4332209d3651a9817d4877 100644 --- a/packages/uni-cli-shared/src/hbx/log.ts +++ b/packages/uni-cli-shared/src/hbx/log.ts @@ -55,7 +55,6 @@ export const removeWarnFormatter: Formatter = { } const fileRE = /file:\s(.*):(\d+):(\d+)/ - export const FilenameFormatter: Formatter = { test(msg) { return fileRE.test(msg) @@ -67,6 +66,18 @@ export const FilenameFormatter: Formatter = { }, } +const vueFileRE = /file:\s(.*)\?vue&type=(.*)/ +export const VueFilenameFormatter: Formatter = { + test(msg) { + return vueFileRE.test(msg) + }, + format(msg) { + return msg.replace(vueFileRE, (_, filename) => { + return `file: ${filename.split('?')[0]}` + }) + }, +} + export const HBuilderXFileFormatter: Formatter = { test(msg) { return fileRE.test(msg) @@ -91,3 +102,23 @@ export const HBuilderXFileFormatter: Formatter = { ) }, } + +export const HBuilderXVueFileFormatter: Formatter = { + test(msg) { + return vueFileRE.test(msg) + }, + format(msg) { + return ( + msg + // remove color + .replace(/\x1B[[(?);]{0,2}(;?\d)*./g, '') + .replace(vueFileRE, (_, filename) => { + return ( + 'at ' + + normalizePath(path.relative(process.env.UNI_INPUT_DIR, filename)) + + ':1' + ) + }) + ) + }, +} diff --git a/packages/uni-cli-shared/src/logs/format.ts b/packages/uni-cli-shared/src/logs/format.ts index cf1304386138050ab211de5adc16aa78784534bf..36521264d95a1f836a52b4f7559328e0e074a804 100644 --- a/packages/uni-cli-shared/src/logs/format.ts +++ b/packages/uni-cli-shared/src/logs/format.ts @@ -8,6 +8,8 @@ import { removeWarnFormatter, FilenameFormatter, HBuilderXFileFormatter, + HBuilderXVueFileFormatter, + VueFilenameFormatter, } from '../hbx/log' export interface Formatter { @@ -25,8 +27,10 @@ const initErrFormattersOnce = once(() => { } if (runByHBuilderX()) { errFormatters.push(HBuilderXFileFormatter) + errFormatters.push(HBuilderXVueFileFormatter) } else { errFormatters.push(FilenameFormatter) + errFormatters.push(VueFilenameFormatter) } }) diff --git a/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts b/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts index 80c5c52b6a5be7eec53e40189b87af6058907b3c..72c7616dc6eb6adc74e161198f37b2f0800c887c 100644 --- a/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts +++ b/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/css.ts @@ -260,11 +260,11 @@ export function cssPostPlugin( const processChunkCSS = async ( css: string, { - dirname, + filename, inlined, minify, }: { - dirname: string + filename: string inlined: boolean minify: boolean } @@ -272,13 +272,17 @@ export function cssPostPlugin( // replace asset url references with resolved url. css = css.replace(assetUrlRE, (_, fileHash, postfix = '') => { return normalizePath( - path.relative(dirname, getAssetFilename(fileHash, config) + postfix) + path.relative( + path.dirname(filename), + getAssetFilename(fileHash, config) + postfix + ) ) }) if (minify && config.build.minify) { css = await minifyCSS(css, config) } - return css + // 压缩后再处理,小程序平台会补充 @import nvue 代码,esbuild 的压缩会把 `@import "./nvue.css";` 的空格移除,变成 `@import"./nvue.css";` 在支付宝小程序中不支持 + return chunkCssCode(filename, css) } const genCssCode = (fileName: string) => { @@ -288,8 +292,8 @@ export function cssPostPlugin( } for (const filename of cssChunks.keys()) { const cssCode = genCssCode(filename) - let source = await processChunkCSS(chunkCssCode(filename, cssCode), { - dirname: path.dirname(filename), + let source = await processChunkCSS(cssCode, { + filename: filename, inlined: false, minify: true, }) diff --git a/packages/vite-plugin-uni/package.json b/packages/vite-plugin-uni/package.json index b3f51a2f11da0a1168dd7aff0d46b0872e88cff5..21c5cd50f9ac07550780e538fe29d89ed3df4a72 100644 --- a/packages/vite-plugin-uni/package.json +++ b/packages/vite-plugin-uni/package.json @@ -54,7 +54,7 @@ "vite": "^2.6.14" }, "uni-app": { - "compilerVersion": "3.2.10" + "compilerVersion": "3.2.14" }, "gitHead": "33e807d66e1fe47e2ee08ad9c59247e37b8884da" }