@dcloudio/uni-cli-shared 3.0.0-5000720260410001 → 3.0.0-5010520260709001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +1 -3
- package/dist/constants.js +2 -6
- package/dist/deps.d.ts +1 -0
- package/dist/deps.js +22 -13
- package/dist/dom2/fontFamily.d.ts +4 -0
- package/dist/dom2/fontFamily.js +21 -0
- package/dist/dom2/index.d.ts +3 -0
- package/dist/dom2/index.js +3 -0
- package/dist/dom2/rootScrollView.d.ts +47 -0
- package/dist/dom2/rootScrollView.js +283 -0
- package/dist/dom2/sharedData.d.ts +4 -0
- package/dist/dom2/sharedData.js +40 -5
- package/dist/dom2/vue.d.ts +16 -0
- package/dist/dom2/vue.js +37 -0
- package/dist/easycom.d.ts +1 -0
- package/dist/easycom.js +23 -9
- package/dist/env/define.d.ts +0 -1
- package/dist/env/define.js +3 -11
- package/dist/hbx/alias.js +64 -10
- package/dist/hbx/log.js +9 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/json/app/manifest/plus.js +9 -1
- package/dist/json/app/pages/definePage.js +3 -1
- package/dist/json/index.d.ts +1 -1
- package/dist/json/index.js +2 -1
- package/dist/json/mp/index.d.ts +2 -0
- package/dist/json/mp/index.js +23 -1
- package/dist/json/mp/jsonFile.d.ts +3 -2
- package/dist/json/mp/jsonFile.js +83 -13
- package/dist/json/mp/pages.d.ts +1 -0
- package/dist/json/mp/pages.js +6 -2
- package/dist/json/mp/subpackage.d.ts +26 -0
- package/dist/json/mp/subpackage.js +236 -0
- package/dist/json/uni-x/index.d.ts +6 -0
- package/dist/json/uni-x/index.js +54 -1
- package/dist/json/uni-x/manifest.d.ts +1 -1
- package/dist/json/uni-x/manifest.js +2 -1
- package/dist/json/utils.js +24 -0
- package/dist/logs/console.js +4 -1
- package/dist/messages/en.d.ts +11 -2
- package/dist/messages/en.js +11 -2
- package/dist/messages/index.d.ts +22 -4
- package/dist/messages/zh_CN.d.ts +11 -2
- package/dist/messages/zh_CN.js +11 -2
- package/dist/mp/style.js +6 -2
- package/dist/mp/usingComponents.d.ts +7 -5
- package/dist/mp/usingComponents.js +63 -34
- package/dist/postcss/plugins/stylePluginExternal.d.ts +9 -10
- package/dist/postcss/plugins/stylePluginExternal.js +51 -45
- package/dist/resolve.d.ts +1 -0
- package/dist/resolve.js +9 -2
- package/dist/uni_modules.cloud.d.ts +7 -1
- package/dist/uni_modules.cloud.js +131 -14
- package/dist/uni_modules.js +3 -2
- package/dist/utils.js +5 -0
- package/dist/uts.d.ts +1 -0
- package/dist/uts.js +90 -6
- package/dist/vite/autoImport.js +7 -4
- package/dist/vite/cloud.js +13 -6
- package/dist/vite/extApi.js +4 -1
- package/dist/vite/plugins/cssScoped.js +11 -2
- package/dist/vite/plugins/easycom.js +3 -1
- package/dist/vite/plugins/inject.js +11 -3
- package/dist/vite/plugins/json.js +2 -69
- package/dist/vite/plugins/jsonJs.js +41 -3
- package/dist/vite/plugins/pre.js +2 -0
- package/dist/vite/plugins/sfc.js +4 -1
- package/dist/vite/plugins/stats.d.ts +5 -1
- package/dist/vite/plugins/stats.js +74 -3
- package/dist/vite/plugins/uts/uni_modules.d.ts +1 -1
- package/dist/vite/plugins/uts/uni_modules.js +30 -12
- package/dist/vite/plugins/vitejs/plugins/asset.js +14 -1
- package/dist/vite/plugins/vitejs/plugins/css.d.ts +2 -2
- package/dist/vite/plugins/vitejs/plugins/css.js +45 -6
- package/dist/vue/transforms/index.d.ts +1 -0
- package/dist/vue/transforms/index.js +2 -1
- package/dist/vue/transforms/transformTeleport.d.ts +2 -0
- package/dist/vue/transforms/transformTeleport.js +68 -0
- package/dist/vue/transforms/x/transformDirection.js +33 -4
- package/dist/workers.d.ts +1 -0
- package/dist/workers.js +12 -5
- package/dist/x.d.ts +11 -0
- package/dist/x.js +43 -0
- package/lib/dom2/app/@vitejs/plugin-vue/dist/index.cjs +0 -7
- package/lib/dom2/app/@vitejs/plugin-vue/dist/index.mjs +0 -7
- package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.cjs.js +58 -63
- package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.cjs.prod.js +58 -63
- package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.d.ts +7 -1
- package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.esm-bundler.js +22 -47
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.cjs.js +12 -23
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +12 -22
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-browser.js +23 -74
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-browser.prod.js +5 -5
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js +3 -20
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.global.js +310 -363
- package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.global.prod.js +5 -5
- package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +810 -579
- package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.d.ts +33 -11114
- package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.esm-browser.js +1638 -1250
- package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.cjs.js +1031 -599
- package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.d.ts +470 -328
- package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.esm-browser.js +1154 -709
- package/lib/dom2/app/@vue/compiler-vapor-dom2/dist/compiler-vapor-dom2.cjs.js +1 -1
- package/lib/dom2/app/@vue/shared/dist/shared.cjs.js +16 -25
- package/lib/dom2/app/@vue/shared/dist/shared.cjs.prod.js +16 -25
- package/lib/dom2/app/@vue/shared/dist/shared.d.ts +5 -0
- package/lib/dom2/app/@vue/shared/dist/shared.esm-bundler.js +11 -23
- package/package.json +6 -6
package/dist/messages/zh_CN.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = {
|
|
4
4
|
'app.compiler.version': '编译器版本:{version}',
|
|
5
|
+
'view.render.compiler.target': '当前视图层编译目标:{target}',
|
|
6
|
+
'view.render.compiler.target.bytecode': '字节码',
|
|
7
|
+
'view.render.compiler.target.nativecode': '机器码',
|
|
8
|
+
'style.isolation.version': '当前样式隔离策略:{version}。详见:https://doc.dcloud.net.cn/uni-app-x/css/common/style-isolation.html',
|
|
5
9
|
compiling: '正在编译中...',
|
|
6
10
|
'dev.performance': '请注意运行模式下,因日志输出、sourcemap 以及未压缩源码等原因,性能和包体积,均不及发行模式。',
|
|
7
11
|
'dev.performance.nvue': '尤其是 app-nvue 的 sourcemap 影响较大',
|
|
@@ -13,14 +17,18 @@ exports.default = {
|
|
|
13
17
|
'dev.watching.end.pages': 'DONE Build complete. PAGES:{pages}',
|
|
14
18
|
'dev.watching.end.files': 'DONE Build complete. FILES:{files}',
|
|
15
19
|
'dev.watching.restart.vapor': 'DONE Restart required. 切换蒸汽模式需要重新运行才能生效。',
|
|
20
|
+
'dev.watching.restart.independentSubPackages': 'DONE Restart required. 独立分包 root 列表变化需要重新运行才能生效。',
|
|
21
|
+
'dev.watching.vapor.render.target': 'manifest.json 中更改了视图层编译目标为{manifestTarget},但注意运行控制台还是{runtimeTarget}。',
|
|
16
22
|
'build.failed': 'DONE Build failed.',
|
|
17
23
|
'compiler.build.failed': '编译失败',
|
|
18
24
|
'stat.warn.appid': '当前应用未配置 appid,无法使用 uni 统计,详情参考:https://ask.dcloud.net.cn/article/36303',
|
|
19
|
-
'stat.warn.version': '当前应用未配置uni
|
|
20
|
-
'stat.warn.tip': '已开启
|
|
25
|
+
'stat.warn.version': '当前应用未配置 uni 统计版本,默认使用公有版;可配置为公有版或私有版。详情:https://uniapp.dcloud.io/uni-stat',
|
|
26
|
+
'stat.warn.tip': '已开启uni 统计 2.0{type}',
|
|
21
27
|
'i18n.fallbackLocale.default': '当前应用未在 manifest.json 配置 fallbackLocale,默认使用:{locale}',
|
|
22
28
|
'i18n.fallbackLocale.missing': '当前应用配置的 fallbackLocale 或 locale 为:{locale},但 locale 目录缺少该语言文件',
|
|
23
29
|
'easycom.conflict': 'easycom组件冲突:',
|
|
30
|
+
'dom2.compatible.component': '蒸汽模式不支持 uni-app 兼容模式组件 {name},检测到其实现文件为 {file}。请改用标准模式的UTS组件实现来实现。',
|
|
31
|
+
'dom2.root.scroll.view': '蒸汽模式下页面可滚动,建议移除根节点 scroll-view,以避免嵌套滚动。详情: https://doc.dcloud.net.cn/uni-app-x/page.html#disablescroll',
|
|
24
32
|
'mp.component.args[0]': '{0}的第一个参数必须为静态字符串',
|
|
25
33
|
'mp.component.args[1]': '{0}需要两个参数',
|
|
26
34
|
'mp.360.unsupported': 'vue3暂不支持360小程序',
|
|
@@ -51,4 +59,5 @@ exports.default = {
|
|
|
51
59
|
'uni_modules.import': '插件[{0}]仅支持 @/uni_modules/{1} 方式引入,不支持直接导入内部文件 {2}。',
|
|
52
60
|
'pages.json.page.notfound': '页面"{pagePath}"不存在,请确保填写的页面路径不包含文件后缀,且必须与真实的文件路径大小写保持一致。',
|
|
53
61
|
'pages.json.page.slash': '路径 "{pagePath}" 不能以 "/" 开头',
|
|
62
|
+
'pages.json.tabbar.page.notfound': 'tabBar 中配置的页面 "{pagePath}" 未在 pages.json 中注册。',
|
|
54
63
|
};
|
package/dist/mp/style.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.transformPartSelector = exports.transformScopedCss = void 0;
|
|
|
4
4
|
const tags_1 = require("./tags");
|
|
5
5
|
const logs_1 = require("../logs");
|
|
6
6
|
const uni_shared_1 = require("@dcloudio/uni-shared");
|
|
7
|
+
const HTML_TAG_SELECTOR_RE = new RegExp(`/\\*[\\s\\S]*?(?:\\*/|$)|[\\s,}](${Object.keys(tags_1.HTML_TO_MINI_PROGRAM_TAGS).join('|')})\\s*(?=,|\\{)`, 'g');
|
|
7
8
|
function transformScopedCss(cssCode) {
|
|
8
9
|
checkHtmlTagSelector(cssCode);
|
|
9
10
|
return cssCode.replace(/\[(data-v-[a-f0-9]{8})\]/gi, (_, scopedId) => {
|
|
@@ -18,8 +19,11 @@ function transformPartSelector(cssCode) {
|
|
|
18
19
|
}
|
|
19
20
|
exports.transformPartSelector = transformPartSelector;
|
|
20
21
|
function checkHtmlTagSelector(cssCode) {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
HTML_TAG_SELECTOR_RE.lastIndex = 0;
|
|
23
|
+
let match;
|
|
24
|
+
while ((match = HTML_TAG_SELECTOR_RE.exec(cssCode))) {
|
|
25
|
+
const tag = match[1];
|
|
26
|
+
if (tag) {
|
|
23
27
|
(0, logs_1.output)('warn', `小程序端 style 暂不支持 ${tag} 标签选择器,推荐使用 class 选择器,详情参考:https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html#style`);
|
|
24
28
|
break;
|
|
25
29
|
}
|
|
@@ -10,17 +10,18 @@ interface MainDescriptor {
|
|
|
10
10
|
script: string;
|
|
11
11
|
template: string;
|
|
12
12
|
}
|
|
13
|
-
export declare function parseMainDescriptor(filename: string, ast: Program, resolve: ParseDescriptor['resolve']): Promise<MainDescriptor>;
|
|
14
|
-
export declare function updateMiniProgramComponentsByScriptFilename(scriptFilename: string, inputDir: string, normalizeComponentName: (name: string) => string): void;
|
|
15
|
-
export declare function updateMiniProgramComponentsByTemplateFilename(templateFilename: string, inputDir: string, normalizeComponentName: (name: string) => string): void;
|
|
16
|
-
export declare function updateMiniProgramGlobalComponents(filename: string, ast: Program, { inputDir, resolve, normalizeComponentName, }: {
|
|
13
|
+
export declare function parseMainDescriptor(filename: string, ast: Program, resolve: ParseDescriptor['resolve'], root?: string): Promise<MainDescriptor>;
|
|
14
|
+
export declare function updateMiniProgramComponentsByScriptFilename(scriptFilename: string, inputDir: string, normalizeComponentName: (name: string) => string, root?: string): void;
|
|
15
|
+
export declare function updateMiniProgramComponentsByTemplateFilename(templateFilename: string, inputDir: string, normalizeComponentName: (name: string) => string, root?: string): void;
|
|
16
|
+
export declare function updateMiniProgramGlobalComponents(filename: string, ast: Program, { inputDir, resolve, normalizeComponentName, root, }: {
|
|
17
17
|
inputDir: string;
|
|
18
18
|
resolve: ParseDescriptor['resolve'];
|
|
19
19
|
normalizeComponentName: (name: string) => string;
|
|
20
|
+
root?: string;
|
|
20
21
|
}): Promise<{
|
|
21
22
|
imports: ImportDeclaration[];
|
|
22
23
|
}>;
|
|
23
|
-
export declare function updateMiniProgramComponentsByMainFilename(mainFilename: string, inputDir: string, normalizeComponentName: (name: string) => string): void;
|
|
24
|
+
export declare function updateMiniProgramComponentsByMainFilename(mainFilename: string, inputDir: string, normalizeComponentName: (name: string) => string, root?: string): void;
|
|
24
25
|
export interface TemplateDescriptor {
|
|
25
26
|
bindingComponents: BindingComponents;
|
|
26
27
|
imports: ImportDeclaration[];
|
|
@@ -37,6 +38,7 @@ export declare function parseTemplateDescriptor(filename: string, ast: Program,
|
|
|
37
38
|
interface ParseDescriptor {
|
|
38
39
|
resolve: PluginContext['resolve'];
|
|
39
40
|
isExternal: boolean;
|
|
41
|
+
root?: string;
|
|
40
42
|
}
|
|
41
43
|
export interface ScriptDescriptor extends TemplateDescriptor {
|
|
42
44
|
setupBindingComponents: BindingComponents;
|
|
@@ -14,9 +14,12 @@ const constants_1 = require("../constants");
|
|
|
14
14
|
const utils_1 = require("../utils");
|
|
15
15
|
const utils_2 = require("../vite/utils");
|
|
16
16
|
const jsonFile_1 = require("../json/mp/jsonFile");
|
|
17
|
+
const subpackage_1 = require("../json/mp/subpackage");
|
|
17
18
|
const mainDescriptors = new Map();
|
|
18
19
|
const scriptDescriptors = new Map();
|
|
19
20
|
const templateDescriptors = new Map();
|
|
21
|
+
const scriptDescriptorMainMap = new Map();
|
|
22
|
+
const templateDescriptorMainMap = new Map();
|
|
20
23
|
// 存储全局组件名到完整源文件路径的映射
|
|
21
24
|
const globalComponentSourceMap = new Map();
|
|
22
25
|
function getGlobalComponentSource(componentName) {
|
|
@@ -36,60 +39,83 @@ function findImportScriptSource(ast) {
|
|
|
36
39
|
return importDeclaration.source.value;
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
|
-
async function resolveSource(filename, source, resolve) {
|
|
42
|
+
async function resolveSource(filename, source, resolve, root) {
|
|
40
43
|
if (!source) {
|
|
41
44
|
return;
|
|
42
45
|
}
|
|
43
|
-
const resolveId = await resolve(source, filename);
|
|
46
|
+
const resolveId = await resolve(source, root ? (0, subpackage_1.withIndependentRoot)(filename, root) : filename);
|
|
44
47
|
if (resolveId) {
|
|
45
48
|
return resolveId.id;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
async function parseMainDescriptor(filename, ast, resolve) {
|
|
49
|
-
const script = await resolveSource(filename, findImportScriptSource(ast), resolve);
|
|
50
|
-
const template = await resolveSource(filename, findImportTemplateSource(ast), resolve);
|
|
51
|
-
const imports = await parseVueComponentImports(filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), resolve);
|
|
51
|
+
async function parseMainDescriptor(filename, ast, resolve, root) {
|
|
52
|
+
const script = await resolveSource(filename, findImportScriptSource(ast), resolve, root);
|
|
53
|
+
const template = await resolveSource(filename, findImportTemplateSource(ast), resolve, root);
|
|
54
|
+
const imports = await parseVueComponentImports(root ? (0, subpackage_1.withIndependentRoot)(filename, root) : filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), resolve);
|
|
52
55
|
if (!script) {
|
|
53
56
|
// inline script
|
|
54
|
-
await parseScriptDescriptor(filename, ast, {
|
|
57
|
+
await parseScriptDescriptor(filename, ast, {
|
|
58
|
+
resolve,
|
|
59
|
+
isExternal: false,
|
|
60
|
+
root,
|
|
61
|
+
});
|
|
55
62
|
}
|
|
56
63
|
if (!template) {
|
|
57
64
|
// inline template
|
|
58
|
-
await parseTemplateDescriptor(filename, ast, {
|
|
65
|
+
await parseTemplateDescriptor(filename, ast, {
|
|
66
|
+
resolve,
|
|
67
|
+
isExternal: false,
|
|
68
|
+
root,
|
|
69
|
+
});
|
|
59
70
|
}
|
|
60
71
|
const descriptor = {
|
|
61
72
|
imports,
|
|
62
|
-
script: script
|
|
63
|
-
|
|
73
|
+
script: script
|
|
74
|
+
? createDescriptorKey((0, utils_2.parseVueRequest)(script).filename, (0, subpackage_1.parseIndependentRoot)(script) || root)
|
|
75
|
+
: createDescriptorKey(filename, root),
|
|
76
|
+
template: template
|
|
77
|
+
? createDescriptorKey((0, utils_2.parseVueRequest)(template).filename, (0, subpackage_1.parseIndependentRoot)(template) || root)
|
|
78
|
+
: createDescriptorKey(filename, root),
|
|
64
79
|
};
|
|
65
|
-
|
|
80
|
+
const mainDescriptorKey = createDescriptorKey(filename, root);
|
|
81
|
+
updateMainDescriptorIndex(mainDescriptorKey, descriptor);
|
|
66
82
|
return descriptor;
|
|
67
83
|
}
|
|
68
84
|
exports.parseMainDescriptor = parseMainDescriptor;
|
|
69
|
-
function
|
|
70
|
-
const
|
|
85
|
+
function updateMainDescriptorIndex(mainDescriptorKey, descriptor) {
|
|
86
|
+
const oldDescriptor = mainDescriptors.get(mainDescriptorKey);
|
|
87
|
+
if (oldDescriptor && oldDescriptor.script !== descriptor.script) {
|
|
88
|
+
scriptDescriptorMainMap.delete(oldDescriptor.script);
|
|
89
|
+
}
|
|
90
|
+
if (oldDescriptor && oldDescriptor.template !== descriptor.template) {
|
|
91
|
+
templateDescriptorMainMap.delete(oldDescriptor.template);
|
|
92
|
+
}
|
|
93
|
+
mainDescriptors.set(mainDescriptorKey, descriptor);
|
|
94
|
+
scriptDescriptorMainMap.set(descriptor.script, mainDescriptorKey);
|
|
95
|
+
templateDescriptorMainMap.set(descriptor.template, mainDescriptorKey);
|
|
96
|
+
}
|
|
97
|
+
function updateMiniProgramComponentsByScriptFilename(scriptFilename, inputDir, normalizeComponentName, root) {
|
|
98
|
+
const mainFilename = findMainFilenameByScriptFilename(createDescriptorKey(scriptFilename, root));
|
|
71
99
|
if (mainFilename) {
|
|
72
|
-
updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, normalizeComponentName);
|
|
100
|
+
updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, normalizeComponentName, root);
|
|
73
101
|
}
|
|
74
102
|
}
|
|
75
103
|
exports.updateMiniProgramComponentsByScriptFilename = updateMiniProgramComponentsByScriptFilename;
|
|
76
|
-
function updateMiniProgramComponentsByTemplateFilename(templateFilename, inputDir, normalizeComponentName) {
|
|
77
|
-
const mainFilename = findMainFilenameByTemplateFilename(templateFilename);
|
|
104
|
+
function updateMiniProgramComponentsByTemplateFilename(templateFilename, inputDir, normalizeComponentName, root) {
|
|
105
|
+
const mainFilename = findMainFilenameByTemplateFilename(createDescriptorKey(templateFilename, root));
|
|
78
106
|
if (mainFilename) {
|
|
79
|
-
updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, normalizeComponentName);
|
|
107
|
+
updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, normalizeComponentName, root);
|
|
80
108
|
}
|
|
81
109
|
}
|
|
82
110
|
exports.updateMiniProgramComponentsByTemplateFilename = updateMiniProgramComponentsByTemplateFilename;
|
|
83
111
|
function findMainFilenameByScriptFilename(scriptFilename) {
|
|
84
|
-
|
|
85
|
-
return keys.find((key) => mainDescriptors.get(key).script === scriptFilename);
|
|
112
|
+
return scriptDescriptorMainMap.get(scriptFilename);
|
|
86
113
|
}
|
|
87
114
|
function findMainFilenameByTemplateFilename(templateFilename) {
|
|
88
|
-
|
|
89
|
-
return keys.find((key) => mainDescriptors.get(key).template === templateFilename);
|
|
115
|
+
return templateDescriptorMainMap.get(templateFilename);
|
|
90
116
|
}
|
|
91
|
-
async function updateMiniProgramGlobalComponents(filename, ast, { inputDir, resolve, normalizeComponentName, }) {
|
|
92
|
-
const { bindingComponents, imports } = await parseGlobalDescriptor(filename, ast, resolve);
|
|
117
|
+
async function updateMiniProgramGlobalComponents(filename, ast, { inputDir, resolve, normalizeComponentName, root, }) {
|
|
118
|
+
const { bindingComponents, imports } = await parseGlobalDescriptor(filename, ast, resolve, root);
|
|
93
119
|
// 存储全局组件名到完整源文件路径的映射
|
|
94
120
|
imports.forEach(({ source: { value }, specifiers: [specifier] }) => {
|
|
95
121
|
const { name } = specifier.local;
|
|
@@ -97,7 +123,7 @@ async function updateMiniProgramGlobalComponents(filename, ast, { inputDir, reso
|
|
|
97
123
|
return;
|
|
98
124
|
}
|
|
99
125
|
if (!globalComponentSourceMap.has(bindingComponents[name].tag)) {
|
|
100
|
-
globalComponentSourceMap.set(bindingComponents[name].tag, value);
|
|
126
|
+
globalComponentSourceMap.set(bindingComponents[name].tag, (0, subpackage_1.withoutIndependentRoot)(value));
|
|
101
127
|
}
|
|
102
128
|
});
|
|
103
129
|
(0, jsonFile_1.addMiniProgramUsingComponents)('app', createUsingComponents(bindingComponents, imports, inputDir, normalizeComponentName));
|
|
@@ -115,13 +141,13 @@ function createUsingComponents(bindingComponents, imports, inputDir, normalizeCo
|
|
|
115
141
|
}
|
|
116
142
|
const componentName = normalizeComponentName((0, shared_1.hyphenate)(bindingComponents[name].tag));
|
|
117
143
|
if (!usingComponents[componentName]) {
|
|
118
|
-
usingComponents[componentName] = (0, uni_shared_1.addLeadingSlash)((0, utils_1.removeExt)((0, utils_1.normalizeMiniProgramFilename)(value, inputDir)));
|
|
144
|
+
usingComponents[componentName] = (0, uni_shared_1.addLeadingSlash)((0, utils_1.removeExt)((0, utils_1.normalizeMiniProgramFilename)((0, subpackage_1.withoutIndependentRoot)(value), inputDir)));
|
|
119
145
|
}
|
|
120
146
|
});
|
|
121
147
|
return usingComponents;
|
|
122
148
|
}
|
|
123
|
-
function updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, normalizeComponentName) {
|
|
124
|
-
const mainDescriptor = mainDescriptors.get(mainFilename);
|
|
149
|
+
function updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, normalizeComponentName, root) {
|
|
150
|
+
const mainDescriptor = mainDescriptors.get(createDescriptorKey(mainFilename, root));
|
|
125
151
|
if (!mainDescriptor) {
|
|
126
152
|
return;
|
|
127
153
|
}
|
|
@@ -138,7 +164,7 @@ function updateMiniProgramComponentsByMainFilename(mainFilename, inputDir, norma
|
|
|
138
164
|
...scriptDescriptor.setupBindingComponents,
|
|
139
165
|
}, scriptDescriptor.bindingComponents);
|
|
140
166
|
const imports = parseImports(mainDescriptor.imports, scriptDescriptor.imports, templateDescriptor.imports);
|
|
141
|
-
(0, jsonFile_1.addMiniProgramUsingComponents)((0, utils_1.removeExt)((0, utils_1.normalizeMiniProgramFilename)(mainFilename, inputDir)), createUsingComponents(bindingComponents, imports, inputDir, normalizeComponentName));
|
|
167
|
+
(0, jsonFile_1.addMiniProgramUsingComponents)((0, utils_1.removeExt)((0, utils_1.normalizeMiniProgramFilename)((0, subpackage_1.withoutIndependentRoot)(mainFilename), inputDir)), createUsingComponents(bindingComponents, imports, inputDir, normalizeComponentName));
|
|
142
168
|
}
|
|
143
169
|
exports.updateMiniProgramComponentsByMainFilename = updateMiniProgramComponentsByMainFilename;
|
|
144
170
|
function findBindingComponent(tag, bindingComponents) {
|
|
@@ -189,19 +215,19 @@ function parseImports(mainImports, scriptImports, templateImports) {
|
|
|
189
215
|
async function parseTemplateDescriptor(filename, ast, options) {
|
|
190
216
|
// 外置时查找所有 vue component import
|
|
191
217
|
const imports = options.isExternal
|
|
192
|
-
? await parseVueComponentImports(filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), options.resolve)
|
|
218
|
+
? await parseVueComponentImports(options.root ? (0, subpackage_1.withIndependentRoot)(filename, options.root) : filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), options.resolve)
|
|
193
219
|
: [];
|
|
194
220
|
const descriptor = {
|
|
195
221
|
bindingComponents: findBindingComponents(ast.body),
|
|
196
222
|
imports,
|
|
197
223
|
};
|
|
198
|
-
templateDescriptors.set(filename, descriptor);
|
|
224
|
+
templateDescriptors.set(createDescriptorKey(filename, options.root), descriptor);
|
|
199
225
|
return descriptor;
|
|
200
226
|
}
|
|
201
227
|
exports.parseTemplateDescriptor = parseTemplateDescriptor;
|
|
202
|
-
async function parseGlobalDescriptor(filename, ast, resolve) {
|
|
228
|
+
async function parseGlobalDescriptor(filename, ast, resolve, root) {
|
|
203
229
|
// 外置时查找所有 vue component import
|
|
204
|
-
const imports = (await parseVueComponentImports(filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), resolve)).filter((item) => !(0, utils_1.isAppVue)((0, utils_2.cleanUrl)(item.source.value)));
|
|
230
|
+
const imports = (await parseVueComponentImports(root ? (0, subpackage_1.withIndependentRoot)(filename, root) : filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), resolve)).filter((item) => !(0, utils_1.isAppVue)((0, utils_2.cleanUrl)(item.source.value)));
|
|
205
231
|
return {
|
|
206
232
|
bindingComponents: parseGlobalComponents(ast),
|
|
207
233
|
imports,
|
|
@@ -218,14 +244,14 @@ async function parseGlobalDescriptor(filename, ast, resolve) {
|
|
|
218
244
|
async function parseScriptDescriptor(filename, ast, options) {
|
|
219
245
|
// 外置时查找所有 vue component import
|
|
220
246
|
const imports = options.isExternal
|
|
221
|
-
? await parseVueComponentImports(filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), options.resolve)
|
|
247
|
+
? await parseVueComponentImports(options.root ? (0, subpackage_1.withIndependentRoot)(filename, options.root) : filename, ast.body.filter((node) => (0, types_1.isImportDeclaration)(node)), options.resolve)
|
|
222
248
|
: [];
|
|
223
249
|
const descriptor = {
|
|
224
250
|
bindingComponents: parseComponents(ast),
|
|
225
251
|
setupBindingComponents: findBindingComponents(ast.body),
|
|
226
252
|
imports,
|
|
227
253
|
};
|
|
228
|
-
scriptDescriptors.set(filename, descriptor);
|
|
254
|
+
scriptDescriptors.set(createDescriptorKey(filename, options.root), descriptor);
|
|
229
255
|
return descriptor;
|
|
230
256
|
}
|
|
231
257
|
exports.parseScriptDescriptor = parseScriptDescriptor;
|
|
@@ -395,6 +421,9 @@ async function parseVueComponentImports(importer, imports, resolve) {
|
|
|
395
421
|
}
|
|
396
422
|
return vueComponentImports;
|
|
397
423
|
}
|
|
424
|
+
function createDescriptorKey(filename, root) {
|
|
425
|
+
return root ? (0, subpackage_1.withIndependentRoot)(filename, root) : filename;
|
|
426
|
+
}
|
|
398
427
|
/**
|
|
399
428
|
* static import => dynamic import
|
|
400
429
|
* @param code
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import type { PluginCreator } from 'postcss';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 基于页面 externalClasses 使用情况提升页面样式优先级
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* .a ->
|
|
9
|
-
* -
|
|
10
|
-
* .foo ->
|
|
11
|
-
* .bar -> .bar
|
|
5
|
+
* 小程序平台(mp-*):
|
|
6
|
+
* - 页面没有使用 externalClasses:不做转换
|
|
7
|
+
* - 页面存在动态 externalClasses:选择器最后一个 class 追加 [class]
|
|
8
|
+
* .a -> .a[class]
|
|
9
|
+
* - 页面只有静态 externalClasses:仅命中静态 class 的选择器追加 [class]
|
|
10
|
+
* .foo -> .foo[class](foo 在 staticClasses 中)
|
|
11
|
+
* .bar -> .bar(bar 不在 staticClasses 中)
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* while minimizing unnecessary transformations for performance
|
|
13
|
+
* 追加 [class] 可以提升 class 选择器优先级,同时避免原先插入 page 带来的结构影响。
|
|
15
14
|
*/
|
|
16
15
|
declare const externalPlugin: PluginCreator<void>;
|
|
17
16
|
export default externalPlugin;
|
|
@@ -7,18 +7,17 @@ const postcss_selector_parser_1 = __importDefault(require("postcss-selector-pars
|
|
|
7
7
|
const pages_1 = require("../../json/pages");
|
|
8
8
|
const externalClasses_1 = require("../../mp/externalClasses");
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* 基于页面 externalClasses 使用情况提升页面样式优先级
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
* -
|
|
15
|
-
* .a ->
|
|
16
|
-
* -
|
|
17
|
-
* .foo ->
|
|
18
|
-
* .bar -> .bar
|
|
12
|
+
* 小程序平台(mp-*):
|
|
13
|
+
* - 页面没有使用 externalClasses:不做转换
|
|
14
|
+
* - 页面存在动态 externalClasses:选择器最后一个 class 追加 [class]
|
|
15
|
+
* .a -> .a[class]
|
|
16
|
+
* - 页面只有静态 externalClasses:仅命中静态 class 的选择器追加 [class]
|
|
17
|
+
* .foo -> .foo[class](foo 在 staticClasses 中)
|
|
18
|
+
* .bar -> .bar(bar 不在 staticClasses 中)
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
* while minimizing unnecessary transformations for performance
|
|
20
|
+
* 追加 [class] 可以提升 class 选择器优先级,同时避免原先插入 page 带来的结构影响。
|
|
22
21
|
*/
|
|
23
22
|
const externalPlugin = () => {
|
|
24
23
|
return {
|
|
@@ -27,21 +26,21 @@ const externalPlugin = () => {
|
|
|
27
26
|
const processedRules = new WeakSet();
|
|
28
27
|
return {
|
|
29
28
|
OnceExit(root) {
|
|
30
|
-
//
|
|
29
|
+
// 只有小程序平台需要处理 externalClasses 的样式优先级
|
|
31
30
|
const platform = process.env.UNI_PLATFORM || '';
|
|
32
31
|
if (!platform.startsWith('mp-')) {
|
|
33
32
|
return;
|
|
34
33
|
}
|
|
35
|
-
//
|
|
34
|
+
// 从 postcss source 中获取当前样式所属文件
|
|
36
35
|
const filePath = root.source?.input?.file;
|
|
37
36
|
if (!filePath) {
|
|
38
37
|
return;
|
|
39
38
|
}
|
|
40
|
-
//
|
|
39
|
+
// 只处理页面文件,组件文件保持原样
|
|
41
40
|
if (!(0, pages_1.isUniPageFile)(filePath)) {
|
|
42
41
|
return;
|
|
43
42
|
}
|
|
44
|
-
//
|
|
43
|
+
// 获取页面中收集到的 externalClasses 使用信息
|
|
45
44
|
const externalClassesInfo = (0, externalClasses_1.findPageExternalClasses)(filePath);
|
|
46
45
|
let staticClasses = new Set();
|
|
47
46
|
let hasDynamic = false;
|
|
@@ -55,7 +54,7 @@ const externalPlugin = () => {
|
|
|
55
54
|
hasDynamic = true;
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
|
-
//
|
|
57
|
+
// 没有静态 class,也没有动态绑定时,直接跳过,避免无意义遍历
|
|
59
58
|
if (staticClasses.size === 0 && !hasDynamic) {
|
|
60
59
|
return;
|
|
61
60
|
}
|
|
@@ -68,60 +67,67 @@ const externalPlugin = () => {
|
|
|
68
67
|
};
|
|
69
68
|
};
|
|
70
69
|
function processRule(rule, processedRules, staticClasses, hasDynamic) {
|
|
71
|
-
//
|
|
70
|
+
// 同一个 Rule 只处理一次,避免被重复追加 [class]
|
|
72
71
|
if (processedRules.has(rule)) {
|
|
73
72
|
return;
|
|
74
73
|
}
|
|
75
|
-
//
|
|
74
|
+
// keyframes 内部的 from/to 不是普通选择器,不能处理
|
|
76
75
|
if (rule.parent &&
|
|
77
76
|
rule.parent.type === 'atrule' &&
|
|
78
77
|
/-?keyframes$/.test(rule.parent.name)) {
|
|
79
78
|
return;
|
|
80
79
|
}
|
|
81
80
|
processedRules.add(rule);
|
|
82
|
-
//
|
|
81
|
+
// 根据 externalClasses 情况处理选择器
|
|
83
82
|
rule.selector = (0, postcss_selector_parser_1.default)((selectorRoot) => {
|
|
84
83
|
selectorRoot.each((selector) => {
|
|
84
|
+
let classNode;
|
|
85
85
|
if (hasDynamic) {
|
|
86
|
-
//
|
|
87
|
-
|
|
86
|
+
// 动态绑定无法提前知道具体 class,所有包含 class 的选择器都提升优先级
|
|
87
|
+
classNode = findLastClassNode(selector);
|
|
88
88
|
}
|
|
89
89
|
else {
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
// 静态绑定只处理命中 staticClasses 的选择器,减少无关 CSS 变更
|
|
91
|
+
classNode = findLastClassNode(selector, staticClasses);
|
|
92
|
+
}
|
|
93
|
+
if (classNode) {
|
|
94
|
+
appendClassAttribute(selector, classNode);
|
|
94
95
|
}
|
|
95
96
|
});
|
|
96
97
|
}).processSync(rule.selector);
|
|
97
98
|
}
|
|
98
99
|
/**
|
|
99
|
-
*
|
|
100
|
+
* 找到选择器最右侧的 class 节点。
|
|
101
|
+
* 传入 classes 时,仅在选择器包含目标 class 后才返回最右侧 class,
|
|
102
|
+
* 这样 .a .b 在命中 .a 时也能输出 .a .b[class],符合整体提权预期。
|
|
100
103
|
*/
|
|
101
|
-
function
|
|
102
|
-
let
|
|
103
|
-
selector.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
function findLastClassNode(selector, classes) {
|
|
105
|
+
let lastClassNode;
|
|
106
|
+
for (let i = selector.nodes.length - 1; i >= 0; i--) {
|
|
107
|
+
const node = selector.nodes[i];
|
|
108
|
+
if (node.type !== 'class') {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (!lastClassNode) {
|
|
112
|
+
lastClassNode = node;
|
|
113
|
+
}
|
|
114
|
+
if (!classes || classes.has(node.value)) {
|
|
115
|
+
return lastClassNode;
|
|
107
116
|
}
|
|
108
|
-
}
|
|
109
|
-
return found;
|
|
117
|
+
}
|
|
110
118
|
}
|
|
111
119
|
/**
|
|
112
|
-
*
|
|
113
|
-
* .a ->
|
|
114
|
-
* .
|
|
120
|
+
* 在 class 后追加 [class] 提升优先级。
|
|
121
|
+
* .a -> .a[class]
|
|
122
|
+
* .a[class] -> .a[class][class]
|
|
123
|
+
* .a .b -> .a .b[class]
|
|
115
124
|
*/
|
|
116
|
-
function
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
// Insert 'page' tag and a combinator (space) at the beginning
|
|
123
|
-
selector.prepend(postcss_selector_parser_1.default.combinator({ value: ' ' }));
|
|
124
|
-
selector.prepend(postcss_selector_parser_1.default.tag({ value: 'page' }));
|
|
125
|
+
function appendClassAttribute(selector, classNode) {
|
|
126
|
+
selector.insertAfter(classNode, postcss_selector_parser_1.default.attribute({
|
|
127
|
+
attribute: 'class',
|
|
128
|
+
value: undefined,
|
|
129
|
+
raws: {},
|
|
130
|
+
}));
|
|
125
131
|
}
|
|
126
132
|
externalPlugin.postcss = true;
|
|
127
133
|
exports.default = externalPlugin;
|
package/dist/resolve.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function requireResolve(filename: string, basedir: string): string;
|
|
2
|
+
export declare function resolveMainUtsName(): string;
|
|
2
3
|
export declare function relativeFile(from: string, to: string): string;
|
|
3
4
|
export declare const resolveMainPathOnce: (inputDir: string) => string;
|
|
4
5
|
export declare function getBuiltInPaths(): string[];
|
package/dist/resolve.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.resolveComponentsLibDirs = exports.resolveComponentsLibPath = exports.resolveVueI18nRuntime = exports.resolveBuiltIn = exports.getBuiltInPaths = exports.resolveMainPathOnce = exports.relativeFile = exports.requireResolve = void 0;
|
|
6
|
+
exports.resolveComponentsLibDirs = exports.resolveComponentsLibPath = exports.resolveVueI18nRuntime = exports.resolveBuiltIn = exports.getBuiltInPaths = exports.resolveMainPathOnce = exports.relativeFile = exports.resolveMainUtsName = exports.requireResolve = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const debug_1 = __importDefault(require("debug"));
|
|
@@ -24,6 +24,13 @@ function resolveWithSymlinks(id, basedir) {
|
|
|
24
24
|
preserveSymlinks: true,
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
function resolveMainUtsName() {
|
|
28
|
+
if (process.env.UNI_COMPILE_TARGET === 'ext-api') {
|
|
29
|
+
return process.env.UNI_COMPILE_EXT_API_UVUE_ENTRY || 'main.uts';
|
|
30
|
+
}
|
|
31
|
+
return 'main.uts';
|
|
32
|
+
}
|
|
33
|
+
exports.resolveMainUtsName = resolveMainUtsName;
|
|
27
34
|
function relativeFile(from, to) {
|
|
28
35
|
const relativePath = (0, utils_1.normalizePath)(path_1.default.relative(path_1.default.dirname(from), to));
|
|
29
36
|
return relativePath.startsWith('.') ? relativePath : './' + relativePath;
|
|
@@ -31,7 +38,7 @@ function relativeFile(from, to) {
|
|
|
31
38
|
exports.relativeFile = relativeFile;
|
|
32
39
|
exports.resolveMainPathOnce = (0, uni_shared_1.once)((inputDir) => {
|
|
33
40
|
if (process.env.UNI_APP_X === 'true') {
|
|
34
|
-
const mainUTSPath = path_1.default.resolve(inputDir,
|
|
41
|
+
const mainUTSPath = path_1.default.resolve(inputDir, resolveMainUtsName());
|
|
35
42
|
if (fs_1.default.existsSync(mainUTSPath)) {
|
|
36
43
|
return (0, utils_1.normalizePath)(mainUTSPath);
|
|
37
44
|
}
|
|
@@ -32,6 +32,7 @@ export interface EncryptPackageJson {
|
|
|
32
32
|
dependencies: string[];
|
|
33
33
|
artifacts: {
|
|
34
34
|
env: {
|
|
35
|
+
vapor: boolean;
|
|
35
36
|
compilerVersion: string;
|
|
36
37
|
} & Record<string, any>;
|
|
37
38
|
apis: string[];
|
|
@@ -45,9 +46,10 @@ export interface EncryptPackageJson {
|
|
|
45
46
|
};
|
|
46
47
|
};
|
|
47
48
|
}
|
|
48
|
-
export declare function initCheckEnv(): Record<string,
|
|
49
|
+
export declare function initCheckEnv(): Record<string, unknown>;
|
|
49
50
|
export declare function resolveEncryptUniModule(id: string, platform: typeof process.env.UNI_UTS_PLATFORM, isX?: boolean): string | undefined;
|
|
50
51
|
type CloudCompileSdkType = 'utssdk' | 'easycom' | 'all';
|
|
52
|
+
type VaporRenderTarget = 'bytecode' | 'nativecode';
|
|
51
53
|
export interface CloudCompileParams {
|
|
52
54
|
mode: 'development' | 'production';
|
|
53
55
|
packType: 'debug' | 'release';
|
|
@@ -56,8 +58,11 @@ export interface CloudCompileParams {
|
|
|
56
58
|
appname: string;
|
|
57
59
|
platform: typeof process.env.UNI_UTS_PLATFORM;
|
|
58
60
|
'uni-app-x': boolean;
|
|
61
|
+
vapor: boolean;
|
|
62
|
+
vaporRenderTarget?: VaporRenderTarget;
|
|
59
63
|
env: Record<string, string>;
|
|
60
64
|
}
|
|
65
|
+
export declare function validateCloudCompileAppInfo(params: Pick<CloudCompileParams, 'appid' | 'appname'>): string;
|
|
61
66
|
export declare function checkEncryptUniModules(inputDir: string, params: CloudCompileParams, sdkType?: CloudCompileSdkType): Promise<{} | undefined>;
|
|
62
67
|
export declare function getUniModulesEncryptType(pluginId: string): "" | "utssdk" | "easycom" | undefined;
|
|
63
68
|
export declare function parseUniModulesArtifacts(): {
|
|
@@ -66,5 +71,6 @@ export declare function parseUniModulesArtifacts(): {
|
|
|
66
71
|
scopedSlots: string[];
|
|
67
72
|
declaration: string;
|
|
68
73
|
}[];
|
|
74
|
+
export declare function copyEncryptUniModulesDom2Bytes(): boolean | Promise<boolean>;
|
|
69
75
|
export declare function virtualComponentPath(filepath: string): string;
|
|
70
76
|
export {};
|