64 lines
2.7 KiB
JavaScript
64 lines
2.7 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.rewriteCompilerSfcParseOnce = exports.rewriteCompileScriptOnce = void 0;
|
||
const shared_1 = require("@vue/shared");
|
||
const uni_shared_1 = require("@dcloudio/uni-shared");
|
||
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
||
exports.rewriteCompileScriptOnce = (0, uni_shared_1.once)(rewriteCompileScript);
|
||
exports.rewriteCompilerSfcParseOnce = (0, uni_shared_1.once)(rewriteCompilerSfcParse);
|
||
function rewriteCompileScript() {
|
||
const compiler = require((0, uni_cli_shared_1.resolveBuiltIn)('@vue/compiler-sfc'));
|
||
const { compileScript, compileTemplate, compileStyle, compileStyleAsync } = compiler;
|
||
compiler.compileStyle = (options) => {
|
||
// https://github.com/dcloudio/uni-app/issues/4076
|
||
options.isProd = true;
|
||
return compileStyle(options);
|
||
};
|
||
compiler.compileStyleAsync = (options) => {
|
||
// https://github.com/dcloudio/uni-app/issues/4076
|
||
options.isProd = true;
|
||
return compileStyleAsync(options);
|
||
};
|
||
// script-setup + v-bind
|
||
compiler.compileScript = (sfc, options) => {
|
||
if (options?.templateOptions?.compilerOptions) {
|
||
;
|
||
options.templateOptions.compilerOptions.bindingCssVars =
|
||
sfc.cssVars || [];
|
||
}
|
||
// 强制生产模式,确保 cssVar 的生成使用 hash
|
||
// https://github.com/dcloudio/uni-app/issues/4076
|
||
// dev模式下,会生成:{ "83a5a03c-style.color": style.color}
|
||
options.isProd = true;
|
||
return compileScript(sfc, options);
|
||
};
|
||
// script + v-bind
|
||
compiler.compileTemplate = (options) => {
|
||
if (options?.compilerOptions) {
|
||
;
|
||
options.compilerOptions.bindingCssVars =
|
||
options.ssrCssVars || [];
|
||
}
|
||
// 同上
|
||
options.isProd = true;
|
||
return compileTemplate(options);
|
||
};
|
||
}
|
||
/**
|
||
* 重写 parse,解决相同内容被缓存,未触发 template 编译的问题
|
||
*/
|
||
function rewriteCompilerSfcParse() {
|
||
// @ts-ignore
|
||
const compilerSfc = require((0, uni_cli_shared_1.resolveBuiltIn)('@vue/compiler-sfc'));
|
||
const { parse } = compilerSfc;
|
||
compilerSfc.parse = (source, options) => {
|
||
const res = parse(source, options);
|
||
// template 中,先<view>hello</view>,然后修改为<view></view>,再恢复为<view>hello</view>,
|
||
// 此时因为 descriptor 被缓存,不会触发 compileTemplate,故 parse 时,每次生成一个全新的 descriptor
|
||
// https://github.com/vitejs/vite/blob/v2.9.13/packages/plugin-vue/src/script.ts#L44
|
||
// https://github.com/dcloudio/uni-app/issues/3685
|
||
res.descriptor = (0, shared_1.extend)({}, res.descriptor);
|
||
return res;
|
||
};
|
||
}
|