You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.genUVueCssCode = exports.uniMiniProgramPlugin = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const uni_1 = require("./uni");
const build_1 = require("./build");
const configResolved_1 = require("./configResolved");
const template_1 = require("./template");
const pagesJson_1 = require("../plugins/pagesJson");
const polyfill_1 = require("./polyfill");
function uniMiniProgramPlugin(options) {
const { vite: { alias, copyOptions }, template, style, } = options;
let resetCssEmitted = false;
let autoImportFilterEmitted = false;
let resolvedConfig;
(0, polyfill_1.rewriteCompileScriptOnce)();
(0, polyfill_1.rewriteCompilerSfcParseOnce)();
return {
name: 'uni:mp',
uni: (0, uni_1.uniOptions)({
copyOptions,
customElements: template.customElements,
miniProgram: {
event: template.event,
class: template.class,
filter: template.filter
? {
lang: template.filter.lang,
setStyle: template.filter.setStyle,
generate: template.filter.generate,
}
: undefined,
directive: template.directive,
lazyElement: template.lazyElement,
component: template.component,
emitFile: template_1.emitFile,
slot: template.slot,
checkPropName: template.checkPropName,
},
compilerOptions: template.compilerOptions,
}),
config() {
return {
base: process.env.UNI_SUBPACKAGE
? '/' + process.env.UNI_SUBPACKAGE + '/'
: '/', // 编译为分包时以分包名为基础路径
resolve: {
alias: {
vue: (0, uni_cli_shared_1.resolveBuiltIn)(`@dcloudio/uni-mp-vue/${process.env.UNI_APP_X === 'true' ? 'dist-x' : 'dist'}/vue.runtime.esm.js`),
'@vue/devtools-api': (0, uni_cli_shared_1.resolveBuiltIn)('@dcloudio/uni-mp-vue'),
'vue-i18n': (0, uni_cli_shared_1.resolveVueI18nRuntime)(),
...alias,
},
preserveSymlinks: true,
},
css: {
postcss: {
plugins: (0, uni_cli_shared_1.initPostcssPlugin)({
uniApp: (0, uni_cli_shared_1.parseRpx2UnitOnce)(process.env.UNI_INPUT_DIR, process.env.UNI_PLATFORM),
}),
},
},
optimizeDeps: {
noDiscovery: true,
include: [],
},
build: (0, build_1.buildOptions)(),
};
},
configResolved(config) {
resolvedConfig = config;
const plugin = config.plugins.find((p) => p.name === 'vite:vue');
if (plugin?.api?.options) {
plugin.api.options.devToolsEnabled = false;
}
return (0, configResolved_1.createConfigResolved)(options)(config);
},
generateBundle() {
if (template.filter) {
const extname = template.filter.extname;
if (process.env.UNI_APP_X === 'true') {
if (process.env.UNI_COMPILE_TARGET !== 'uni_modules') {
// 目前 mp-weixinmp-qq、mp-alipaymp-dingtalk、mp-toutiaomp-lark均支持视图层setStyle
if (template.filter.setStyle && !autoImportFilterEmitted) {
autoImportFilterEmitted = true;
this.emitFile({
type: 'asset',
// uniView.wxs文件在分包内的引用路径不对
fileName: `common/uniView${extname}`,
source: fs_extra_1.default.readFileSync(path_1.default.resolve(__dirname, '../../lib/filters/uniView.js'), 'utf8'),
});
}
}
}
const filterFiles = (0, template_1.getFilterFiles)(resolvedConfig, this.getModuleInfo);
Object.keys(filterFiles).forEach((filename) => {
const { code } = filterFiles[filename];
this.emitFile({
type: 'asset',
fileName: filename + extname,
source: code,
});
});
}
const templateFiles = (0, template_1.getTemplateFiles)(template);
Object.keys(templateFiles).forEach((filename) => {
this.emitFile({
type: 'asset',
fileName: filename + template.extname,
source: templateFiles[filename],
});
});
if (process.env.UNI_COMPILE_TARGET === 'uni_modules') {
return;
}
if (!resetCssEmitted) {
if (process.env.UNI_APP_X === 'true') {
resetCssEmitted = true;
this.emitFile({
type: 'asset',
fileName: 'uvue' + style.extname,
source: genUVueCssCode((0, uni_cli_shared_1.parseManifestJsonOnce)(process.env.UNI_INPUT_DIR)),
});
}
else {
const nvueCssPaths = (0, pagesJson_1.getNVueCssPaths)(resolvedConfig);
if (nvueCssPaths && nvueCssPaths.length) {
resetCssEmitted = true;
this.emitFile({
type: 'asset',
fileName: 'nvue' + style.extname,
source: (0, uni_cli_shared_1.genNVueCssCode)((0, uni_cli_shared_1.parseManifestJsonOnce)(process.env.UNI_INPUT_DIR)),
});
}
}
}
},
};
}
exports.uniMiniProgramPlugin = uniMiniProgramPlugin;
function genUVueCssCode(manifestJson) {
let cssCode = fs_extra_1.default.readFileSync(path_1.default.resolve(__dirname, '../../lib/uvue.css'), 'utf8');
const flexDirection = (0, uni_cli_shared_1.parseUniXFlexDirection)(manifestJson);
if (flexDirection !== 'column') {
cssCode = cssCode.replace('column', flexDirection);
}
return cssCode;
}
exports.genUVueCssCode = genUVueCssCode;