|
|
"use strict";
|
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
|
};
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
exports.uniPagesJsonPlugin = exports.getNVueCssPaths = void 0;
|
|
|
const path_1 = __importDefault(require("path"));
|
|
|
const debug_1 = __importDefault(require("debug"));
|
|
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|
|
const entry_1 = require("./entry");
|
|
|
const uni_i18n_1 = require("@dcloudio/uni-i18n");
|
|
|
const shared_1 = require("@vue/shared");
|
|
|
const debugPagesJson = (0, debug_1.default)('uni:pages-json');
|
|
|
const nvueCssPathsCache = new Map();
|
|
|
function getNVueCssPaths(config) {
|
|
|
return nvueCssPathsCache.get(config);
|
|
|
}
|
|
|
exports.getNVueCssPaths = getNVueCssPaths;
|
|
|
function uniPagesJsonPlugin(options) {
|
|
|
let resolvedConfig;
|
|
|
const platform = process.env.UNI_PLATFORM;
|
|
|
const inputDir = process.env.UNI_INPUT_DIR;
|
|
|
return (0, uni_cli_shared_1.defineUniPagesJsonPlugin)((opts) => {
|
|
|
let allPagePaths = [];
|
|
|
let isFirst = true;
|
|
|
return {
|
|
|
name: 'uni:mp-pages-json',
|
|
|
enforce: 'pre',
|
|
|
configResolved(config) {
|
|
|
resolvedConfig = config;
|
|
|
},
|
|
|
transform(code, id) {
|
|
|
if (process.env.UNI_APP_X === 'true') {
|
|
|
if (isFirst && allPagePaths.length) {
|
|
|
const { filename } = (0, uni_cli_shared_1.parseVueRequest)(id);
|
|
|
if (filename.endsWith('.vue') || filename.endsWith('.uvue')) {
|
|
|
const vueFilename = (0, uni_cli_shared_1.removeExt)((0, uni_cli_shared_1.normalizePath)(path_1.default.relative(process.env.UNI_INPUT_DIR, filename)));
|
|
|
// 项目内的
|
|
|
if (!vueFilename.startsWith('.')) {
|
|
|
// const index = allPagePaths.indexOf(pagePath)
|
|
|
// if (index > -1) {
|
|
|
if ((0, uni_cli_shared_1.runByHBuilderX)()) {
|
|
|
console.log(`当前工程${allPagePaths.length}个页面,正在编译${vueFilename}...${'\u200D'}`);
|
|
|
}
|
|
|
// }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (!opts.filter(id)) {
|
|
|
return null;
|
|
|
}
|
|
|
if (process.env.UNI_APP_X === 'true') {
|
|
|
// 调整换行符,确保 parseTree 的loc正确
|
|
|
const jsonCode = code.replace(/\r\n/g, '\n');
|
|
|
try {
|
|
|
(0, uni_cli_shared_1.checkPagesJson)((0, uni_cli_shared_1.preUVueJson)(jsonCode, 'pages.json'), process.env.UNI_INPUT_DIR);
|
|
|
}
|
|
|
catch (err) {
|
|
|
if (err.loc) {
|
|
|
const error = (0, uni_cli_shared_1.createRollupError)('uni:mp-pages-json', path_1.default.resolve(process.env.UNI_INPUT_DIR, 'pages.json'), err, jsonCode);
|
|
|
this.error(error);
|
|
|
}
|
|
|
else {
|
|
|
throw err;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
this.addWatchFile(path_1.default.resolve(inputDir, 'pages.json'));
|
|
|
(0, uni_cli_shared_1.getLocaleFiles)(path_1.default.resolve(inputDir, 'locale')).forEach((filepath) => {
|
|
|
this.addWatchFile(filepath);
|
|
|
});
|
|
|
const manifestJson = (0, uni_cli_shared_1.parseManifestJsonOnce)(inputDir);
|
|
|
const { appJson, pageJsons, nvuePages } = (0, uni_cli_shared_1.parseMiniProgramPagesJson)(code, platform, {
|
|
|
debug: !!manifestJson.debug,
|
|
|
darkmode: options.app.darkmode,
|
|
|
networkTimeout: manifestJson.networkTimeout,
|
|
|
subpackages: !!options.app.subpackages,
|
|
|
...options.json,
|
|
|
});
|
|
|
nvueCssPathsCache.set(resolvedConfig, nvuePages.map((pagePath) => pagePath + options.style.extname));
|
|
|
// add source
|
|
|
(0, uni_cli_shared_1.mergeMiniProgramAppJson)(appJson, manifestJson[platform], options.project?.source ?? {});
|
|
|
if (process.env.UNI_APP_X === 'true') {
|
|
|
// 当前平台支持workers,且manifest.json中配置了workers,则合并workers配置
|
|
|
if (options.app.workers && Object.keys((0, uni_cli_shared_1.getWorkers)()).length) {
|
|
|
// 如果没有配置,则默认为workers目录
|
|
|
appJson.workers = manifestJson.workers || 'workers';
|
|
|
}
|
|
|
if ((0, shared_1.isPlainObject)(appJson.workers) && appJson.workers.path) {
|
|
|
// 微信小程序测试对象结构的话,如果isSubpackage是false,会报找不到
|
|
|
// 故:只有isSubpackage为true保持对象结构,否则用字符串
|
|
|
if (!appJson.workers.isSubpackage) {
|
|
|
appJson.workers = appJson.workers.path;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (options.json?.formatAppJson) {
|
|
|
options.json.formatAppJson(appJson, manifestJson, pageJsons);
|
|
|
}
|
|
|
// 使用 once 获取的话,可以节省编译时间,但 i18n 内容发生变化时,pages.json 不会自动更新
|
|
|
const i18nOptions = (0, uni_cli_shared_1.initI18nOptionsOnce)(platform, inputDir, false, true);
|
|
|
if (i18nOptions) {
|
|
|
const { locale, locales, delimiters } = i18nOptions;
|
|
|
(0, uni_i18n_1.parseI18nJson)(appJson, locales[locale], delimiters);
|
|
|
(0, uni_i18n_1.parseI18nJson)(pageJsons, locales[locale], delimiters);
|
|
|
}
|
|
|
const { normalize } = options.app;
|
|
|
(0, uni_cli_shared_1.addMiniProgramAppJson)(normalize ? normalize(appJson) : appJson);
|
|
|
Object.keys(pageJsons).forEach((name) => {
|
|
|
if (isNormalPage(name)) {
|
|
|
(0, uni_cli_shared_1.addMiniProgramPageJson)(name, pageJsons[name]);
|
|
|
allPagePaths.push(name);
|
|
|
}
|
|
|
});
|
|
|
return {
|
|
|
code: `import './${uni_cli_shared_1.MANIFEST_JSON_JS}'\n` + importPagesCode(appJson),
|
|
|
map: { mappings: '' },
|
|
|
};
|
|
|
},
|
|
|
generateBundle() {
|
|
|
(0, uni_cli_shared_1.findChangedJsonFiles)(options.app.usingComponents).forEach((value, key) => {
|
|
|
debugPagesJson('json.changed', key);
|
|
|
this.emitFile({
|
|
|
type: 'asset',
|
|
|
fileName: key + '.json',
|
|
|
source: value,
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
buildEnd() {
|
|
|
isFirst = false;
|
|
|
},
|
|
|
};
|
|
|
});
|
|
|
}
|
|
|
exports.uniPagesJsonPlugin = uniPagesJsonPlugin;
|
|
|
/**
|
|
|
* 字节跳动小程序可以配置 ext:// 开头的插件页面模板,如 ext://microapp-trade-plugin/order-confirm
|
|
|
* @param pagePath
|
|
|
* @returns
|
|
|
*/
|
|
|
function isNormalPage(pagePath) {
|
|
|
return !pagePath.startsWith('ext://');
|
|
|
}
|
|
|
function importPagesCode(pagesJson) {
|
|
|
const importPagesCode = [];
|
|
|
function importPageCode(pagePath) {
|
|
|
if (!isNormalPage(pagePath)) {
|
|
|
return;
|
|
|
}
|
|
|
const pagePathWithExtname = (0, uni_cli_shared_1.normalizePagePath)(pagePath, process.env.UNI_PLATFORM);
|
|
|
if (pagePathWithExtname) {
|
|
|
importPagesCode.push(`import('${(0, entry_1.virtualPagePath)(pagePathWithExtname)}')`);
|
|
|
}
|
|
|
}
|
|
|
pagesJson.pages.forEach((pagePath) => importPageCode(pagePath));
|
|
|
if (pagesJson.subPackages) {
|
|
|
pagesJson.subPackages.forEach(({ root, pages }) => {
|
|
|
pages &&
|
|
|
pages.forEach((pagePath) => importPageCode(path_1.default.join(root, pagePath)));
|
|
|
});
|
|
|
}
|
|
|
let workerCode = [];
|
|
|
if (process.env.UNI_APP_X === 'true') {
|
|
|
const workers = (0, uni_cli_shared_1.getWorkers)();
|
|
|
workerCode = Object.keys(workers).map((key) => {
|
|
|
return `import('@/${key}')`;
|
|
|
});
|
|
|
}
|
|
|
return `if(!Math){
|
|
|
${importPagesCode.join('\n')}
|
|
|
${workerCode.join('\n')}
|
|
|
}`;
|
|
|
}
|