@tarojs/webpack5-runner 3.5.0-alpha.0

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.
Files changed (94) hide show
  1. package/README.md +3 -0
  2. package/dist/dependencies/TaroSingleEntryDependency.js +18 -0
  3. package/dist/dependencies/TaroSingleEntryDependency.js.map +1 -0
  4. package/dist/index.h5.js +224 -0
  5. package/dist/index.h5.js.map +1 -0
  6. package/dist/index.mini.js +69 -0
  7. package/dist/index.mini.js.map +1 -0
  8. package/dist/loaders/miniTemplateLoader.js +63 -0
  9. package/dist/loaders/miniTemplateLoader.js.map +1 -0
  10. package/dist/plugins/BuildNativePlugin.js +124 -0
  11. package/dist/plugins/BuildNativePlugin.js.map +1 -0
  12. package/dist/plugins/H5Plugin.js +91 -0
  13. package/dist/plugins/H5Plugin.js.map +1 -0
  14. package/dist/plugins/MiniPlugin.js +1027 -0
  15. package/dist/plugins/MiniPlugin.js.map +1 -0
  16. package/dist/plugins/MiniSplitChunksPlugin.js +678 -0
  17. package/dist/plugins/MiniSplitChunksPlugin.js.map +1 -0
  18. package/dist/plugins/TaroLoadChunksPlugin.js +176 -0
  19. package/dist/plugins/TaroLoadChunksPlugin.js.map +1 -0
  20. package/dist/plugins/TaroNormalModule.js +51 -0
  21. package/dist/plugins/TaroNormalModule.js.map +1 -0
  22. package/dist/plugins/TaroNormalModulesPlugin.js +63 -0
  23. package/dist/plugins/TaroNormalModulesPlugin.js.map +1 -0
  24. package/dist/plugins/TaroSingleEntryPlugin.js +26 -0
  25. package/dist/plugins/TaroSingleEntryPlugin.js.map +1 -0
  26. package/dist/plugins/WebpackBarPlugin.js +26 -0
  27. package/dist/plugins/WebpackBarPlugin.js.map +1 -0
  28. package/dist/postcss/postcss.h5.js +70 -0
  29. package/dist/postcss/postcss.h5.js.map +1 -0
  30. package/dist/postcss/postcss.mini.js +75 -0
  31. package/dist/postcss/postcss.mini.js.map +1 -0
  32. package/dist/prebundle/bundle.js +167 -0
  33. package/dist/prebundle/bundle.js.map +1 -0
  34. package/dist/prebundle/constant.js +60 -0
  35. package/dist/prebundle/constant.js.map +1 -0
  36. package/dist/prebundle/index.js +234 -0
  37. package/dist/prebundle/index.js.map +1 -0
  38. package/dist/prebundle/scanImports.js +193 -0
  39. package/dist/prebundle/scanImports.js.map +1 -0
  40. package/dist/prebundle/utils.js +170 -0
  41. package/dist/prebundle/utils.js.map +1 -0
  42. package/dist/prebundle/webpack/TaroContainerEntryModule.js +76 -0
  43. package/dist/prebundle/webpack/TaroContainerEntryModule.js.map +1 -0
  44. package/dist/prebundle/webpack/TaroContainerPlugin.js +75 -0
  45. package/dist/prebundle/webpack/TaroContainerPlugin.js.map +1 -0
  46. package/dist/prebundle/webpack/TaroContainerReferencePlugin.js +124 -0
  47. package/dist/prebundle/webpack/TaroContainerReferencePlugin.js.map +1 -0
  48. package/dist/prebundle/webpack/index.js +1 -0
  49. package/dist/prebundle/webpack/index.js.map +1 -0
  50. package/dist/prerender/prerender.js +228 -0
  51. package/dist/prerender/prerender.js.map +1 -0
  52. package/dist/template/comp.js +4 -0
  53. package/dist/template/component.js +10 -0
  54. package/dist/template/component.js.map +1 -0
  55. package/dist/template/custom-wrapper.js +7 -0
  56. package/dist/template/custom-wrapper.js.map +1 -0
  57. package/dist/utils/H5AppInstance.js +110 -0
  58. package/dist/utils/H5AppInstance.js.map +1 -0
  59. package/dist/utils/index.js +53 -0
  60. package/dist/utils/index.js.map +1 -0
  61. package/dist/utils/logHelper.js +153 -0
  62. package/dist/utils/logHelper.js.map +1 -0
  63. package/dist/utils/types.js +3 -0
  64. package/dist/utils/types.js.map +1 -0
  65. package/dist/utils/webpack.js +12 -0
  66. package/dist/utils/webpack.js.map +1 -0
  67. package/dist/webpack/BaseConfig.js +155 -0
  68. package/dist/webpack/BaseConfig.js.map +1 -0
  69. package/dist/webpack/BuildNativePlugin.js +57 -0
  70. package/dist/webpack/BuildNativePlugin.js.map +1 -0
  71. package/dist/webpack/Combination.js +69 -0
  72. package/dist/webpack/Combination.js.map +1 -0
  73. package/dist/webpack/H5BaseConfig.js +30 -0
  74. package/dist/webpack/H5BaseConfig.js.map +1 -0
  75. package/dist/webpack/H5Combination.js +106 -0
  76. package/dist/webpack/H5Combination.js.map +1 -0
  77. package/dist/webpack/H5WebpackModule.js +261 -0
  78. package/dist/webpack/H5WebpackModule.js.map +1 -0
  79. package/dist/webpack/H5WebpackPlugin.js +85 -0
  80. package/dist/webpack/H5WebpackPlugin.js.map +1 -0
  81. package/dist/webpack/MiniBaseConfig.js +73 -0
  82. package/dist/webpack/MiniBaseConfig.js.map +1 -0
  83. package/dist/webpack/MiniCombination.js +115 -0
  84. package/dist/webpack/MiniCombination.js.map +1 -0
  85. package/dist/webpack/MiniWebpackModule.js +204 -0
  86. package/dist/webpack/MiniWebpackModule.js.map +1 -0
  87. package/dist/webpack/MiniWebpackPlugin.js +154 -0
  88. package/dist/webpack/MiniWebpackPlugin.js.map +1 -0
  89. package/dist/webpack/WebpackModule.js +174 -0
  90. package/dist/webpack/WebpackModule.js.map +1 -0
  91. package/dist/webpack/WebpackPlugin.js +84 -0
  92. package/dist/webpack/WebpackPlugin.js.map +1 -0
  93. package/index.js +7 -0
  94. package/package.json +103 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # `@tarojs/webpack5-runner`
2
+
3
+ 暴露给 `@tarojs/cli` 的小程序/H5 Webpack 启动器。
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const webpack_1 = require("webpack");
4
+ class TaroSingleEntryDependency extends webpack_1.dependencies.ModuleDependency {
5
+ constructor(request, name, loc, miniType, options = {}) {
6
+ super(request);
7
+ this.name = name;
8
+ this.loc = loc;
9
+ this.miniType = miniType;
10
+ this.options = options;
11
+ }
12
+ // @ts-ignore
13
+ get type() {
14
+ return 'single entry';
15
+ }
16
+ }
17
+ exports.default = TaroSingleEntryDependency;
18
+ //# sourceMappingURL=TaroSingleEntryDependency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaroSingleEntryDependency.js","sourceRoot":"","sources":["../../src/dependencies/TaroSingleEntryDependency.ts"],"names":[],"mappings":";;AAAA,qCAAsC;AAGtC,MAAqB,yBAA0B,SAAQ,sBAAY,CAAC,gBAAgB;IAMlF,YAAa,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE;QACrD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,aAAa;IACb,IAAI,IAAI;QACN,OAAO,cAAc,CAAA;IACvB,CAAC;CACF;AAlBD,4CAkBC"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const detectPort = require("detect-port");
13
+ const path = require("path");
14
+ const url_1 = require("url");
15
+ const webpack = require("webpack");
16
+ const WebpackDevServer = require("webpack-dev-server");
17
+ const shared_1 = require("@tarojs/shared");
18
+ const helper_1 = require("@tarojs/helper");
19
+ const H5Combination_1 = require("./webpack/H5Combination");
20
+ const utils_1 = require("./utils");
21
+ const H5AppInstance_1 = require("./utils/H5AppInstance");
22
+ let isFirstBuild = true;
23
+ function build(appPath, rawConfig) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const combination = new H5Combination_1.H5Combination(appPath, rawConfig);
26
+ const webpackConfig = yield combination.getWebpackConfig();
27
+ const config = combination.config;
28
+ const { isWatch } = config;
29
+ try {
30
+ if (isWatch) {
31
+ yield buildDev(webpackConfig, config, appPath);
32
+ }
33
+ else {
34
+ yield buildProd(webpackConfig, config);
35
+ }
36
+ }
37
+ catch (err) {
38
+ console.error(err);
39
+ !isWatch && process.exit(1);
40
+ }
41
+ });
42
+ }
43
+ exports.default = build;
44
+ function buildProd(webpackConfig, config) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const compiler = webpack(webpackConfig);
47
+ const onBuildFinish = config.onBuildFinish;
48
+ compiler.hooks.emit.tapAsync('taroBuildDone', (compilation, callback) => __awaiter(this, void 0, void 0, function* () {
49
+ if (shared_1.isFunction(config.modifyBuildAssets)) {
50
+ yield config.modifyBuildAssets(compilation.assets);
51
+ }
52
+ callback();
53
+ }));
54
+ return new Promise((resolve, reject) => {
55
+ compiler.run((error, stats) => {
56
+ compiler.close(error2 => {
57
+ const err = error || error2;
58
+ if (shared_1.isFunction(onBuildFinish)) {
59
+ onBuildFinish({
60
+ error: err,
61
+ stats: err ? null : stats,
62
+ isWatch: false
63
+ });
64
+ }
65
+ err ? reject(err) : resolve();
66
+ });
67
+ });
68
+ });
69
+ });
70
+ }
71
+ function buildDev(webpackConfig, config, appPath) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ const routerConfig = config.router || {};
74
+ const routerMode = routerConfig.mode || 'hash';
75
+ const routerBasename = routerConfig.basename || '/';
76
+ const onBuildFinish = config.onBuildFinish;
77
+ const devServerOptions = yield getDevServerOptions(appPath, config);
78
+ const compiler = webpack(webpackConfig);
79
+ const server = new WebpackDevServer(devServerOptions, compiler);
80
+ const pathname = routerMode === 'browser' ? routerBasename : '/';
81
+ const devUrl = url_1.format({
82
+ protocol: devServerOptions.https ? 'https' : 'http',
83
+ hostname: !devServerOptions.host || devServerOptions.host.startsWith('local-ip') ? 'localhost' : devServerOptions.host,
84
+ port: devServerOptions.port,
85
+ pathname
86
+ });
87
+ compiler.hooks.done.tap('taroDone', () => {
88
+ if (isFirstBuild) {
89
+ isFirstBuild = false;
90
+ if (devUrl) {
91
+ console.log(helper_1.chalk.cyan(`ℹ Listening at ${devUrl}\n`));
92
+ }
93
+ }
94
+ });
95
+ compiler.hooks.emit.tapAsync('taroBuildDone', (compilation, callback) => __awaiter(this, void 0, void 0, function* () {
96
+ if (shared_1.isFunction(config.modifyBuildAssets)) {
97
+ yield config.modifyBuildAssets(compilation.assets);
98
+ }
99
+ callback();
100
+ }));
101
+ compiler.hooks.done.tap('taroBuildDone', stats => {
102
+ if (shared_1.isFunction(onBuildFinish)) {
103
+ onBuildFinish({
104
+ error: null,
105
+ stats,
106
+ isWatch: true
107
+ });
108
+ }
109
+ });
110
+ compiler.hooks.failed.tap('taroBuildDone', error => {
111
+ if (shared_1.isFunction(onBuildFinish)) {
112
+ onBuildFinish({
113
+ error,
114
+ stats: null,
115
+ isWatch: true
116
+ });
117
+ }
118
+ });
119
+ return new Promise((resolve, reject) => {
120
+ server.startCallback(err => {
121
+ if (err) {
122
+ reject(err);
123
+ return console.log(err);
124
+ }
125
+ resolve();
126
+ });
127
+ });
128
+ });
129
+ }
130
+ function getDevServerOptions(appPath, config) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ const publicPath = config.publicPath ? utils_1.addLeadingSlash(utils_1.addTrailingSlash(config.publicPath)) : '/';
133
+ const outputPath = path.join(appPath, config.outputRoot || 'dist');
134
+ const customDevServerOption = config.devServer || {};
135
+ const routerConfig = config.router || {};
136
+ const routerMode = routerConfig.mode || 'hash';
137
+ const isMultiRouterMode = routerMode === 'multi';
138
+ const proxy = {};
139
+ if (isMultiRouterMode) {
140
+ const app = new H5AppInstance_1.default(config.entry, {
141
+ sourceDir: path.join(appPath, config.sourceRoot || helper_1.SOURCE_DIR),
142
+ framework: config.framework,
143
+ entryFileName: config.entryFileName
144
+ });
145
+ const appConfig = app.appConfig;
146
+ const customRoutes = (routerConfig === null || routerConfig === void 0 ? void 0 : routerConfig.customRoutes) || {};
147
+ const routerBasename = routerConfig.basename || '/';
148
+ const getEntriesRoutes = (customRoutes = {}) => {
149
+ const conf = [];
150
+ for (let key in customRoutes) {
151
+ const path = customRoutes[key];
152
+ key = utils_1.addLeadingSlash(key);
153
+ if (typeof path === 'string') {
154
+ conf.push([key, utils_1.addLeadingSlash(path)]);
155
+ }
156
+ else if ((path === null || path === void 0 ? void 0 : path.length) > 0) {
157
+ conf.push(...path.map(p => [key, utils_1.addLeadingSlash(p)]));
158
+ }
159
+ }
160
+ return conf;
161
+ };
162
+ const bypass = req => {
163
+ var _a, _b, _c, _d;
164
+ if (((_a = req.headers.accept) === null || _a === void 0 ? void 0 : _a.indexOf('html')) !== -1) {
165
+ const pagePath = utils_1.stripTrailingSlash(utils_1.stripBasename(req.path, routerBasename));
166
+ // console.log('bypass:' + req.path, pagePath)
167
+ if (pagePath === '') {
168
+ return utils_1.addHtmlSuffix(appConfig.entryPagePath || ((_b = appConfig.pages) === null || _b === void 0 ? void 0 : _b[0]));
169
+ }
170
+ const pageIdx = ((_c = appConfig.pages) !== null && _c !== void 0 ? _c : []).findIndex(e => utils_1.addLeadingSlash(e) === pagePath);
171
+ if (pageIdx > -1) {
172
+ return utils_1.addHtmlSuffix((_d = appConfig.pages) === null || _d === void 0 ? void 0 : _d[pageIdx]);
173
+ }
174
+ const customRoutesConf = getEntriesRoutes(customRoutes);
175
+ const idx = getEntriesRoutes(customRoutes).findIndex(list => list[1] === pagePath);
176
+ if (idx > -1) {
177
+ // NOTE: 自定义路由
178
+ return utils_1.addHtmlSuffix(customRoutesConf[idx][0]);
179
+ }
180
+ }
181
+ };
182
+ proxy[routerBasename] = { bypass };
183
+ }
184
+ const devServerOptions = helper_1.recursiveMerge({
185
+ devMiddleware: {
186
+ publicPath,
187
+ writeToDisk: false
188
+ },
189
+ static: {
190
+ directory: outputPath,
191
+ watch: true // webpack4: devServerOptions.watchContentBase
192
+ },
193
+ compress: true,
194
+ // disableHostCheck: true, // the disableHostCheck and allowedHosts options were removed in favor of the firewall option
195
+ host: '0.0.0.0',
196
+ // useLocalIp: true, @breaking: move in favor { host: 'local-ip' } (https://github.com/webpack/webpack-dev-server/releases?page=2)
197
+ hot: true,
198
+ https: false,
199
+ // inline: true, // the inline option (iframe live mode) was removed
200
+ open: true,
201
+ client: {
202
+ overlay: true
203
+ },
204
+ port: 10086,
205
+ // quiet: true, // the log, logLevel, logTime, noInfo, quiet, reporter and warn options were removed in favor of built-in webpack logger, please read this to enable and setup logging output
206
+ historyApiFallback: {
207
+ disableDotRule: true,
208
+ rewrites: [{
209
+ from: /./,
210
+ to: publicPath
211
+ }]
212
+ },
213
+ proxy
214
+ }, customDevServerOption);
215
+ const originalPort = devServerOptions.port;
216
+ const availablePort = yield detectPort(Number(originalPort));
217
+ if (availablePort !== originalPort) {
218
+ console.log(`ℹ 预览端口 ${originalPort} 被占用, 自动切换到空闲端口 ${availablePort}`);
219
+ devServerOptions.port = availablePort;
220
+ }
221
+ return devServerOptions;
222
+ });
223
+ }
224
+ //# sourceMappingURL=index.h5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.h5.js","sourceRoot":"","sources":["../src/index.h5.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const webpack = require("webpack");
13
+ const lodash_1 = require("lodash");
14
+ const MiniCombination_1 = require("./webpack/MiniCombination");
15
+ const prerender_1 = require("./prerender/prerender");
16
+ const prebundle_1 = require("./prebundle");
17
+ function build(appPath, rawConfig) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const combination = new MiniCombination_1.MiniCombination(appPath, rawConfig);
20
+ yield combination.make();
21
+ yield prebundle_1.preBundle(combination);
22
+ const webpackConfig = combination.chain.toConfig();
23
+ const config = combination.config;
24
+ return new Promise((resolve, reject) => {
25
+ const compiler = webpack(webpackConfig);
26
+ const onBuildFinish = config.onBuildFinish;
27
+ let prerender;
28
+ const onFinish = function (error, stats) {
29
+ if (typeof onBuildFinish !== 'function')
30
+ return;
31
+ onBuildFinish({
32
+ error,
33
+ stats,
34
+ isWatch: config.isWatch
35
+ });
36
+ };
37
+ const callback = (err, stats) => __awaiter(this, void 0, void 0, function* () {
38
+ if (err || stats.hasErrors()) {
39
+ const error = err !== null && err !== void 0 ? err : stats.toJson().errors;
40
+ onFinish(error, null);
41
+ return reject(error);
42
+ }
43
+ if (!lodash_1.isEmpty(config.prerender)) {
44
+ prerender = prerender !== null && prerender !== void 0 ? prerender : new prerender_1.Prerender(config, webpackConfig, stats, config.template.Adapter);
45
+ yield prerender.render();
46
+ }
47
+ // const res = stats.toString({
48
+ // logging: 'verbose'
49
+ // })
50
+ // console.log('res: ', res)
51
+ onFinish(null, stats);
52
+ resolve(stats);
53
+ });
54
+ if (config.isWatch) {
55
+ compiler.watch({
56
+ aggregateTimeout: 300,
57
+ poll: undefined
58
+ }, callback);
59
+ }
60
+ else {
61
+ compiler.run((err, stats) => {
62
+ compiler.close(err2 => callback(err || err2, stats));
63
+ });
64
+ }
65
+ });
66
+ });
67
+ }
68
+ exports.default = build;
69
+ //# sourceMappingURL=index.mini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mini.js","sourceRoot":"","sources":["../src/index.mini.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mCAAkC;AAClC,mCAAgC;AAChC,+DAA2D;AAC3D,qDAAiD;AACjD,2CAAuC;AAKvC,SAA8B,KAAK,CAAE,OAAe,EAAE,SAA0B;;QAC9E,MAAM,WAAW,GAAG,IAAI,iCAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC3D,MAAM,WAAW,CAAC,IAAI,EAAE,CAAA;QAExB,MAAM,qBAAS,CAAC,WAAW,CAAC,CAAA;QAE5B,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;QAClD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAA;QAEjC,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;YACvC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;YAC1C,IAAI,SAAoB,CAAA;YAExB,MAAM,QAAQ,GAAG,UAAU,KAAK,EAAE,KAAmB;gBACnD,IAAI,OAAO,aAAa,KAAK,UAAU;oBAAE,OAAM;gBAE/C,aAAa,CAAC;oBACZ,KAAK;oBACL,KAAK;oBACL,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,MAAM,QAAQ,GAAG,CAAO,GAAU,EAAE,KAAY,EAAE,EAAE;gBAClD,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE;oBAC5B,MAAM,KAAK,GAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAA;oBAC1C,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;oBACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;iBACrB;gBAED,IAAI,CAAC,gBAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;oBAC9B,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,qBAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;oBAC7F,MAAM,SAAS,CAAC,MAAM,EAAE,CAAA;iBACzB;gBAED,+BAA+B;gBAC/B,uBAAuB;gBACvB,KAAK;gBACL,4BAA4B;gBAE5B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAA;YAChB,CAAC,CAAA,CAAA;YAED,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,QAAQ,CAAC,KAAK,CAAC;oBACb,gBAAgB,EAAE,GAAG;oBACrB,IAAI,EAAE,SAAS;iBAChB,EAAE,QAAQ,CAAC,CAAA;aACb;iBAAM;gBACL,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAU,EAAE,KAAY,EAAE,EAAE;oBACxC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;gBACtD,CAAC,CAAC,CAAA;aACH;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CAAA;AAxDD,wBAwDC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const sax = require("sax");
13
+ const loader_utils_1 = require("loader-utils");
14
+ function miniTemplateLoader(source) {
15
+ this.cacheable && this.cacheable();
16
+ /**
17
+ * 两种fix方案:
18
+ * 1. 用任意xml标签包裹source,使之变成较标准的xml格式(含有一个根节点)
19
+ * 2. 修改 sax.parser 的第一个参数为 true,启用严格模式
20
+ * 2.1 该模式下小程序模板中的标签或属性不会处理(例如写入<Import SrC="..." />不会处理成<import src="..." />,而是保持原样
21
+ * 2.2 该模式将认为传入的xml为非标准的,无需标准化,且不按照以根节点模式处理,因此可以正常解析小程序模板
22
+ *
23
+ * 推荐方案1,这样在构建时会正常打入需要的包,但是若用户有 SrC 类似的写法导致引用失败,则可直接修正,不会认为是打包出现了问题
24
+ **/
25
+ const sourceWithRoot = `<root>${source}</root>`;
26
+ const parser = sax.parser(false, { lowercase: true });
27
+ const requests = new Set();
28
+ const callback = this.async();
29
+ const loadModule = request => new Promise((resolve, reject) => {
30
+ this.addDependency(request);
31
+ this.loadModule(request, (err, src) => {
32
+ if (err) {
33
+ reject(err);
34
+ }
35
+ else {
36
+ resolve(src);
37
+ }
38
+ });
39
+ });
40
+ parser.onattribute = ({ name, value }) => {
41
+ if (value && name === 'src' && loader_utils_1.isUrlRequest(value)) {
42
+ const request = loader_utils_1.urlToRequest(value);
43
+ requests.add(request);
44
+ }
45
+ };
46
+ parser.onend = () => __awaiter(this, void 0, void 0, function* () {
47
+ try {
48
+ const requestsArray = Array.from(requests);
49
+ if (requestsArray.length) {
50
+ for (let i = 0; i < requestsArray.length; i++) {
51
+ yield loadModule(requestsArray[i]);
52
+ }
53
+ }
54
+ callback(null, source);
55
+ }
56
+ catch (error) {
57
+ callback(error, source);
58
+ }
59
+ });
60
+ parser.write(sourceWithRoot).close();
61
+ }
62
+ exports.default = miniTemplateLoader;
63
+ //# sourceMappingURL=miniTemplateLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miniTemplateLoader.js","sourceRoot":"","sources":["../../src/loaders/miniTemplateLoader.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2BAA0B;AAC1B,+CAAyD;AAEzD,SAAwB,kBAAkB,CAAE,MAAM;IAChD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAA;IAClC;;;;;;;;QAQI;IACJ,MAAM,cAAc,GAAG,SAAS,MAAM,SAAS,CAAA;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,CAC3B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACpC,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,CAAA;aACZ;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,CAAA;aACb;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACvC,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,2BAAY,CAAC,KAAK,CAAC,EAAE;YAClD,MAAM,OAAO,GAAG,2BAAY,CAAC,KAAK,CAAC,CAAA;YACnC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;SACtB;IACH,CAAC,CAAA;IACD,MAAM,CAAC,KAAK,GAAG,GAAS,EAAE;QACxB,IAAI;YACF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1C,IAAI,aAAa,CAAC,MAAM,EAAE;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7C,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;iBACnC;aACF;YACD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SACvB;QAAC,OAAO,KAAK,EAAE;YACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;SACxB;IACH,CAAC,CAAA,CAAA;IACD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAA;AACtC,CAAC;AA/CD,qCA+CC"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const path = require("path");
4
+ const webpack = require("webpack");
5
+ const helper_1 = require("@tarojs/helper");
6
+ const TaroLoadChunksPlugin_1 = require("./TaroLoadChunksPlugin");
7
+ const webpack_1 = require("../utils/webpack");
8
+ const MiniPlugin_1 = require("./MiniPlugin");
9
+ const PLUGIN_NAME = 'BuildNativePlugin';
10
+ class BuildNativePlugin extends MiniPlugin_1.default {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.pageLoaderName = '@tarojs/taro-loader/lib/native-component';
14
+ }
15
+ apply(compiler) {
16
+ super.apply(compiler);
17
+ this.addLoadChunksPlugin(compiler);
18
+ }
19
+ run(compiler) {
20
+ this.appConfig = this.getAppConfig();
21
+ this.getPages();
22
+ this.getPagesConfig();
23
+ this.getConfigFiles(compiler);
24
+ this.addEntries();
25
+ this.addLoader(compiler);
26
+ }
27
+ getPages() {
28
+ if (helper_1.isEmptyObject(this.appConfig)) {
29
+ throw new Error('缺少 app 全局配置,请检查!');
30
+ }
31
+ const appPages = this.appConfig.components;
32
+ if (!appPages || !appPages.length) {
33
+ throw new Error('全局配置缺少 components 字段,请检查!');
34
+ }
35
+ if (!this.isWatch) {
36
+ helper_1.printLog("compile" /* COMPILE */, '发现入口', this.getShowPath(this.appEntry));
37
+ }
38
+ const { framework } = this.options;
39
+ this.prerenderPages = new Set();
40
+ this.pages = new Set([
41
+ ...appPages.map(item => {
42
+ const pagePath = helper_1.resolveMainFilePath(path.join(this.options.sourceDir, item), helper_1.FRAMEWORK_EXT_MAP[framework]);
43
+ return {
44
+ name: item,
45
+ path: pagePath,
46
+ isNative: false
47
+ };
48
+ })
49
+ ]);
50
+ }
51
+ // entry 删除 app.js
52
+ addEntries() {
53
+ super.addEntries();
54
+ const deps = this.dependencies;
55
+ for (const [key, dep] of deps.entries()) {
56
+ if (dep.miniType === 'ENTRY') {
57
+ deps.delete(key);
58
+ break;
59
+ }
60
+ }
61
+ }
62
+ addLoadChunksPlugin(compiler) {
63
+ const fileChunks = new Map();
64
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
65
+ compilation.hooks.afterOptimizeChunks.tap(PLUGIN_NAME, chunks => {
66
+ for (const chunk of chunks) {
67
+ const id = TaroLoadChunksPlugin_1.getIdOrName(chunk);
68
+ if (this.options.commonChunks.includes(id))
69
+ return;
70
+ const deps = [];
71
+ for (const group of chunk.groupsIterable) {
72
+ group.chunks.forEach(chunk => {
73
+ const currentChunkId = TaroLoadChunksPlugin_1.getIdOrName(chunk);
74
+ if (id === currentChunkId)
75
+ return;
76
+ deps.push({
77
+ name: currentChunkId
78
+ });
79
+ });
80
+ }
81
+ fileChunks.set(id, deps);
82
+ }
83
+ });
84
+ webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation).render.tap(PLUGIN_NAME, (modules, { chunk }) => {
85
+ if (!webpack_1.getChunkEntryModule(compilation, chunk))
86
+ return modules;
87
+ // addChunkPages
88
+ if (fileChunks.size) {
89
+ let source;
90
+ const id = TaroLoadChunksPlugin_1.getIdOrName(chunk);
91
+ fileChunks.forEach((v, k) => {
92
+ if (k === id) {
93
+ source = TaroLoadChunksPlugin_1.addRequireToSource(id, modules, v);
94
+ }
95
+ });
96
+ return source;
97
+ }
98
+ });
99
+ });
100
+ }
101
+ // 不生成 app.json
102
+ generateConfigFile(compilation, filePath, config) {
103
+ if (filePath === this.appEntry)
104
+ return;
105
+ super.generateConfigFile(compilation, filePath, config);
106
+ }
107
+ // 加载 taro-runtime 前必须先加载端平台插件的 runtime
108
+ addLoader(compiler) {
109
+ compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
110
+ webpack.NormalModule.getCompilationHooks(compilation).loader.tap(PLUGIN_NAME, (_loaderContext, module) => {
111
+ if (module.rawRequest === '@tarojs/runtime') {
112
+ module.loaders.unshift({
113
+ loader: '@tarojs/taro-loader/lib/taro-runtime',
114
+ options: {
115
+ runtimePath: this.options.runtimePath
116
+ }
117
+ });
118
+ }
119
+ });
120
+ });
121
+ }
122
+ }
123
+ exports.default = BuildNativePlugin;
124
+ //# sourceMappingURL=BuildNativePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildNativePlugin.js","sourceRoot":"","sources":["../../src/plugins/BuildNativePlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const helper_1 = require("@tarojs/helper");
13
+ const lodash_1 = require("lodash");
14
+ const path = require("path");
15
+ const webpack = require("webpack");
16
+ const H5AppInstance_1 = require("../utils/H5AppInstance");
17
+ const PLUGIN_NAME = 'H5Plugin';
18
+ class H5Plugin {
19
+ constructor(options = {}) {
20
+ this.pagesConfigList = new Map();
21
+ this.pages = new Set();
22
+ this.tryAsync = fn => (arg, callback) => __awaiter(this, void 0, void 0, function* () {
23
+ try {
24
+ yield fn(arg);
25
+ callback();
26
+ }
27
+ catch (err) {
28
+ callback(err);
29
+ }
30
+ });
31
+ this.options = lodash_1.defaults(options || {}, {
32
+ sourceDir: '',
33
+ routerConfig: {},
34
+ entryFileName: 'app',
35
+ framework: helper_1.FRAMEWORK_MAP.NERV,
36
+ useHtmlComponents: false,
37
+ deviceRatio: {},
38
+ designWidth: 750
39
+ });
40
+ }
41
+ apply(compiler) {
42
+ const { entry } = compiler.options;
43
+ this.inst = new H5AppInstance_1.default(entry, this.options);
44
+ compiler.hooks.run.tapAsync(PLUGIN_NAME, this.tryAsync(() => {
45
+ this.run();
46
+ }));
47
+ compiler.hooks.watchRun.tapAsync(PLUGIN_NAME, this.tryAsync(() => {
48
+ this.run();
49
+ }));
50
+ compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
51
+ webpack.NormalModule.getCompilationHooks(compilation).loader.tap(PLUGIN_NAME, (_loaderContext, module) => {
52
+ const { framework, entryFileName, sourceDir, designWidth, deviceRatio, loaderMeta, routerConfig } = this.options;
53
+ const { dir, name } = path.parse(module.resource);
54
+ const configSuffix = '.config';
55
+ if (!name.includes(configSuffix))
56
+ return;
57
+ const filePath = path.join(dir, name);
58
+ const pageName = filePath.replace(sourceDir + '/', '').replace(configSuffix, '');
59
+ const routerMode = (routerConfig === null || routerConfig === void 0 ? void 0 : routerConfig.mode) || 'hash';
60
+ const isMultiRouterMode = routerMode === 'multi';
61
+ const isApp = !isMultiRouterMode && pageName === entryFileName;
62
+ if (isApp || this.inst.pagesConfigList.has(pageName)) {
63
+ module.loaders.push({
64
+ loader: '@tarojs/taro-loader/lib/h5',
65
+ options: {
66
+ framework,
67
+ loaderMeta,
68
+ entryFileName,
69
+ sourceDir,
70
+ filename: name.replace(configSuffix, ''),
71
+ pages: this.inst.pagesConfigList,
72
+ useHtmlComponents: this.options.useHtmlComponents,
73
+ config: Object.assign({ router: this.options.routerConfig }, this.inst.appConfig),
74
+ pxTransformConfig: {
75
+ designWidth,
76
+ deviceRatio
77
+ }
78
+ }
79
+ });
80
+ }
81
+ });
82
+ });
83
+ }
84
+ run() {
85
+ delete this.inst.__appConfig;
86
+ delete this.inst.__pages;
87
+ delete this.inst.__pagesConfigList;
88
+ }
89
+ }
90
+ exports.default = H5Plugin;
91
+ //# sourceMappingURL=H5Plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"H5Plugin.js","sourceRoot":"","sources":["../../src/plugins/H5Plugin.ts"],"names":[],"mappings":"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"}