diff --git a/packages/uni-app-vite/src/plugin/configResolved.ts b/packages/uni-app-vite/src/plugin/configResolved.ts index c26d908c78c8b9a60fd3f4de33ebc09ba961115b..e9bf008c9047f208060defa691b2a24055f94a30 100644 --- a/packages/uni-app-vite/src/plugin/configResolved.ts +++ b/packages/uni-app-vite/src/plugin/configResolved.ts @@ -45,5 +45,7 @@ export const configResolved: Plugin['configResolved'] = (config) => { return cssCode }, }) + // 强制不inline + config.build.assetsInlineLimit = 0 injectAssetPlugin(config) } diff --git a/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/asset.ts b/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/asset.ts index 3b34ac75e8e5f0cec715b13f0ef86043fe251cd5..61b7e3161a0c64c23baefb361076325db3b723a6 100644 --- a/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/asset.ts +++ b/packages/uni-cli-shared/src/vite/plugins/vitejs/plugins/asset.ts @@ -1,5 +1,6 @@ import path from 'path' import { parse as parseUrl } from 'url' +import mime from 'mime/lite' import fs, { promises as fsp } from 'fs' import { Plugin } from '../plugin' import { ResolvedConfig } from '../config' @@ -137,9 +138,10 @@ export function checkPublicFile( export function fileToUrl( id: string, config: ResolvedConfig, - ctx: PluginContext + ctx: PluginContext, + canInline: boolean = false ): string { - return fileToBuiltUrl(id, config, ctx) + return fileToBuiltUrl(id, config, ctx, false, canInline) } export function getAssetFilename( @@ -156,7 +158,8 @@ function fileToBuiltUrl( id: string, config: ResolvedConfig, pluginContext: PluginContext, - skipPublicCheck = false + skipPublicCheck = false, + canInline = false ): string { if (!skipPublicCheck && checkPublicFile(id, config)) { return config.base + id.slice(1) @@ -172,31 +175,36 @@ function fileToBuiltUrl( let url: string - const map = assetHashToFilenameMap.get(config)! - const contentHash = getAssetHash(content) - const { search, hash } = parseUrl(id) - const postfix = (search || '') + (hash || '') - const fileName = normalizePath( - path.posix.relative(process.env.UNI_INPUT_DIR, file) - ) - if (!map.has(contentHash)) { - map.set(contentHash, fileName) - } + if (canInline && content.length < Number(config.build.assetsInlineLimit)) { + // base64 inlined as a string + url = `data:${mime.getType(file)};base64,${content.toString('base64')}` + } else { + const map = assetHashToFilenameMap.get(config)! + const contentHash = getAssetHash(content) + const { search, hash } = parseUrl(id) + const postfix = (search || '') + (hash || '') + const fileName = normalizePath( + path.posix.relative(process.env.UNI_INPUT_DIR, file) + ) + if (!map.has(contentHash)) { + map.set(contentHash, fileName) + } - if (!fileName.includes('/static/')) { - const emittedSet = emittedHashMap.get(config)! - if (!emittedSet.has(contentHash)) { - pluginContext.emitFile({ - name: fileName, - fileName, - type: 'asset', - source: content, - }) - emittedSet.add(contentHash) + if (!fileName.includes('/static/')) { + const emittedSet = emittedHashMap.get(config)! + if (!emittedSet.has(contentHash)) { + pluginContext.emitFile({ + name: fileName, + fileName, + type: 'asset', + source: content, + }) + emittedSet.add(contentHash) + } } - } - url = `__VITE_ASSET__${contentHash}__${postfix ? `$_${postfix}__` : ``}` + url = `__VITE_ASSET__${contentHash}__${postfix ? `$_${postfix}__` : ``}` + } cache.set(id, url) return url } 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 ae69fa19aac9e224c2ec8399e75cf4423a40ca72..0c7234b8f7c923492cbea5ae5eacd5e59b7362d1 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 @@ -138,7 +138,7 @@ export function cssPlugin(config: ResolvedConfig): Plugin { } const resolved = await resolveUrl(url, importer) if (resolved) { - return fileToUrl(resolved, config, this) + return fileToUrl(resolved, config, this, true) } return url } diff --git a/packages/uni-mp-vite/src/plugin/build.ts b/packages/uni-mp-vite/src/plugin/build.ts index 13fe078a4d8b8bcb444c5d39b2abda17d89c59ce..dcf36256fc05a30fc759a1c1b3699dd61b6c6755 100644 --- a/packages/uni-mp-vite/src/plugin/build.ts +++ b/packages/uni-mp-vite/src/plugin/build.ts @@ -33,7 +33,7 @@ export function buildOptions(): UserConfig['build'] { // sourcemap: 'inline', // TODO target: ['chrome53'], emptyOutDir: false, // 不清空输出目录,否则会影响自定义的一些文件输出,比如wxml - assetsInlineLimit: 0, // TODO + assetsInlineLimit: 40 * 1024, // 40kb lib: { entry: resolveMainPathOnce(inputDir), formats: ['cjs'],