@tarojs/webpack5-runner 4.2.0 → 4.2.1-beta.1
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/plugins/HarmonyPlugin.js +1 -1
- package/dist/plugins/HarmonyPlugin.js.map +1 -1
- package/dist/plugins/MiniCompileModePlugin.js +49 -4
- package/dist/plugins/MiniCompileModePlugin.js.map +1 -1
- package/dist/plugins/MiniPlugin.js +232 -56
- package/dist/plugins/MiniPlugin.js.map +1 -1
- package/dist/plugins/SubPackageIndiePlugin.js +838 -0
- package/dist/plugins/SubPackageIndiePlugin.js.map +1 -0
- package/dist/plugins/TaroNormalModule.js +16 -0
- package/dist/plugins/TaroNormalModule.js.map +1 -1
- package/dist/plugins/TaroNormalModulesPlugin.js +127 -6
- package/dist/plugins/TaroNormalModulesPlugin.js.map +1 -1
- package/dist/plugins/TaroSingleEntryPlugin.js +1 -1
- package/dist/plugins/TaroSingleEntryPlugin.js.map +1 -1
- package/dist/template/comp.js +2 -1
- package/dist/utils/component.js +2 -1
- package/dist/utils/component.js.map +1 -1
- package/dist/utils/forceCustomWrapper.js +17 -0
- package/dist/utils/forceCustomWrapper.js.map +1 -0
- package/dist/webpack/HarmonyWebpackPlugin.js +3 -1
- package/dist/webpack/HarmonyWebpackPlugin.js.map +1 -1
- package/dist/webpack/MiniBaseConfig.js +2 -0
- package/dist/webpack/MiniBaseConfig.js.map +1 -1
- package/package.json +12 -12
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -12,21 +35,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
36
|
};
|
|
14
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.STYLE_ISOLATION_SHARED = exports.STYLE_ISOLATION_APPLY_SHARED = exports.customWrapperName = exports.baseCompName = void 0;
|
|
15
39
|
const node_path_1 = __importDefault(require("node:path"));
|
|
16
40
|
const helper_1 = require("@tarojs/helper");
|
|
17
41
|
const loader_utils_1 = require("loader-utils");
|
|
42
|
+
const tapable_1 = require("tapable");
|
|
18
43
|
const EntryDependency_1 = __importDefault(require("webpack/lib/dependencies/EntryDependency"));
|
|
19
44
|
const TaroSingleEntryDependency_1 = __importDefault(require("../dependencies/TaroSingleEntryDependency"));
|
|
20
45
|
const prerender_1 = require("../prerender/prerender");
|
|
21
46
|
const component_1 = require("../utils/component");
|
|
47
|
+
const forceCustomWrapper_1 = require("../utils/forceCustomWrapper");
|
|
22
48
|
const webpack_1 = require("../utils/webpack");
|
|
49
|
+
const SubPackageIndiePlugin_1 = __importStar(require("./SubPackageIndiePlugin"));
|
|
23
50
|
const TaroLoadChunksPlugin_1 = __importDefault(require("./TaroLoadChunksPlugin"));
|
|
24
51
|
const TaroNormalModulesPlugin_1 = __importDefault(require("./TaroNormalModulesPlugin"));
|
|
25
52
|
const TaroSingleEntryPlugin_1 = __importDefault(require("./TaroSingleEntryPlugin"));
|
|
26
|
-
|
|
27
|
-
|
|
53
|
+
exports.baseCompName = 'comp';
|
|
54
|
+
exports.customWrapperName = 'custom-wrapper';
|
|
28
55
|
const PLUGIN_NAME = 'TaroMiniPlugin';
|
|
29
56
|
const CHILD_COMPILER_TAG = 'child';
|
|
57
|
+
exports.STYLE_ISOLATION_APPLY_SHARED = 'apply-shared';
|
|
58
|
+
exports.STYLE_ISOLATION_SHARED = 'shared';
|
|
30
59
|
function isLoaderExist(loaders, loaderName) {
|
|
31
60
|
return loaders.some(item => item.loader === loaderName);
|
|
32
61
|
}
|
|
@@ -46,6 +75,7 @@ class TaroMiniPlugin {
|
|
|
46
75
|
this.dependencies = new Map();
|
|
47
76
|
this.pageLoaderName = '@tarojs/taro-loader/lib/page';
|
|
48
77
|
this.independentPackages = new Map();
|
|
78
|
+
this.subPackageIndiePlugin = null;
|
|
49
79
|
const { combination } = options;
|
|
50
80
|
const miniBuildConfig = combination.config;
|
|
51
81
|
const { template, baseLevel = 16, experimental } = miniBuildConfig;
|
|
@@ -69,6 +99,22 @@ class TaroMiniPlugin {
|
|
|
69
99
|
hot: options.hot,
|
|
70
100
|
loaderMeta: options.loaderMeta || {},
|
|
71
101
|
};
|
|
102
|
+
// 初始化扩展钩子
|
|
103
|
+
this.hooks = {
|
|
104
|
+
modifyEntries: new tapable_1.SyncWaterfallHook(['entries']),
|
|
105
|
+
modifyChunkRequire: new tapable_1.SyncWaterfallHook(['result', 'chunkId', 'miniType']),
|
|
106
|
+
afterResolveModule: new tapable_1.SyncHook(['resolveData']),
|
|
107
|
+
compileExtraEntries: new tapable_1.SyncHook(['compiler', 'compilation', 'promises']),
|
|
108
|
+
modifySkipRootTemplates: new tapable_1.SyncWaterfallHook(['skip']),
|
|
109
|
+
generateExtraFiles: new tapable_1.SyncWaterfallHook(['customWrapperRoots', 'compilation', 'compiler']),
|
|
110
|
+
modifyPageConfig: new tapable_1.SyncWaterfallHook(['context', 'page', 'customWrapperRoots']),
|
|
111
|
+
modifyComponentConfig: new tapable_1.SyncHook(['context', 'customWrapperRoots']),
|
|
112
|
+
afterGenerateFiles: new tapable_1.SyncHook(['compilation', 'compiler']),
|
|
113
|
+
optimizeAssets: new tapable_1.SyncHook(['compilation']),
|
|
114
|
+
modifyConfig: new tapable_1.SyncWaterfallHook(['config', 'componentName']),
|
|
115
|
+
modifyStyleImport: new tapable_1.SyncWaterfallHook(['context', 'page']),
|
|
116
|
+
modifyShouldProcessStyles: new tapable_1.SyncWaterfallHook(['shouldProcess']),
|
|
117
|
+
};
|
|
72
118
|
if (template.isSupportRecursive === false && baseLevel > 0) {
|
|
73
119
|
template.baseLevel = baseLevel;
|
|
74
120
|
}
|
|
@@ -99,11 +145,16 @@ class TaroMiniPlugin {
|
|
|
99
145
|
apply(compiler) {
|
|
100
146
|
this.context = compiler.context;
|
|
101
147
|
this.appEntry = this.getAppEntry(compiler);
|
|
148
|
+
if (this.options.newBlended) {
|
|
149
|
+
this.subPackageIndiePlugin = new SubPackageIndiePlugin_1.default(this);
|
|
150
|
+
this.subPackageIndiePlugin.apply();
|
|
151
|
+
}
|
|
102
152
|
const { commonChunks, combination, framework, isBuildPlugin, newBlended, } = this.options;
|
|
103
153
|
const { addChunkPages, onCompilerMake, modifyBuildAssets, onParseCreateElement, } = combination.config;
|
|
104
154
|
/** build mode */
|
|
105
155
|
compiler.hooks.run.tapAsync(PLUGIN_NAME, this.tryAsync((compiler) => __awaiter(this, void 0, void 0, function* () {
|
|
106
156
|
yield this.run(compiler);
|
|
157
|
+
this.applyForceCustomWrapperDefine(compiler);
|
|
107
158
|
new TaroLoadChunksPlugin_1.default({
|
|
108
159
|
commonChunks: commonChunks,
|
|
109
160
|
isBuildPlugin,
|
|
@@ -120,6 +171,7 @@ class TaroMiniPlugin {
|
|
|
120
171
|
this.isWatch = true;
|
|
121
172
|
}
|
|
122
173
|
yield this.run(compiler);
|
|
174
|
+
this.applyForceCustomWrapperDefine(compiler);
|
|
123
175
|
if (!this.loadChunksPlugin) {
|
|
124
176
|
this.loadChunksPlugin = new TaroLoadChunksPlugin_1.default({
|
|
125
177
|
commonChunks: commonChunks,
|
|
@@ -137,6 +189,7 @@ class TaroMiniPlugin {
|
|
|
137
189
|
const dependencies = this.dependencies;
|
|
138
190
|
const promises = [];
|
|
139
191
|
this.compileIndependentPages(compiler, compilation, dependencies, promises);
|
|
192
|
+
this.hooks.compileExtraEntries.call(compiler, compilation, promises);
|
|
140
193
|
dependencies.forEach(dep => {
|
|
141
194
|
promises.push(new Promise((resolve, reject) => {
|
|
142
195
|
compilation.addEntry(this.options.sourceDir, dep, Object.assign({ name: dep.name }, dep.options), err => err ? reject(err) : resolve(null));
|
|
@@ -149,6 +202,11 @@ class TaroMiniPlugin {
|
|
|
149
202
|
/** For Webpack compilation get factory from compilation.dependencyFactories by denpendence's constructor */
|
|
150
203
|
compilation.dependencyFactories.set(EntryDependency_1.default, normalModuleFactory);
|
|
151
204
|
compilation.dependencyFactories.set(TaroSingleEntryDependency_1.default, normalModuleFactory);
|
|
205
|
+
if (this.options.newBlended) {
|
|
206
|
+
normalModuleFactory.hooks.afterResolve.tap(PLUGIN_NAME, (resolveData) => {
|
|
207
|
+
this.hooks.afterResolveModule.call(resolveData);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
152
210
|
/**
|
|
153
211
|
* webpack NormalModule 在 runLoaders 真正解析资源的前一刻,
|
|
154
212
|
* 往 NormalModule.loaders 中插入对应的 Taro Loader
|
|
@@ -292,6 +350,10 @@ class TaroMiniPlugin {
|
|
|
292
350
|
let source;
|
|
293
351
|
const id = (0, webpack_1.getChunkIdOrName)(chunk);
|
|
294
352
|
const { miniType } = entryModule;
|
|
353
|
+
const modifyResult = this.hooks.modifyChunkRequire.call({ source: modules, handled: false }, id, miniType);
|
|
354
|
+
if (modifyResult === null || modifyResult === void 0 ? void 0 : modifyResult.handled) {
|
|
355
|
+
return modifyResult.source;
|
|
356
|
+
}
|
|
295
357
|
const entryChunk = [{ name: 'app' }];
|
|
296
358
|
// 所有模块都依赖app.js,确保@tarojs\plugin-platform-xxx\dist\runtime.js先于@tarojs/runtime执行,避免Taro API未被初始化
|
|
297
359
|
if (this.nativeComponents.has(id) || miniType === helper_1.META_TYPE.STATIC) {
|
|
@@ -300,7 +362,8 @@ class TaroMiniPlugin {
|
|
|
300
362
|
source = (0, webpack_1.addRequireToSource)(id, modules, v);
|
|
301
363
|
}
|
|
302
364
|
});
|
|
303
|
-
|
|
365
|
+
// 如果没有依赖需要注入,返回原始模块
|
|
366
|
+
return source || modules;
|
|
304
367
|
}
|
|
305
368
|
else if (miniType === helper_1.META_TYPE.PAGE) {
|
|
306
369
|
return (0, webpack_1.addRequireToSource)(id, modules, entryChunk);
|
|
@@ -479,12 +542,12 @@ class TaroMiniPlugin {
|
|
|
479
542
|
}
|
|
480
543
|
if (!this.options.template.isSupportRecursive) {
|
|
481
544
|
pluginJSON.publicComponents = Object.assign({}, publicComponents, {
|
|
482
|
-
[baseCompName]: baseCompName
|
|
545
|
+
[exports.baseCompName]: exports.baseCompName
|
|
483
546
|
});
|
|
484
547
|
}
|
|
485
548
|
if (isUsingCustomWrapper) {
|
|
486
549
|
pluginJSON.publicComponents = Object.assign({}, publicComponents, {
|
|
487
|
-
[customWrapperName]: customWrapperName
|
|
550
|
+
[exports.customWrapperName]: exports.customWrapperName
|
|
488
551
|
});
|
|
489
552
|
}
|
|
490
553
|
}
|
|
@@ -613,8 +676,11 @@ class TaroMiniPlugin {
|
|
|
613
676
|
*/
|
|
614
677
|
addEntry(entryPath, entryName, entryType, options = {}) {
|
|
615
678
|
let dep;
|
|
616
|
-
|
|
617
|
-
|
|
679
|
+
// ★ 对于 STATIC 类型(如 comp/custom-wrapper),使用 entryName 作为 key 的一部分
|
|
680
|
+
// 这允许同一个模板文件被多次添加为不同名称的入口
|
|
681
|
+
const depKey = entryType === helper_1.META_TYPE.STATIC ? `${entryPath}#${entryName}` : entryPath;
|
|
682
|
+
if (this.dependencies.has(depKey)) {
|
|
683
|
+
dep = this.dependencies.get(depKey);
|
|
618
684
|
dep.name = entryName;
|
|
619
685
|
dep.loc = { name: entryName };
|
|
620
686
|
dep.request = entryPath;
|
|
@@ -625,7 +691,7 @@ class TaroMiniPlugin {
|
|
|
625
691
|
else {
|
|
626
692
|
dep = new TaroSingleEntryDependency_1.default(entryPath, entryName, { name: entryName }, entryType, options);
|
|
627
693
|
}
|
|
628
|
-
this.dependencies.set(
|
|
694
|
+
this.dependencies.set(depKey, dep);
|
|
629
695
|
}
|
|
630
696
|
/**
|
|
631
697
|
* 在 this.dependencies 中新增或修改 app、模板组件、页面、组件等资源模块
|
|
@@ -633,10 +699,17 @@ class TaroMiniPlugin {
|
|
|
633
699
|
addEntries() {
|
|
634
700
|
const { template } = this.options;
|
|
635
701
|
this.addEntry(this.appEntry, 'app', helper_1.META_TYPE.ENTRY);
|
|
636
|
-
|
|
702
|
+
const entryFlags = this.hooks.modifyEntries.call({
|
|
703
|
+
skipRootComp: false,
|
|
704
|
+
skipRootWrapper: false,
|
|
705
|
+
});
|
|
706
|
+
if (!template.isSupportRecursive && !entryFlags.skipRootComp) {
|
|
637
707
|
this.addEntry(node_path_1.default.resolve(__dirname, '..', 'template/comp'), 'comp', helper_1.META_TYPE.STATIC);
|
|
638
708
|
}
|
|
639
|
-
|
|
709
|
+
if (!entryFlags.skipRootWrapper) {
|
|
710
|
+
this.addEntry(node_path_1.default.resolve(__dirname, '..', 'template/custom-wrapper'), 'custom-wrapper', helper_1.META_TYPE.STATIC);
|
|
711
|
+
}
|
|
712
|
+
// subPackageIndie 下的 comp/custom-wrapper 统一走独立子编译器,避免被主编译的公共 chunk 共享
|
|
640
713
|
this.pages.forEach(item => {
|
|
641
714
|
if (item.isNative) {
|
|
642
715
|
this.addEntry(item.path, item.name, helper_1.META_TYPE.NORMAL, { isNativePage: true });
|
|
@@ -666,6 +739,34 @@ class TaroMiniPlugin {
|
|
|
666
739
|
}
|
|
667
740
|
});
|
|
668
741
|
}
|
|
742
|
+
computeForceCustomWrapperForWebpackMainComp() {
|
|
743
|
+
var _a;
|
|
744
|
+
if (this.options.template.isSupportRecursive)
|
|
745
|
+
return false;
|
|
746
|
+
const independentPaths = new Set();
|
|
747
|
+
this.independentPackages.forEach(({ pages }) => {
|
|
748
|
+
pages.forEach(p => independentPaths.add(p));
|
|
749
|
+
});
|
|
750
|
+
for (const page of this.pages) {
|
|
751
|
+
if (page.isNative || independentPaths.has(page.path))
|
|
752
|
+
continue;
|
|
753
|
+
const content = (_a = this.filesConfig[this.getConfigFilePath(page.name)]) === null || _a === void 0 ? void 0 : _a.content;
|
|
754
|
+
if (content === null || content === void 0 ? void 0 : content.forceCustomWrapper)
|
|
755
|
+
return true;
|
|
756
|
+
}
|
|
757
|
+
return false;
|
|
758
|
+
}
|
|
759
|
+
computeForceCustomWrapperForIndieRoot(pages) {
|
|
760
|
+
return (0, forceCustomWrapper_1.computeForceCustomWrapperForIndependentPackage)(pages, this.pages, this.filesConfig, (p) => this.getConfigFilePath(p));
|
|
761
|
+
}
|
|
762
|
+
applyForceCustomWrapperDefine(compiler) {
|
|
763
|
+
if (this.options.template.isSupportRecursive)
|
|
764
|
+
return;
|
|
765
|
+
const value = this.computeForceCustomWrapperForWebpackMainComp();
|
|
766
|
+
new compiler.webpack.DefinePlugin({
|
|
767
|
+
TARO_FORCE_CUSTOM_WRAPPER: JSON.stringify(value)
|
|
768
|
+
}).apply(compiler);
|
|
769
|
+
}
|
|
669
770
|
replaceExt(file, ext) {
|
|
670
771
|
return node_path_1.default.join(node_path_1.default.dirname(file), node_path_1.default.basename(file, node_path_1.default.extname(file)) + `${ext}`);
|
|
671
772
|
}
|
|
@@ -825,7 +926,7 @@ class TaroMiniPlugin {
|
|
|
825
926
|
filename: `[name]${this.options.fileType.style}`,
|
|
826
927
|
chunkFilename: `[name]${this.options.fileType.style}`
|
|
827
928
|
}).apply(childCompiler);
|
|
828
|
-
new compiler.webpack.DefinePlugin(this.options.constantsReplaceList).apply(childCompiler);
|
|
929
|
+
new compiler.webpack.DefinePlugin(Object.assign(Object.assign({}, this.options.constantsReplaceList), { TARO_FORCE_CUSTOM_WRAPPER: JSON.stringify(this.computeForceCustomWrapperForIndieRoot(pages)) })).apply(childCompiler);
|
|
829
930
|
if (compiler.options.optimization) {
|
|
830
931
|
new SplitChunksPlugin({
|
|
831
932
|
chunks: 'all',
|
|
@@ -965,6 +1066,12 @@ class TaroMiniPlugin {
|
|
|
965
1066
|
usingComponents[key] = match ? `${node_path_1.default.sep}${match[0]}` : compPath;
|
|
966
1067
|
}
|
|
967
1068
|
}
|
|
1069
|
+
cloneThirdPartyComponent(thirdPartyComponents, componentName) {
|
|
1070
|
+
const attrs = component_1.componentConfig.thirdPartyComponents.get(componentName);
|
|
1071
|
+
if (!attrs || thirdPartyComponents.has(componentName))
|
|
1072
|
+
return;
|
|
1073
|
+
thirdPartyComponents.set(componentName, new Set(attrs));
|
|
1074
|
+
}
|
|
968
1075
|
/** 生成小程序独立分包的相关文件 */
|
|
969
1076
|
generateIndependentMiniFiles(compilation, compiler) {
|
|
970
1077
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -981,24 +1088,27 @@ class TaroMiniPlugin {
|
|
|
981
1088
|
this.generateTemplateFile(compilation, compiler, `${name}/${baseTemplateName}`, template.buildTemplate, component_1.componentConfig);
|
|
982
1089
|
if (!template.isSupportRecursive) {
|
|
983
1090
|
// 如微信、QQ 不支持递归模版的小程序,需要使用自定义组件协助递归
|
|
984
|
-
|
|
1091
|
+
const compConfig = {
|
|
985
1092
|
component: true,
|
|
986
|
-
styleIsolation:
|
|
1093
|
+
styleIsolation: exports.STYLE_ISOLATION_APPLY_SHARED,
|
|
987
1094
|
usingComponents: {
|
|
988
|
-
[baseCompName]: `./${baseCompName}
|
|
989
|
-
[customWrapperName]: `./${customWrapperName}`
|
|
1095
|
+
[exports.baseCompName]: `./${exports.baseCompName}`
|
|
990
1096
|
}
|
|
991
|
-
}
|
|
992
|
-
|
|
1097
|
+
};
|
|
1098
|
+
if (isUsingCustomWrapper) {
|
|
1099
|
+
compConfig.usingComponents[exports.customWrapperName] = `./${exports.customWrapperName}`;
|
|
1100
|
+
}
|
|
1101
|
+
this.generateConfigFile(compilation, compiler, `${name}/${exports.baseCompName}`, compConfig);
|
|
1102
|
+
this.generateTemplateFile(compilation, compiler, `${name}/${exports.baseCompName}`, template.buildBaseComponentTemplate, this.options.fileType.templ);
|
|
993
1103
|
}
|
|
994
|
-
this.generateConfigFile(compilation, compiler, `${name}/${customWrapperName}`, {
|
|
1104
|
+
this.generateConfigFile(compilation, compiler, `${name}/${exports.customWrapperName}`, {
|
|
995
1105
|
component: true,
|
|
996
|
-
styleIsolation:
|
|
1106
|
+
styleIsolation: exports.STYLE_ISOLATION_APPLY_SHARED,
|
|
997
1107
|
usingComponents: {
|
|
998
|
-
[customWrapperName]: `./${customWrapperName}`
|
|
1108
|
+
[exports.customWrapperName]: `./${exports.customWrapperName}`
|
|
999
1109
|
}
|
|
1000
1110
|
});
|
|
1001
|
-
this.generateTemplateFile(compilation, compiler, `${name}/${customWrapperName}`, template.buildCustomComponentTemplate, this.options.fileType.templ);
|
|
1111
|
+
this.generateTemplateFile(compilation, compiler, `${name}/${exports.customWrapperName}`, template.buildCustomComponentTemplate, this.options.fileType.templ);
|
|
1002
1112
|
this.generateXSFile(compilation, compiler, `${name}/utils`);
|
|
1003
1113
|
});
|
|
1004
1114
|
this.pages.forEach(page => {
|
|
@@ -1021,14 +1131,14 @@ class TaroMiniPlugin {
|
|
|
1021
1131
|
this.generateTemplateFile(compilation, compiler, page.path, template.buildPageTemplate, importBaseTemplatePath, config);
|
|
1022
1132
|
}
|
|
1023
1133
|
if (config) {
|
|
1024
|
-
const importBaseCompPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, independentName, this.getTargetFilePath(baseCompName, ''))));
|
|
1025
|
-
const importCustomWrapperPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, independentName, this.getTargetFilePath(customWrapperName, ''))));
|
|
1134
|
+
const importBaseCompPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, independentName, this.getTargetFilePath(exports.baseCompName, ''))));
|
|
1135
|
+
const importCustomWrapperPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, independentName, this.getTargetFilePath(exports.customWrapperName, ''))));
|
|
1026
1136
|
config.content.usingComponents = Object.assign({}, config.content.usingComponents);
|
|
1027
1137
|
if (isUsingCustomWrapper) {
|
|
1028
|
-
config.content.usingComponents[customWrapperName] = importCustomWrapperPath;
|
|
1138
|
+
config.content.usingComponents[exports.customWrapperName] = importCustomWrapperPath;
|
|
1029
1139
|
}
|
|
1030
1140
|
if (!template.isSupportRecursive && !page.isNative) {
|
|
1031
|
-
config.content.usingComponents[baseCompName] = importBaseCompPath;
|
|
1141
|
+
config.content.usingComponents[exports.baseCompName] = importBaseCompPath;
|
|
1032
1142
|
}
|
|
1033
1143
|
this.generateConfigFile(compilation, compiler, page.path, config.content);
|
|
1034
1144
|
}
|
|
@@ -1043,6 +1153,8 @@ class TaroMiniPlugin {
|
|
|
1043
1153
|
const { modifyMiniConfigs } = combination.config;
|
|
1044
1154
|
const baseTemplateName = 'base';
|
|
1045
1155
|
const isUsingCustomWrapper = component_1.componentConfig.thirdPartyComponents.has('custom-wrapper');
|
|
1156
|
+
let subPackageIndieCustomWrapperRoots = new Set();
|
|
1157
|
+
compilation[SubPackageIndiePlugin_1.subPackageIndieCustomWrapperRootsKey] = subPackageIndieCustomWrapperRoots;
|
|
1046
1158
|
/**
|
|
1047
1159
|
* 与原生小程序混写时解析模板与样式
|
|
1048
1160
|
*/
|
|
@@ -1062,47 +1174,55 @@ class TaroMiniPlugin {
|
|
|
1062
1174
|
const appConfigName = node_path_1.default.basename(appConfigPath).replace(node_path_1.default.extname(appConfigPath), '');
|
|
1063
1175
|
this.generateConfigFile(compilation, compiler, this.appEntry, this.filesConfig[appConfigName].content);
|
|
1064
1176
|
}
|
|
1065
|
-
|
|
1177
|
+
let skipRootTemplates = false;
|
|
1178
|
+
skipRootTemplates = this.hooks.modifySkipRootTemplates.call(skipRootTemplates);
|
|
1179
|
+
if (!template.isSupportRecursive && !skipRootTemplates) {
|
|
1066
1180
|
// 如微信、QQ 不支持递归模版的小程序,需要使用自定义组件协助递归
|
|
1067
|
-
this.generateTemplateFile(compilation, compiler, baseCompName, template.buildBaseComponentTemplate, this.options.fileType.templ);
|
|
1181
|
+
this.generateTemplateFile(compilation, compiler, exports.baseCompName, template.buildBaseComponentTemplate, this.options.fileType.templ);
|
|
1068
1182
|
const baseCompConfig = {
|
|
1069
1183
|
component: true,
|
|
1070
|
-
styleIsolation:
|
|
1184
|
+
styleIsolation: exports.STYLE_ISOLATION_APPLY_SHARED,
|
|
1071
1185
|
usingComponents: {
|
|
1072
|
-
[baseCompName]: `./${baseCompName}`
|
|
1186
|
+
[exports.baseCompName]: `./${exports.baseCompName}`
|
|
1073
1187
|
}
|
|
1074
1188
|
};
|
|
1075
1189
|
if (isUsingCustomWrapper) {
|
|
1076
|
-
baseCompConfig.usingComponents[customWrapperName] = `./${customWrapperName}`;
|
|
1077
|
-
this.generateConfigFile(compilation, compiler, customWrapperName, {
|
|
1190
|
+
baseCompConfig.usingComponents[exports.customWrapperName] = `./${exports.customWrapperName}`;
|
|
1191
|
+
this.generateConfigFile(compilation, compiler, exports.customWrapperName, {
|
|
1078
1192
|
component: true,
|
|
1079
|
-
styleIsolation:
|
|
1193
|
+
styleIsolation: exports.STYLE_ISOLATION_APPLY_SHARED,
|
|
1080
1194
|
usingComponents: {
|
|
1081
|
-
[baseCompName]: `./${baseCompName}`,
|
|
1082
|
-
[customWrapperName]: `./${customWrapperName}`
|
|
1195
|
+
[exports.baseCompName]: `./${exports.baseCompName}`,
|
|
1196
|
+
[exports.customWrapperName]: `./${exports.customWrapperName}`
|
|
1083
1197
|
}
|
|
1084
1198
|
});
|
|
1085
1199
|
}
|
|
1086
|
-
this.generateConfigFile(compilation, compiler, baseCompName, baseCompConfig);
|
|
1200
|
+
this.generateConfigFile(compilation, compiler, exports.baseCompName, baseCompConfig);
|
|
1087
1201
|
}
|
|
1088
|
-
else {
|
|
1202
|
+
else if (!skipRootTemplates) {
|
|
1089
1203
|
if (isUsingCustomWrapper) {
|
|
1090
|
-
this.generateConfigFile(compilation, compiler, customWrapperName, {
|
|
1204
|
+
this.generateConfigFile(compilation, compiler, exports.customWrapperName, {
|
|
1091
1205
|
component: true,
|
|
1092
|
-
styleIsolation:
|
|
1206
|
+
styleIsolation: exports.STYLE_ISOLATION_APPLY_SHARED,
|
|
1093
1207
|
usingComponents: {
|
|
1094
|
-
[customWrapperName]: `./${customWrapperName}`
|
|
1208
|
+
[exports.customWrapperName]: `./${exports.customWrapperName}`
|
|
1095
1209
|
}
|
|
1096
1210
|
});
|
|
1097
1211
|
}
|
|
1098
1212
|
}
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1213
|
+
// ★ 当配置了 mainPackageRoot 时,跳过根目录 base.wxml 和 utils.wxs 的生成
|
|
1214
|
+
if (!skipRootTemplates) {
|
|
1215
|
+
this.generateTemplateFile(compilation, compiler, baseTemplateName, template.buildTemplate, component_1.componentConfig);
|
|
1216
|
+
isUsingCustomWrapper && this.generateTemplateFile(compilation, compiler, exports.customWrapperName, template.buildCustomComponentTemplate, this.options.fileType.templ);
|
|
1217
|
+
this.generateXSFile(compilation, compiler, 'utils');
|
|
1218
|
+
}
|
|
1219
|
+
subPackageIndieCustomWrapperRoots = this.hooks.generateExtraFiles.call(subPackageIndieCustomWrapperRoots, compilation, compiler);
|
|
1220
|
+
compilation[SubPackageIndiePlugin_1.subPackageIndieCustomWrapperRootsKey] = subPackageIndieCustomWrapperRoots;
|
|
1102
1221
|
this.components.forEach(component => {
|
|
1103
1222
|
const importBaseTemplatePath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(component.path, node_path_1.default.join(sourceDir, isBuildPlugin ? 'plugin' : '', this.getTemplatePath(baseTemplateName))));
|
|
1104
1223
|
const config = this.filesConfig[this.getConfigFilePath(component.name)];
|
|
1105
1224
|
if (config) {
|
|
1225
|
+
this.hooks.modifyComponentConfig.call({ config, component }, subPackageIndieCustomWrapperRoots);
|
|
1106
1226
|
this.generateConfigFile(compilation, compiler, component.path, config.content);
|
|
1107
1227
|
}
|
|
1108
1228
|
if (!component.isNative) {
|
|
@@ -1110,31 +1230,46 @@ class TaroMiniPlugin {
|
|
|
1110
1230
|
}
|
|
1111
1231
|
});
|
|
1112
1232
|
this.pages.forEach(page => {
|
|
1113
|
-
|
|
1233
|
+
let importBaseTemplatePath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, isBuildPlugin ? 'plugin' : '', this.getTemplatePath(baseTemplateName))));
|
|
1114
1234
|
const config = this.filesConfig[this.getConfigFilePath(page.name)];
|
|
1115
1235
|
// pages 里面会混合独立分包的,在这里需要过滤一下,避免重复生成 assets
|
|
1116
1236
|
const isIndependent = !!this.getIndependentPackage(page.path);
|
|
1117
1237
|
if (isIndependent)
|
|
1118
1238
|
return;
|
|
1119
1239
|
// 生成页面模板需要在生成页面配置之前,因为会依赖到页面配置的部分内容
|
|
1240
|
+
let importBaseCompPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, isBuildPlugin ? 'plugin' : '', this.getTargetFilePath(exports.baseCompName, ''))));
|
|
1241
|
+
let importCustomWrapperPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, isBuildPlugin ? 'plugin' : '', this.getTargetFilePath(exports.customWrapperName, ''))));
|
|
1242
|
+
let isPageRecursiveDisabled = false;
|
|
1243
|
+
let shouldUseCustomWrapper = isUsingCustomWrapper;
|
|
1244
|
+
const pageConfigContext = this.hooks.modifyPageConfig.call({
|
|
1245
|
+
importBaseTemplatePath,
|
|
1246
|
+
importBaseCompPath,
|
|
1247
|
+
importCustomWrapperPath,
|
|
1248
|
+
shouldUseCustomWrapper,
|
|
1249
|
+
isPageRecursiveDisabled,
|
|
1250
|
+
}, page, subPackageIndieCustomWrapperRoots);
|
|
1251
|
+
importBaseTemplatePath = pageConfigContext.importBaseTemplatePath;
|
|
1252
|
+
importBaseCompPath = pageConfigContext.importBaseCompPath;
|
|
1253
|
+
importCustomWrapperPath = pageConfigContext.importCustomWrapperPath;
|
|
1254
|
+
shouldUseCustomWrapper = pageConfigContext.shouldUseCustomWrapper;
|
|
1255
|
+
isPageRecursiveDisabled = pageConfigContext.isPageRecursiveDisabled;
|
|
1120
1256
|
if (!page.isNative) {
|
|
1121
1257
|
this.generateTemplateFile(compilation, compiler, page.path, template.buildPageTemplate, importBaseTemplatePath, config);
|
|
1122
1258
|
}
|
|
1123
1259
|
if (config) {
|
|
1124
|
-
const importBaseCompPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, isBuildPlugin ? 'plugin' : '', this.getTargetFilePath(baseCompName, ''))));
|
|
1125
|
-
const importCustomWrapperPath = (0, helper_1.promoteRelativePath)(node_path_1.default.relative(page.path, node_path_1.default.join(sourceDir, isBuildPlugin ? 'plugin' : '', this.getTargetFilePath(customWrapperName, ''))));
|
|
1126
1260
|
config.content.usingComponents = Object.assign({}, config.content.usingComponents);
|
|
1127
|
-
if (
|
|
1128
|
-
config.content.usingComponents[customWrapperName] = importCustomWrapperPath;
|
|
1261
|
+
if (shouldUseCustomWrapper) {
|
|
1262
|
+
config.content.usingComponents[exports.customWrapperName] = importCustomWrapperPath;
|
|
1129
1263
|
}
|
|
1130
|
-
if (!template.isSupportRecursive && !page.isNative) {
|
|
1131
|
-
config.content.usingComponents[baseCompName] = importBaseCompPath;
|
|
1264
|
+
if (!template.isSupportRecursive && !page.isNative && !isPageRecursiveDisabled) {
|
|
1265
|
+
config.content.usingComponents[exports.baseCompName] = importBaseCompPath;
|
|
1132
1266
|
}
|
|
1133
1267
|
this.generateConfigFile(compilation, compiler, page.path, config.content);
|
|
1134
1268
|
}
|
|
1135
1269
|
});
|
|
1136
1270
|
this.generateTabBarFiles(compilation, compiler);
|
|
1137
1271
|
this.injectCommonStyles(compilation, compiler);
|
|
1272
|
+
this.hooks.afterGenerateFiles.call(compilation, compiler);
|
|
1138
1273
|
if (this.themeLocation) {
|
|
1139
1274
|
this.generateDarkModeFile(compilation, compiler);
|
|
1140
1275
|
}
|
|
@@ -1167,12 +1302,15 @@ class TaroMiniPlugin {
|
|
|
1167
1302
|
delete compilation.assets[assetPath];
|
|
1168
1303
|
}
|
|
1169
1304
|
});
|
|
1305
|
+
this.hooks.optimizeAssets.call(compilation);
|
|
1170
1306
|
});
|
|
1171
1307
|
}
|
|
1172
1308
|
generateConfigFile(compilation, compiler, filePath, config) {
|
|
1173
1309
|
const { RawSource } = compiler.webpack.sources;
|
|
1174
1310
|
const fileConfigName = this.getConfigPath(this.getComponentName(filePath));
|
|
1175
|
-
const
|
|
1311
|
+
const componentName = this.getComponentName(filePath);
|
|
1312
|
+
config = this.hooks.modifyConfig.call(config, componentName);
|
|
1313
|
+
const unofficialConfigs = ['enableShareAppMessage', 'enableShareTimeline', 'enablePageMeta', 'components', 'forceCustomWrapper'];
|
|
1176
1314
|
unofficialConfigs.forEach(item => {
|
|
1177
1315
|
delete config[item];
|
|
1178
1316
|
});
|
|
@@ -1318,12 +1456,21 @@ class TaroMiniPlugin {
|
|
|
1318
1456
|
});
|
|
1319
1457
|
});
|
|
1320
1458
|
}
|
|
1321
|
-
|
|
1459
|
+
// 判断是否需要处理样式:有 common chunks 或者有 app.wxss(可被扩展插件修改)
|
|
1460
|
+
const hasAppStyle = !!assets[appStyle];
|
|
1461
|
+
let shouldProcessStyles = commons.size() > 0;
|
|
1462
|
+
if (!hasAppStyle) {
|
|
1463
|
+
shouldProcessStyles = false;
|
|
1464
|
+
}
|
|
1465
|
+
shouldProcessStyles = this.hooks.modifyShouldProcessStyles.call(shouldProcessStyles);
|
|
1466
|
+
if (shouldProcessStyles) {
|
|
1322
1467
|
const APP_STYLE_NAME = 'app-origin' + styleExt;
|
|
1323
1468
|
assets[APP_STYLE_NAME] = new ConcatSource(originSource);
|
|
1324
1469
|
const source = new ConcatSource('');
|
|
1325
1470
|
source.add(`@import ${JSON.stringify((0, loader_utils_1.urlToRequest)(APP_STYLE_NAME))};`);
|
|
1326
|
-
|
|
1471
|
+
if (commons.size() > 0) {
|
|
1472
|
+
source.add(commons);
|
|
1473
|
+
}
|
|
1327
1474
|
source.add('\n');
|
|
1328
1475
|
assets[appStyle] = source;
|
|
1329
1476
|
if (newBlended) {
|
|
@@ -1339,14 +1486,43 @@ class TaroMiniPlugin {
|
|
|
1339
1486
|
}
|
|
1340
1487
|
const source = new ConcatSource('');
|
|
1341
1488
|
const originSource = assets[pageStyle];
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1489
|
+
const styleImportContext = this.hooks.modifyStyleImport.call({
|
|
1490
|
+
importStatement: '',
|
|
1491
|
+
shouldSkip: false,
|
|
1492
|
+
isMainPackageRoot: false,
|
|
1493
|
+
}, page);
|
|
1494
|
+
if (styleImportContext.shouldSkip) {
|
|
1495
|
+
// no-op
|
|
1496
|
+
}
|
|
1497
|
+
else if (styleImportContext.importStatement) {
|
|
1498
|
+
source.add(styleImportContext.importStatement);
|
|
1499
|
+
}
|
|
1500
|
+
else {
|
|
1501
|
+
componentCommons.forEach(item => {
|
|
1502
|
+
source.add(`@import ${JSON.stringify((0, loader_utils_1.urlToRequest)(node_path_1.default.posix.relative(node_path_1.default.dirname(pageStyle), item)))};\n`);
|
|
1503
|
+
});
|
|
1504
|
+
}
|
|
1345
1505
|
source.add(originSource);
|
|
1346
1506
|
assets[pageStyle] = source;
|
|
1347
1507
|
}
|
|
1348
1508
|
else {
|
|
1349
|
-
|
|
1509
|
+
// 普通页面(非本地化组件)
|
|
1510
|
+
const styleImportContext = this.hooks.modifyStyleImport.call({
|
|
1511
|
+
importStatement: '',
|
|
1512
|
+
shouldSkip: false,
|
|
1513
|
+
isMainPackageRoot: false,
|
|
1514
|
+
}, page);
|
|
1515
|
+
if (styleImportContext.importStatement) {
|
|
1516
|
+
const source = new ConcatSource('');
|
|
1517
|
+
if (pageStyle in assets) {
|
|
1518
|
+
source.add(assets[pageStyle]);
|
|
1519
|
+
}
|
|
1520
|
+
const importSource = new ConcatSource('');
|
|
1521
|
+
importSource.add(styleImportContext.importStatement);
|
|
1522
|
+
importSource.add(source);
|
|
1523
|
+
assets[pageStyle] = importSource;
|
|
1524
|
+
}
|
|
1525
|
+
else if (pageStyle in assets) {
|
|
1350
1526
|
const source = new ConcatSource('');
|
|
1351
1527
|
const originSource = assets[pageStyle];
|
|
1352
1528
|
source.add(`@import ${JSON.stringify((0, loader_utils_1.urlToRequest)(node_path_1.default.posix.relative(node_path_1.default.dirname(pageStyle), 'app' + styleExt)))};\n`);
|