80 lines
3.5 KiB
JavaScript
80 lines
3.5 KiB
JavaScript
"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.nvuePagesCache = void 0;
|
|
const path_1 = __importDefault(require("path"));
|
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|
exports.nvuePagesCache = new Map();
|
|
// 在 @vue/compiler-sfc@3.2.47 执行前重写 @vue/compiler-dom compile 方法
|
|
const nvuePages = {};
|
|
rewriteBindingMetadata(nvuePages);
|
|
function uniPagesJsonPlugin({ renderer, appService, }) {
|
|
return (0, uni_cli_shared_1.defineUniPagesJsonPlugin)((opts) => {
|
|
return {
|
|
name: 'uni:app-nvue-pages-json',
|
|
enforce: 'pre',
|
|
configResolved(config) {
|
|
exports.nvuePagesCache.set(config, nvuePages);
|
|
},
|
|
transform(code, id) {
|
|
if (!opts.filter(id)) {
|
|
return;
|
|
}
|
|
this.addWatchFile(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'pages.json'));
|
|
(0, uni_cli_shared_1.getLocaleFiles)(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'locale')).forEach((filepath) => {
|
|
this.addWatchFile(filepath);
|
|
});
|
|
const pagesJson = (0, uni_cli_shared_1.normalizePagesJson)(code, process.env.UNI_PLATFORM);
|
|
Object.keys(nvuePages).forEach((name) => {
|
|
delete nvuePages[name];
|
|
});
|
|
pagesJson.pages.forEach((page) => {
|
|
if (page.style.isNVue) {
|
|
const filename = (0, uni_cli_shared_1.normalizePath)(path_1.default.resolve(process.env.UNI_INPUT_DIR, page.path + '.nvue'));
|
|
nvuePages[filename] = {
|
|
disableScroll: page.style.disableScroll,
|
|
scrollIndicator: page.style.scrollIndicator,
|
|
};
|
|
// fix: question/164673
|
|
// this.addWatchFile(filename)
|
|
}
|
|
});
|
|
if (renderer === 'native' && appService) {
|
|
this.emitFile({
|
|
fileName: uni_cli_shared_1.APP_CONFIG_SERVICE,
|
|
type: 'asset',
|
|
source: (0, uni_cli_shared_1.normalizeAppConfigService)(pagesJson, (0, uni_cli_shared_1.parseManifestJsonOnce)(process.env.UNI_INPUT_DIR)),
|
|
});
|
|
return {
|
|
code: '',
|
|
map: { mappings: '' },
|
|
};
|
|
}
|
|
return {
|
|
code: (0, uni_cli_shared_1.normalizeAppNVuePagesJson)(pagesJson),
|
|
map: { mappings: '' },
|
|
};
|
|
},
|
|
};
|
|
});
|
|
}
|
|
exports.uniPagesJsonPlugin = uniPagesJsonPlugin;
|
|
/**
|
|
* 在 BindingMetadata 中补充页面标记
|
|
*/
|
|
function rewriteBindingMetadata(nvuePages) {
|
|
const compilerDom = require((0, uni_cli_shared_1.resolveBuiltIn)('@vue/compiler-dom'));
|
|
const { compile } = compilerDom;
|
|
compilerDom.compile = (template, options = {}) => {
|
|
if (options.filename) {
|
|
if (nvuePages[options.filename]) {
|
|
;
|
|
(options.bindingMetadata || (options.bindingMetadata = {})).__pageOptions = nvuePages[options.filename];
|
|
}
|
|
}
|
|
return compile(template, options);
|
|
};
|
|
}
|