@tarojs/webpack5-prebundle 3.5.0-beta.3

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 (53) hide show
  1. package/README.md +3 -0
  2. package/dist/h5.d.ts +17 -0
  3. package/dist/h5.js +182 -0
  4. package/dist/h5.js.map +1 -0
  5. package/dist/index.d.ts +27 -0
  6. package/dist/index.js +79 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/mini.d.ts +9 -0
  9. package/dist/mini.js +241 -0
  10. package/dist/mini.js.map +1 -0
  11. package/dist/prebundle/bundle.d.ts +25 -0
  12. package/dist/prebundle/bundle.js +223 -0
  13. package/dist/prebundle/bundle.js.map +1 -0
  14. package/dist/prebundle/index.d.ts +45 -0
  15. package/dist/prebundle/index.js +131 -0
  16. package/dist/prebundle/index.js.map +1 -0
  17. package/dist/prebundle/scanImports.d.ts +10 -0
  18. package/dist/prebundle/scanImports.js +192 -0
  19. package/dist/prebundle/scanImports.js.map +1 -0
  20. package/dist/utils/constant.d.ts +13 -0
  21. package/dist/utils/constant.js +65 -0
  22. package/dist/utils/constant.js.map +1 -0
  23. package/dist/utils/index.d.ts +33 -0
  24. package/dist/utils/index.js +175 -0
  25. package/dist/utils/index.js.map +1 -0
  26. package/dist/utils/path.d.ts +2 -0
  27. package/dist/utils/path.js +8 -0
  28. package/dist/utils/path.js.map +1 -0
  29. package/dist/utils/webpack.d.ts +10 -0
  30. package/dist/utils/webpack.js +39 -0
  31. package/dist/utils/webpack.js.map +1 -0
  32. package/dist/webpack/TaroContainerEntryModule.d.ts +12 -0
  33. package/dist/webpack/TaroContainerEntryModule.js +78 -0
  34. package/dist/webpack/TaroContainerEntryModule.js.map +1 -0
  35. package/dist/webpack/TaroContainerEntryModuleFactory.d.ts +6 -0
  36. package/dist/webpack/TaroContainerEntryModuleFactory.js +17 -0
  37. package/dist/webpack/TaroContainerEntryModuleFactory.js.map +1 -0
  38. package/dist/webpack/TaroContainerPlugin.d.ts +25 -0
  39. package/dist/webpack/TaroContainerPlugin.js +77 -0
  40. package/dist/webpack/TaroContainerPlugin.js.map +1 -0
  41. package/dist/webpack/TaroContainerReferencePlugin.d.ts +26 -0
  42. package/dist/webpack/TaroContainerReferencePlugin.js +187 -0
  43. package/dist/webpack/TaroContainerReferencePlugin.js.map +1 -0
  44. package/dist/webpack/TaroModuleFederationPlugin.d.ts +21 -0
  45. package/dist/webpack/TaroModuleFederationPlugin.js +75 -0
  46. package/dist/webpack/TaroModuleFederationPlugin.js.map +1 -0
  47. package/dist/webpack/TaroRemoteRuntimeModule.d.ts +14 -0
  48. package/dist/webpack/TaroRemoteRuntimeModule.js +117 -0
  49. package/dist/webpack/TaroRemoteRuntimeModule.js.map +1 -0
  50. package/dist/webpack/index.d.ts +0 -0
  51. package/dist/webpack/index.js +1 -0
  52. package/dist/webpack/index.js.map +1 -0
  53. package/package.json +48 -0
@@ -0,0 +1,223 @@
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
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.getSwcPlugin = exports.bundle = void 0;
39
+ const swc = __importStar(require("@swc/core"));
40
+ const helper_1 = require("@tarojs/helper");
41
+ const es_module_lexer_1 = require("es-module-lexer");
42
+ const esbuild_1 = __importDefault(require("esbuild"));
43
+ const fs_extra_1 = __importDefault(require("fs-extra"));
44
+ const lodash_1 = require("lodash");
45
+ const path_1 = __importDefault(require("path"));
46
+ const utils_1 = require("../utils");
47
+ const constant_1 = require("../utils/constant");
48
+ // esbuild generates nested directory output with lowest common ancestor base
49
+ // this is unpredictable and makes it difficult to analyze entry / output
50
+ // mapping. So what we do here is:
51
+ // 1. flatten all ids to eliminate slash
52
+ // 2. in the plugin, read the entry ourselves as virtual files to retain the
53
+ // path.
54
+ function bundle({ appPath, deps, chain, prebundleOutputDir, customEsbuildConfig = {}, customSwcConfig = {} }) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ yield es_module_lexer_1.init;
57
+ const flattenDeps = new Map();
58
+ const flatIdExports = new Map();
59
+ for (const [id, dep] of deps.entries()) {
60
+ // flatten id
61
+ const flatId = (0, utils_1.flattenId)(id);
62
+ flattenDeps.set(flatId, dep);
63
+ // Use es-module-lexer to check ES exports
64
+ // But "export * from" syntax should be checked alone
65
+ const fileContent = fs_extra_1.default.readFileSync(dep, 'utf-8');
66
+ const exportsData = (0, es_module_lexer_1.parse)(fileContent);
67
+ for (const { ss, se } of exportsData[0]) {
68
+ const exp = fileContent.slice(ss, se);
69
+ if (/export\s+\*\s+from/.test(exp)) {
70
+ exportsData.hasReExports = true;
71
+ }
72
+ }
73
+ flatIdExports.set(flatId, exportsData);
74
+ }
75
+ fs_extra_1.default.existsSync(prebundleOutputDir)
76
+ ? fs_extra_1.default.emptyDirSync(prebundleOutputDir)
77
+ : fs_extra_1.default.ensureDirSync(prebundleOutputDir);
78
+ return esbuild_1.default.build({
79
+ absWorkingDir: appPath,
80
+ bundle: true,
81
+ write: false,
82
+ entryPoints: Array.from(flattenDeps.keys()),
83
+ mainFields: ['main:h5', 'browser', 'module', 'jsnext:main', 'main'],
84
+ format: 'esm',
85
+ loader: (0, lodash_1.defaults)(customEsbuildConfig.loader, constant_1.defaultEsbuildLoader),
86
+ define: Object.assign(Object.assign({}, (0, utils_1.getDefines)(chain)), {
87
+ // AMD 被 esbuild 转 ESM 后,是套着 ESM 外皮的 AMD 语法模块。
88
+ // Webpack HarmonyDetectionParserPlugin 会阻止 AMDDefineDependencyParserPlugin 对这些模块的处理。
89
+ // 导致这些模块报错(如 lodash)。目前的办法是把 define 置为 false,不支持 AMD 导出。
90
+ define: 'false' }),
91
+ splitting: true,
92
+ metafile: true,
93
+ ignoreAnnotations: true,
94
+ outdir: prebundleOutputDir,
95
+ plugins: [
96
+ getEntryPlugin({
97
+ flattenDeps,
98
+ flatIdExports,
99
+ prebundleOutputDir,
100
+ swcConfig: customSwcConfig || {}
101
+ }),
102
+ ...customEsbuildConfig.plugins || [],
103
+ getSwcPlugin({ appPath, flatIdExports }, customSwcConfig)
104
+ ]
105
+ });
106
+ });
107
+ }
108
+ exports.bundle = bundle;
109
+ function getEntryPlugin({ flattenDeps, flatIdExports, prebundleOutputDir }) {
110
+ const resolve = (0, utils_1.getResolve)();
111
+ return {
112
+ name: 'entry',
113
+ setup(build) {
114
+ // assets
115
+ build.onResolve({ filter: constant_1.assetsRE }, ({ path: id, resolveDir }) => __awaiter(this, void 0, void 0, function* () {
116
+ const filePath = path_1.default.isAbsolute(id) ? id : path_1.default.join(resolveDir, id);
117
+ const fileExt = path_1.default.extname(filePath);
118
+ const fileBasename = path_1.default.basename(filePath, fileExt);
119
+ const fileContent = yield fs_extra_1.default.readFile(filePath);
120
+ const outputFile = path_1.default.join(prebundleOutputDir, `${fileBasename}-${(0, utils_1.getHash)(filePath)}${fileExt}`);
121
+ yield fs_extra_1.default.writeFile(outputFile, fileContent);
122
+ return (0, utils_1.externalModule)({ path: `./${path_1.default.relative(prebundleOutputDir, outputFile)}` });
123
+ }));
124
+ build.onResolve({ filter: /^[\w@][^:]/ }, ({ path: id, importer }) => __awaiter(this, void 0, void 0, function* () {
125
+ // entry
126
+ if (!importer && flattenDeps.has(id)) {
127
+ return {
128
+ path: id,
129
+ namespace: 'entry'
130
+ };
131
+ }
132
+ const resolvedPath = yield resolve(path_1.default.dirname(importer), id);
133
+ if (constant_1.assetsRE.test(resolvedPath)) {
134
+ return (0, utils_1.externalModule)({ path: id });
135
+ }
136
+ else {
137
+ return {
138
+ path: resolvedPath
139
+ };
140
+ }
141
+ }));
142
+ build.onLoad({ filter: /^[\w@][^:]/, namespace: 'entry' }, ({ path: id }) => __awaiter(this, void 0, void 0, function* () {
143
+ var _a;
144
+ let js = '';
145
+ const filePath = (_a = flattenDeps.get(id)) === null || _a === void 0 ? void 0 : _a.replace(/\\/g, '\\\\');
146
+ const exportsData = flatIdExports.get(id);
147
+ const [importsList, exportsList] = exportsData;
148
+ const hasReExports = exportsData.hasReExports;
149
+ if (!importsList.length && !exportsList.length) {
150
+ /** CommonJS */
151
+ exportsData.needInterop = true;
152
+ js = `module.exports = require("${filePath}")`;
153
+ }
154
+ else {
155
+ /** ESM */
156
+ if (exportsList.includes('default')) {
157
+ // export default
158
+ js += `import d from "${filePath}";export default d;`;
159
+ }
160
+ if (hasReExports ||
161
+ exportsList.length > 1 ||
162
+ exportsList[0] !== 'default') {
163
+ // export * from 'xx'
164
+ // export const xx
165
+ js += `export * from "${filePath}";`;
166
+ }
167
+ }
168
+ // console.log('\n[debug] found entry: ', id)
169
+ // console.log('[debug]: filePath', filePath)
170
+ // console.log('[debug] importsData: ', flatIdExports.get(id))
171
+ // console.log('[debug] js: ', js)
172
+ return {
173
+ loader: 'js',
174
+ resolveDir: process.cwd(),
175
+ contents: js
176
+ };
177
+ }));
178
+ }
179
+ };
180
+ }
181
+ function getSwcPlugin({ appPath, flatIdExports }, config) {
182
+ return {
183
+ name: 'swc-plugin',
184
+ setup(build) {
185
+ build.onEnd(({ outputFiles = [], metafile = {} }) => __awaiter(this, void 0, void 0, function* () {
186
+ var _a, _b;
187
+ yield Promise.all(outputFiles.map(({ path, text }) => __awaiter(this, void 0, void 0, function* () {
188
+ if (!helper_1.REG_SCRIPTS.test(path))
189
+ return;
190
+ const { code } = swc.transformSync(text, (0, lodash_1.defaults)(config, { jsc: { target: 'es2015' } }));
191
+ fs_extra_1.default.writeFile(path, code);
192
+ })));
193
+ // esbuild 把 Commonjs 转 ESM 时,打包后只有 export default 语句,
194
+ // 无法实现原模块 module.exports = 的功能。
195
+ // 因此使用一个 CommonJS 规范的中间模块进行处理。
196
+ const processAll = [];
197
+ const metaOutput = metafile.outputs;
198
+ for (const outputName in metaOutput) {
199
+ const output = metaOutput[outputName];
200
+ if (!((_a = output.entryPoint) === null || _a === void 0 ? void 0 : _a.startsWith('entry:')))
201
+ continue;
202
+ const entry = output.entryPoint.replace(/^entry:/, '');
203
+ if (!flatIdExports.has(entry))
204
+ continue;
205
+ if (((_b = flatIdExports.get(entry)) === null || _b === void 0 ? void 0 : _b.needInterop) &&
206
+ output.exports.length === 1 &&
207
+ output.exports[0] === 'default') {
208
+ const srcPath = path_1.default.join(appPath, outputName);
209
+ const destPath = path_1.default.join(appPath, outputName.replace(/(\.js)$/, '.core$1'));
210
+ processAll.push(fs_extra_1.default.move(srcPath, destPath)
211
+ .then(() => fs_extra_1.default.writeFile(srcPath, `const m = require('./${path_1.default.basename(destPath)}')
212
+ module.exports = m.default
213
+ exports.default = module.exports
214
+ `)));
215
+ }
216
+ }
217
+ yield Promise.all(processAll);
218
+ }));
219
+ }
220
+ };
221
+ }
222
+ exports.getSwcPlugin = getSwcPlugin;
223
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/prebundle/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import swc from '@swc/core';
2
+ import { IProjectBaseConfig } from '@tarojs/taro/types/compile';
3
+ import { EntryObject } from 'webpack';
4
+ import Chain from 'webpack-chain';
5
+ import { getMeasure, Metadata } from '../utils';
6
+ import { CollectedDeps } from '../utils/constant';
7
+ export declare type IPrebundle = Exclude<IProjectBaseConfig['compiler'], string | undefined>['prebundle'];
8
+ export interface IPrebundleConfig {
9
+ appPath: string;
10
+ chain: Chain;
11
+ chunkDirectory?: string;
12
+ enableSourceMap: boolean;
13
+ entry: EntryObject;
14
+ entryFileName?: string;
15
+ env: string;
16
+ sourceRoot: string;
17
+ }
18
+ export default class BasePrebundle<T extends IPrebundleConfig = IPrebundleConfig> {
19
+ protected config: T;
20
+ protected option: IPrebundle;
21
+ sourceRoot: string;
22
+ appPath: string;
23
+ cacheDir: string;
24
+ chain: Chain;
25
+ customEsbuildConfig: IPrebundle['esbuild'];
26
+ customSwcConfig?: swc.Config;
27
+ env: string;
28
+ prebundleCacheDir: string;
29
+ remoteCacheDir: string;
30
+ metadataPath: string;
31
+ metadata: Metadata;
32
+ preMetadata: Metadata;
33
+ isUseCache: boolean;
34
+ deps: CollectedDeps;
35
+ measure: ReturnType<typeof getMeasure>;
36
+ constructor(config: T, option: IPrebundle);
37
+ run(): Promise<void>;
38
+ addPlugin(name: string, plugin: any, ...args: Record<string, any>[]): void;
39
+ get entryPath(): any;
40
+ /** 找出所有 webpack entry */
41
+ getEntries(appJsPath: string): string[];
42
+ setDeps(entries: string[], include?: string[], exclude?: string[]): Promise<void>;
43
+ bundle(): Promise<void>;
44
+ setHost(): void;
45
+ }
@@ -0,0 +1,131 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const helper_1 = require("@tarojs/helper");
16
+ const path_1 = __importDefault(require("path"));
17
+ const perf_hooks_1 = require("perf_hooks");
18
+ const utils_1 = require("../utils");
19
+ const constant_1 = require("../utils/constant");
20
+ const TaroModuleFederationPlugin_1 = __importDefault(require("../webpack/TaroModuleFederationPlugin"));
21
+ const bundle_1 = require("./bundle");
22
+ const scanImports_1 = require("./scanImports");
23
+ class BasePrebundle {
24
+ constructor(config, option) {
25
+ this.config = config;
26
+ this.option = option;
27
+ this.isUseCache = true;
28
+ this.deps = new Map();
29
+ if (!option.enable)
30
+ return;
31
+ const { appPath, env, chain, sourceRoot } = this.config;
32
+ const { cacheDir = (0, utils_1.getCacheDir)(appPath, env), esbuild = {}, force, swc } = this.option;
33
+ this.chain = chain;
34
+ this.sourceRoot = sourceRoot;
35
+ this.appPath = appPath;
36
+ this.cacheDir = cacheDir;
37
+ this.customEsbuildConfig = esbuild;
38
+ this.customSwcConfig = swc;
39
+ this.env = env;
40
+ this.prebundleCacheDir = path_1.default.resolve(cacheDir, './prebundle');
41
+ this.remoteCacheDir = path_1.default.resolve(cacheDir, './remote');
42
+ this.metadataPath = path_1.default.join(cacheDir, 'metadata.json');
43
+ this.metadata = {};
44
+ this.preMetadata = {};
45
+ this.measure = (0, utils_1.getMeasure)(this.option.timings);
46
+ try {
47
+ if (force !== true) {
48
+ Object.assign(this.preMetadata, helper_1.fs.readJSONSync(this.metadataPath));
49
+ }
50
+ }
51
+ catch (e) { }
52
+ }
53
+ run() {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ if (!this.isUseCache) {
56
+ (0, utils_1.commitMeta)(this.appPath, this.metadataPath, this.metadata);
57
+ }
58
+ });
59
+ }
60
+ addPlugin(name, plugin, ...args) {
61
+ this.chain.plugin(name).use(plugin, args);
62
+ }
63
+ get entryPath() {
64
+ const { entryFileName = 'app', entry = {} } = this.config;
65
+ return entry[entryFileName][0];
66
+ }
67
+ /** 找出所有 webpack entry */
68
+ getEntries(appJsPath) {
69
+ const { appPath, sourceRoot } = this.config;
70
+ const entries = [];
71
+ entries.push(appJsPath);
72
+ const appConfigPath = (0, helper_1.resolveMainFilePath)(`${appJsPath.replace(path_1.default.extname(appJsPath), '')}.config`);
73
+ const appConfig = (0, helper_1.readConfig)(appConfigPath);
74
+ appConfig.pages.forEach((page) => {
75
+ const pageJsPath = (0, helper_1.resolveMainFilePath)(path_1.default.join(appPath, sourceRoot, page));
76
+ entries.push(pageJsPath);
77
+ });
78
+ return entries;
79
+ }
80
+ setDeps(entries, include = [], exclude = []) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const SCAN_START = perf_hooks_1.performance.now();
83
+ yield (0, scanImports_1.scanImports)({
84
+ appPath: this.appPath,
85
+ customEsbuildConfig: this.customEsbuildConfig,
86
+ entries,
87
+ exclude,
88
+ include
89
+ }, this.deps);
90
+ this.deps.size &&
91
+ console.log(helper_1.chalk.cyan('Prebundle dependencies: \n', ...JSON.parse((0, utils_1.formatDepsString)(this.deps)).map(dep => ` ${dep[0]}\n`)));
92
+ this.measure('Scan imports duration', SCAN_START);
93
+ });
94
+ }
95
+ bundle() {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ const PREBUNDLE_START = perf_hooks_1.performance.now();
98
+ this.metadata.bundleHash = yield (0, utils_1.getBundleHash)(this.appPath, this.deps, this.chain, this.cacheDir);
99
+ if (this.preMetadata.bundleHash !== this.metadata.bundleHash) {
100
+ this.isUseCache = false;
101
+ yield (0, bundle_1.bundle)({
102
+ appPath: this.appPath,
103
+ deps: this.deps,
104
+ chain: this.chain,
105
+ prebundleOutputDir: this.prebundleCacheDir,
106
+ customEsbuildConfig: this.customEsbuildConfig,
107
+ customSwcConfig: this.customSwcConfig
108
+ });
109
+ }
110
+ this.measure('Prebundle duration', PREBUNDLE_START);
111
+ });
112
+ }
113
+ setHost() {
114
+ this.chain
115
+ .plugin('TaroModuleFederationPlugin')
116
+ .use(TaroModuleFederationPlugin_1.default, [{
117
+ name: 'taro-app',
118
+ remotes: {
119
+ [constant_1.MF_NAME]: `${constant_1.MF_NAME}@remoteEntry.js`
120
+ }
121
+ },
122
+ {
123
+ deps: this.deps,
124
+ env: this.env,
125
+ remoteAssets: this.metadata.remoteAssets,
126
+ runtimeRequirements: this.metadata.runtimeRequirements || new Set()
127
+ }]);
128
+ }
129
+ }
130
+ exports.default = BasePrebundle;
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prebundle/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { CollectedDeps } from '../utils/constant';
2
+ interface ScanImportsConfig {
3
+ appPath: string;
4
+ entries: string[];
5
+ include: string[];
6
+ exclude: string[];
7
+ customEsbuildConfig?: Record<string, any>;
8
+ }
9
+ export declare function scanImports({ appPath, entries, include, exclude, customEsbuildConfig }: ScanImportsConfig, deps?: CollectedDeps): Promise<CollectedDeps>;
10
+ export {};
@@ -0,0 +1,192 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.scanImports = void 0;
16
+ const esbuild_1 = __importDefault(require("esbuild"));
17
+ const fs_1 = __importDefault(require("fs"));
18
+ const lodash_1 = require("lodash");
19
+ const path_1 = __importDefault(require("path"));
20
+ const utils_1 = require("../utils");
21
+ const constant_1 = require("../utils/constant");
22
+ function scanImports({ appPath, entries, include = [], exclude = [], customEsbuildConfig = {} }, deps = new Map()) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const scanImportsPlugin = getScanImportsPlugin(deps, include, exclude);
25
+ const customPlugins = customEsbuildConfig.plugins || [];
26
+ yield Promise.all(entries.map(entry => esbuild_1.default.build({
27
+ absWorkingDir: appPath,
28
+ bundle: true,
29
+ entryPoints: [entry],
30
+ mainFields: ['main:h5', 'browser', 'module', 'jsnext:main', 'main'],
31
+ format: 'esm',
32
+ loader: (0, lodash_1.defaults)(customEsbuildConfig.loader, constant_1.defaultEsbuildLoader),
33
+ write: false,
34
+ plugins: [
35
+ scanImportsPlugin,
36
+ ...customPlugins
37
+ ]
38
+ })));
39
+ // 有一些 Webpack loaders 添加的依赖没有办法提前分析出来
40
+ // 可以把它们写进 includes,然后在这里 resolve 后加入到 deps
41
+ const resolve = (0, utils_1.getResolve)();
42
+ yield Promise.all(include.map((item) => __awaiter(this, void 0, void 0, function* () {
43
+ if ((0, utils_1.isExclude)(item, exclude))
44
+ return;
45
+ const resolvePath = yield resolve(appPath, item);
46
+ deps.set(item, resolvePath);
47
+ })));
48
+ return deps;
49
+ });
50
+ }
51
+ exports.scanImports = scanImports;
52
+ /**
53
+ * 收集 node_modules 依赖
54
+ * Circumstances:
55
+ * 1. import 'xxx.scss', import '../xxx.png' => external
56
+ * 2. import 'xxx.vue', import '../xxx.vue'
57
+ * => collect script: { key: { loader, contents } }
58
+ * => virtual-mode compose of "export * from 'key';""
59
+ * => load virtual-mode and return { loader, contents }
60
+ * 3. import 'xxx', import 'xxx/yyy.ext', import '@xxx/alias'
61
+ * => resolve
62
+ * => path.includes(node_modules) && .js|.jsx|.ts|.tsx => collect + external
63
+ * => .vue => (2)
64
+ * => asserts => (1)
65
+ * => src => return
66
+ * 4. import '../xxx', import '../xxx.ext'
67
+ * => resolve
68
+ * => .vue => (2)
69
+ * => src => return
70
+ */
71
+ function getScanImportsPlugin(deps, includes, excludes) {
72
+ const resolve = (0, utils_1.getResolve)();
73
+ // for storing vue <script> contents
74
+ const scripts = new Map();
75
+ return {
76
+ name: 'scanImports',
77
+ setup(build) {
78
+ // assets
79
+ build.onResolve(({ filter: constant_1.assetsRE }), utils_1.externalModule);
80
+ // .vue
81
+ build.onLoad({ filter: /\.vue$/, namespace: 'vue' }, ({ path }) => {
82
+ let raw = fs_1.default.readFileSync(path, 'utf-8');
83
+ raw = raw.replace(constant_1.commentRE, '<!---->');
84
+ const regex = constant_1.scriptRE;
85
+ regex.lastIndex = 0;
86
+ let js = '';
87
+ let scriptId = 0;
88
+ let match;
89
+ while ((match = regex.exec(raw))) {
90
+ const [, openTag, content] = match;
91
+ const langMatch = openTag.match(constant_1.langRE);
92
+ const lang = langMatch && (langMatch[1] || langMatch[2] || langMatch[3]);
93
+ let loader = 'js';
94
+ if (lang === 'ts' || lang === 'tsx' || lang === 'jsx') {
95
+ loader = lang;
96
+ }
97
+ if (content.trim()) {
98
+ // append imports in TS to prevent esbuild from removing them
99
+ // since they may be used in the template
100
+ const contents = content +
101
+ (loader.startsWith('ts') ? extractImportPaths(content) : '');
102
+ const key = `${path}?id=${scriptId++}`;
103
+ scripts.set(key, {
104
+ loader,
105
+ contents
106
+ });
107
+ const virtualModulePath = JSON.stringify(constant_1.virtualModulePrefix + key);
108
+ js += `export * from ${virtualModulePath}\n`;
109
+ }
110
+ }
111
+ // "export * from" syntax will not re'export "default", so we patch one.
112
+ if (!js.includes('export default')) {
113
+ js += 'export default {}';
114
+ }
115
+ return {
116
+ loader: 'js',
117
+ contents: js
118
+ };
119
+ });
120
+ build.onResolve(({ filter: constant_1.virtualModuleRE }), ({ path }) => {
121
+ return {
122
+ path: path.replace(constant_1.virtualModulePrefix, ''),
123
+ namespace: 'script'
124
+ };
125
+ });
126
+ build.onLoad(({ filter: /.*/, namespace: 'script' }), ({ path }) => {
127
+ return scripts.get(path);
128
+ });
129
+ // bare imports
130
+ build.onResolve({ filter: /^[\w@][^:]/ }, ({ path: id, importer }) => __awaiter(this, void 0, void 0, function* () {
131
+ if ((0, utils_1.isExclude)(id, excludes))
132
+ return (0, utils_1.externalModule)({ path: id });
133
+ if (deps.has(id))
134
+ return (0, utils_1.externalModule)({ path: id });
135
+ const resolvedPath = yield resolve(path_1.default.dirname(importer), id);
136
+ if (resolvedPath.includes('node_modules') || includes.includes(id)) {
137
+ if ((0, utils_1.isOptimizeIncluded)(resolvedPath)) {
138
+ deps.set(id, resolvedPath);
139
+ }
140
+ return (0, utils_1.externalModule)({ path: id });
141
+ }
142
+ else if ((0, utils_1.isScanIncluded)(resolvedPath)) {
143
+ return {
144
+ path: resolvedPath,
145
+ namespace: 'vue'
146
+ };
147
+ }
148
+ else if (constant_1.assetsRE.test(resolvedPath)) {
149
+ (0, utils_1.externalModule)({ path: id });
150
+ }
151
+ else {
152
+ return {
153
+ path: resolvedPath
154
+ };
155
+ }
156
+ }));
157
+ // catch all
158
+ build.onResolve({ filter: /.*/ }, ({ path: id, importer }) => __awaiter(this, void 0, void 0, function* () {
159
+ const resolvedPath = yield resolve(path_1.default.dirname(importer), id);
160
+ const namespace = (0, utils_1.isScanIncluded)(resolvedPath) ? 'vue' : undefined;
161
+ return {
162
+ path: resolvedPath,
163
+ namespace
164
+ };
165
+ }));
166
+ }
167
+ };
168
+ }
169
+ /**
170
+ * when using TS + (Vue + `<script setup>`) or Svelte, imports may seem
171
+ * unused to esbuild and dropped in the build output, which prevents
172
+ * esbuild from crawling further.
173
+ * the solution is to add `import 'x'` for every source to force
174
+ * esbuild to keep crawling due to potential side effects.
175
+ */
176
+ function extractImportPaths(code) {
177
+ // empty singleline & multiline comments to avoid matching comments
178
+ code = code
179
+ .replace(constant_1.multilineCommentsRE, '/* */')
180
+ .replace(constant_1.singlelineCommentsRE, '');
181
+ let js = '';
182
+ let m;
183
+ while ((m = constant_1.importsRE.exec(code)) != null) {
184
+ // This is necessary to avoid infinite loops with zero-width matches
185
+ if (m.index === constant_1.importsRE.lastIndex) {
186
+ constant_1.importsRE.lastIndex++;
187
+ }
188
+ js += `\nimport ${m[1]}`;
189
+ }
190
+ return js;
191
+ }
192
+ //# sourceMappingURL=scanImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanImports.js","sourceRoot":"","sources":["../../src/prebundle/scanImports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Loader } from 'esbuild';
2
+ export declare const virtualModulePrefix = "virtual-module:";
3
+ export declare const virtualModuleRE: RegExp;
4
+ export declare const assetsRE: RegExp;
5
+ export declare const commentRE: RegExp;
6
+ export declare const scriptRE: RegExp;
7
+ export declare const langRE: RegExp;
8
+ export declare const multilineCommentsRE: RegExp;
9
+ export declare const singlelineCommentsRE: RegExp;
10
+ export declare const importsRE: RegExp;
11
+ export declare type CollectedDeps = Map<string, string>;
12
+ export declare const MF_NAME = "taro_app_library";
13
+ export declare const defaultEsbuildLoader: Record<string, Loader>;