@tarojs/webpack5-prebundle 3.5.0-alpha.16

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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/h5.d.ts +23 -0
  4. package/dist/h5.js +193 -0
  5. package/dist/h5.js.map +1 -0
  6. package/dist/index.d.ts +28 -0
  7. package/dist/index.js +87 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/mini.d.ts +9 -0
  10. package/dist/mini.js +244 -0
  11. package/dist/mini.js.map +1 -0
  12. package/dist/prebundle/bundle.d.ts +25 -0
  13. package/dist/prebundle/bundle.js +188 -0
  14. package/dist/prebundle/bundle.js.map +1 -0
  15. package/dist/prebundle/index.d.ts +48 -0
  16. package/dist/prebundle/index.js +186 -0
  17. package/dist/prebundle/index.js.map +1 -0
  18. package/dist/prebundle/scanImports.d.ts +10 -0
  19. package/dist/prebundle/scanImports.js +192 -0
  20. package/dist/prebundle/scanImports.js.map +1 -0
  21. package/dist/utils/constant.d.ts +14 -0
  22. package/dist/utils/constant.js +66 -0
  23. package/dist/utils/constant.js.map +1 -0
  24. package/dist/utils/index.d.ts +34 -0
  25. package/dist/utils/index.js +182 -0
  26. package/dist/utils/index.js.map +1 -0
  27. package/dist/utils/path.d.ts +3 -0
  28. package/dist/utils/path.js +12 -0
  29. package/dist/utils/path.js.map +1 -0
  30. package/dist/utils/webpack.d.ts +10 -0
  31. package/dist/utils/webpack.js +39 -0
  32. package/dist/utils/webpack.js.map +1 -0
  33. package/dist/webpack/TaroContainerEntryModule.d.ts +12 -0
  34. package/dist/webpack/TaroContainerEntryModule.js +78 -0
  35. package/dist/webpack/TaroContainerEntryModule.js.map +1 -0
  36. package/dist/webpack/TaroContainerEntryModuleFactory.d.ts +6 -0
  37. package/dist/webpack/TaroContainerEntryModuleFactory.js +17 -0
  38. package/dist/webpack/TaroContainerEntryModuleFactory.js.map +1 -0
  39. package/dist/webpack/TaroContainerPlugin.d.ts +25 -0
  40. package/dist/webpack/TaroContainerPlugin.js +77 -0
  41. package/dist/webpack/TaroContainerPlugin.js.map +1 -0
  42. package/dist/webpack/TaroContainerReferencePlugin.d.ts +26 -0
  43. package/dist/webpack/TaroContainerReferencePlugin.js +187 -0
  44. package/dist/webpack/TaroContainerReferencePlugin.js.map +1 -0
  45. package/dist/webpack/TaroModuleFederationPlugin.d.ts +21 -0
  46. package/dist/webpack/TaroModuleFederationPlugin.js +75 -0
  47. package/dist/webpack/TaroModuleFederationPlugin.js.map +1 -0
  48. package/dist/webpack/TaroRemoteRuntimeModule.d.ts +14 -0
  49. package/dist/webpack/TaroRemoteRuntimeModule.js +117 -0
  50. package/dist/webpack/TaroRemoteRuntimeModule.js.map +1 -0
  51. package/dist/webpack/index.d.ts +0 -0
  52. package/dist/webpack/index.js +1 -0
  53. package/dist/webpack/index.js.map +1 -0
  54. package/package.json +50 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * Modify from https://github.com/webpack/webpack/blob/main/lib/container/ContainerEntryModule.js
8
+ * MIT License http://www.opensource.org/licenses/mit-license.php
9
+ * Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
10
+ */
11
+ const webpack_1 = __importDefault(require("webpack"));
12
+ const webpack_sources_1 = require("webpack-sources");
13
+ const { Template, RuntimeGlobals } = webpack_1.default;
14
+ const ContainerEntryModule = require('webpack/lib/container/ContainerEntryModule');
15
+ class TaroContainerEntryModule extends ContainerEntryModule {
16
+ // eslint-disable-next-line no-useless-constructor
17
+ constructor(name, exposes, shareScope) {
18
+ super(name, exposes, shareScope);
19
+ }
20
+ codeGeneration({ moduleGraph, chunkGraph, runtimeTemplate }) {
21
+ const result = super.codeGeneration({ moduleGraph, chunkGraph, runtimeTemplate });
22
+ const originSource = result.sources.get('javascript');
23
+ const newSources = new webpack_sources_1.ConcatSource(originSource);
24
+ const runtimeRequirements = new Set([
25
+ RuntimeGlobals.definePropertyGetters,
26
+ RuntimeGlobals.hasOwnProperty,
27
+ RuntimeGlobals.exports
28
+ ]);
29
+ const getters = [];
30
+ for (const block of this.blocks) {
31
+ const { dependencies } = block;
32
+ const modules = dependencies.map(dependency => {
33
+ const dep = dependency;
34
+ return {
35
+ name: dep.exposedName,
36
+ module: moduleGraph.getModule(dep),
37
+ request: dep.userRequest
38
+ };
39
+ });
40
+ const str = `return ${runtimeTemplate.returningFunction(`(${modules
41
+ .map(({ module, request }) => runtimeTemplate.moduleRaw({
42
+ module,
43
+ chunkGraph,
44
+ request,
45
+ weak: false,
46
+ runtimeRequirements
47
+ }))
48
+ .join(', ')})`)};`;
49
+ getters.push(`${JSON.stringify(modules[0].name)}: ${runtimeTemplate.basicFunction('', str)}`);
50
+ }
51
+ const res = Template.asString([
52
+ '\n',
53
+ 'var taroModuleMap = {',
54
+ Template.indent(getters.join(',\n')),
55
+ '};',
56
+ `var taroGet = ${runtimeTemplate.basicFunction('module', [
57
+ 'return taroModuleMap[module]();'
58
+ ])};`,
59
+ '__webpack_require__.taro(taroGet);'
60
+ ]);
61
+ newSources.add(res);
62
+ result.sources.set('javascript', newSources);
63
+ return result;
64
+ }
65
+ }
66
+ exports.default = TaroContainerEntryModule;
67
+ webpack_1.default.util.serialization.register(TaroContainerEntryModule, '@tarojs/webpack5-runner/dist/prebundle/TaroContainerEntryModule', 'TaroContainerEntryModule', {
68
+ serialize(obj, context) {
69
+ obj.serialize(context);
70
+ },
71
+ deserialize(context) {
72
+ const { read } = context;
73
+ const obj = new TaroContainerEntryModule(read(), read(), read());
74
+ obj.deserialize(context);
75
+ return obj;
76
+ }
77
+ });
78
+ //# sourceMappingURL=TaroContainerEntryModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaroContainerEntryModule.js","sourceRoot":"","sources":["../../src/webpack/TaroContainerEntryModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Compilation } from 'webpack';
2
+ declare const ContainerEntryModuleFactory: any;
3
+ export default class TaroContainerEntryModuleFactory extends ContainerEntryModuleFactory implements MapValue<Compilation['dependencyFactories']> {
4
+ create(data: any, callback: any): void;
5
+ }
6
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const TaroContainerEntryModule_1 = __importDefault(require("./TaroContainerEntryModule"));
7
+ const ContainerEntryModuleFactory = require('webpack/lib/container/ContainerEntryModuleFactory');
8
+ class TaroContainerEntryModuleFactory extends ContainerEntryModuleFactory {
9
+ create(data, callback) {
10
+ const dep = data === null || data === void 0 ? void 0 : data.dependencies[0];
11
+ callback(null, {
12
+ module: new TaroContainerEntryModule_1.default(dep.name, dep.exposes, dep.shareScope)
13
+ });
14
+ }
15
+ }
16
+ exports.default = TaroContainerEntryModuleFactory;
17
+ //# sourceMappingURL=TaroContainerEntryModuleFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaroContainerEntryModuleFactory.js","sourceRoot":"","sources":["../../src/webpack/TaroContainerEntryModuleFactory.ts"],"names":[],"mappings":";;;;;AAEA,0FAAiE;AAEjE,MAAM,2BAA2B,GAAG,OAAO,CAAC,mDAAmD,CAAC,CAAA;AAEhG,MAAqB,+BAAgC,SAAQ,2BAA2B;IACtF,MAAM,CAAE,IAAI,EAAE,QAAQ;QACpB,MAAM,GAAG,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,CAAC,CAAC,CAAA;QACjC,QAAQ,CAAC,IAAI,EAAE;YACb,MAAM,EAAE,IAAI,kCAAwB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;SAC5E,CAAC,CAAA;IACJ,CAAC;CACF;AAPD,kDAOC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Modify from https://github.com/webpack/webpack/blob/main/lib/container/ContainerPlugin.js
3
+ * MIT License http://www.opensource.org/licenses/mit-license.php
4
+ * Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
5
+ */
6
+ import { Compiler } from 'webpack';
7
+ import ContainerPlugin from 'webpack/lib/container/ContainerPlugin';
8
+ interface IParams {
9
+ env: string;
10
+ runtimeRequirements?: Set<string>;
11
+ }
12
+ declare class TaroContainerPlugin extends ContainerPlugin {
13
+ private params;
14
+ runtimeRequirements: Exclude<IParams['runtimeRequirements'], undefined>;
15
+ constructor(options: any, params: IParams);
16
+ apply(compiler: Compiler): void;
17
+ /**
18
+ * 劫持 ContainerEntryDependency,把生成的 Module 替换为 TaroContainerEntryModule
19
+ * 目的是修改 remoteEntry.js 的 container module 输出:
20
+ * 1. 插入 taroModuleMap 把异步逻辑改为同步
21
+ * 2. 插入自动注册模块的逻辑
22
+ */
23
+ applyMiniApp(compiler: Compiler): void;
24
+ }
25
+ export default TaroContainerPlugin;
@@ -0,0 +1,77 @@
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 ContainerPlugin_1 = __importDefault(require("webpack/lib/container/ContainerPlugin"));
16
+ const TaroContainerEntryModuleFactory_1 = __importDefault(require("./TaroContainerEntryModuleFactory"));
17
+ const ContainerEntryDependency = require('webpack/lib/container/ContainerEntryDependency');
18
+ const PLUGIN_NAME = 'TaroContainerPlugin';
19
+ class TaroContainerPlugin extends ContainerPlugin_1.default {
20
+ constructor(options, params) {
21
+ super(options);
22
+ this.params = params;
23
+ this.runtimeRequirements = params.runtimeRequirements || new Set();
24
+ }
25
+ apply(compiler) {
26
+ switch (this.params.env) {
27
+ case 'h5':
28
+ super.apply(compiler);
29
+ break;
30
+ default:
31
+ this.applyMiniApp(compiler);
32
+ }
33
+ }
34
+ /**
35
+ * 劫持 ContainerEntryDependency,把生成的 Module 替换为 TaroContainerEntryModule
36
+ * 目的是修改 remoteEntry.js 的 container module 输出:
37
+ * 1. 插入 taroModuleMap 把异步逻辑改为同步
38
+ * 2. 插入自动注册模块的逻辑
39
+ */
40
+ applyMiniApp(compiler) {
41
+ super.apply(compiler);
42
+ compiler.hooks.thisCompilation.tap({
43
+ name: PLUGIN_NAME,
44
+ stage: 100
45
+ }, compilation => {
46
+ compilation.dependencyFactories.set(ContainerEntryDependency, new TaroContainerEntryModuleFactory_1.default());
47
+ /**
48
+ * 收集打包 Remote 应用时使用到的 Webpack runtime 工具函数。
49
+ * 因为小程序中 Remote 应用也使用 Host 应用的 runtime,所以
50
+ * Host 应用的 Webpack runtime 需要增加上 Remote 应用使用到的工具函数。
51
+ */
52
+ compilation.hooks.afterRuntimeRequirements.tap(PLUGIN_NAME, () => {
53
+ const chunkGraphEntries = compilation._getChunkGraphEntries();
54
+ for (const chunk of chunkGraphEntries) {
55
+ if (chunk.name === 'runtime') {
56
+ const chunkGraph = compilation.chunkGraph;
57
+ const cgc = chunkGraph._getChunkGraphChunk(chunk);
58
+ const runtimeRequirements = cgc.runtimeRequirementsInTree;
59
+ runtimeRequirements.forEach(item => this.runtimeRequirements.add(item));
60
+ }
61
+ }
62
+ });
63
+ /**
64
+ * 删除多余的 assets
65
+ * - entry chunk
66
+ * - remote runtime chunk
67
+ */
68
+ compilation.hooks.processAssets.tapAsync(PLUGIN_NAME, (assets, callback) => __awaiter(this, void 0, void 0, function* () {
69
+ delete assets['main.js'];
70
+ delete assets['runtime.js'];
71
+ callback();
72
+ }));
73
+ });
74
+ }
75
+ }
76
+ exports.default = TaroContainerPlugin;
77
+ //# sourceMappingURL=TaroContainerPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaroContainerPlugin.js","sourceRoot":"","sources":["../../src/webpack/TaroContainerPlugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAMA,4FAAmE;AAEnE,wGAA+E;AAE/E,MAAM,wBAAwB,GAAG,OAAO,CAAC,gDAAgD,CAAC,CAAA;AAE1F,MAAM,WAAW,GAAG,qBAAqB,CAAA;AAOzC,MAAM,mBAAoB,SAAQ,yBAAe;IAG/C,YAAa,OAAO,EAAU,MAAe;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAA;QADc,WAAM,GAAN,MAAM,CAAS;QAE3C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,GAAG,EAAE,CAAA;IACpE,CAAC;IAED,KAAK,CAAE,QAAkB;QACvB,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACvB,KAAK,IAAI;gBACP,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACrB,MAAK;YACP;gBACE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;SAC9B;IACH,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAE,QAAkB;QAC9B,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACrB,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAChC;YACE,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,GAAG;SACX,EACD,WAAW,CAAC,EAAE;YACZ,WAAW,CAAC,mBAAmB,CAAC,GAAG,CACjC,wBAAwB,EACxB,IAAI,yCAA+B,EAAE,CACtC,CAAA;YAED;;;;eAIG;YACH,WAAW,CAAC,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAC5C,WAAW,EACX,GAAG,EAAE;gBACH,MAAM,iBAAiB,GAAI,WAAmB,CAAC,qBAAqB,EAAE,CAAA;gBACtE,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE;oBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;wBAC5B,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAA;wBACzC,MAAM,GAAG,GAAI,UAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;wBAC1D,MAAM,mBAAmB,GAAG,GAAG,CAAC,yBAAyB,CAAA;wBACzD,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;qBACxE;iBACF;YACH,CAAC,CACF,CAAA;YAED;;;;eAIG;YACH,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CACtC,WAAW,EACX,CAAO,MAAM,EAAE,QAAa,EAAE,EAAE;gBAC9B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;gBACxB,OAAO,MAAM,CAAC,YAAY,CAAC,CAAA;gBAC3B,QAAQ,EAAE,CAAA;YACZ,CAAC,CAAA,CACF,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC;CACF;AAED,kBAAe,mBAAmB,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { Compiler } from 'webpack';
2
+ import ContainerReferencePlugin from 'webpack/lib/container/ContainerReferencePlugin';
3
+ import type { ContainerReferencePluginOptions } from 'webpack/types';
4
+ import { CollectedDeps } from '../utils/constant';
5
+ declare type MFOptions = Partial<ContainerReferencePluginOptions>;
6
+ interface IParams {
7
+ deps: CollectedDeps;
8
+ env: string;
9
+ remoteAssets?: Record<'name', string>[];
10
+ runtimeRequirements: Set<string>;
11
+ }
12
+ export default class TaroContainerReferencePlugin extends ContainerReferencePlugin {
13
+ private params;
14
+ private deps;
15
+ private remoteAssets;
16
+ private remoteName;
17
+ private remoteConfig;
18
+ private runtimeRequirements;
19
+ protected _remoteType?: ContainerReferencePluginOptions['remoteType'];
20
+ protected _remotes: any;
21
+ constructor(options: MFOptions, params: IParams);
22
+ apply(compiler: Compiler): void;
23
+ applyWebApp(compiler: Compiler): void;
24
+ applyMiniApp(compiler: Compiler): void;
25
+ }
26
+ export {};
@@ -0,0 +1,187 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ /**
30
+ * Modify from https://github.com/webpack/webpack/blob/main/lib/container/ContainerReferencePlugin.js
31
+ * MIT License http://www.opensource.org/licenses/mit-license.php
32
+ * Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
33
+ */
34
+ const helper_1 = require("@tarojs/helper");
35
+ const webpack_1 = __importStar(require("webpack"));
36
+ const ContainerReferencePlugin_1 = __importDefault(require("webpack/lib/container/ContainerReferencePlugin"));
37
+ const RemoteModule_1 = __importDefault(require("webpack/lib/container/RemoteModule"));
38
+ const webpack_sources_1 = require("webpack-sources");
39
+ const utils_1 = require("../utils");
40
+ const constant_1 = require("../utils/constant");
41
+ const TaroRemoteRuntimeModule_1 = __importDefault(require("./TaroRemoteRuntimeModule"));
42
+ const ExternalsPlugin = require('webpack/lib/ExternalsPlugin');
43
+ const FallbackDependency = require('webpack/lib/container/FallbackDependency');
44
+ const FallbackItemDependency = require('webpack/lib/container/FallbackItemDependency');
45
+ const FallbackModuleFactory = require('webpack/lib/container/FallbackModuleFactory');
46
+ const RemoteToExternalDependency = require('webpack/lib/container/RemoteToExternalDependency');
47
+ const PLUGIN_NAME = 'TaroContainerReferencePlugin';
48
+ const slashCode = '/'.charCodeAt(0);
49
+ class TaroContainerReferencePlugin extends ContainerReferencePlugin_1.default {
50
+ constructor(options, params) {
51
+ super(options);
52
+ this.params = params;
53
+ const { remotes = {} } = options;
54
+ const remoteName = Object.keys(remotes)[0] || constant_1.MF_NAME;
55
+ const [, remoteConfig] = this._remotes.find(([key, config]) => key === remoteName && config) || [this.remoteName, { external: [], shareScope: 'default' }];
56
+ this.deps = params.deps;
57
+ this.remoteAssets = params.remoteAssets || [];
58
+ this.remoteName = remoteName;
59
+ this.remoteConfig = remoteConfig;
60
+ this.runtimeRequirements = params.runtimeRequirements;
61
+ }
62
+ apply(compiler) {
63
+ switch (this.params.env) {
64
+ case 'h5':
65
+ this.applyWebApp(compiler);
66
+ break;
67
+ default:
68
+ this.applyMiniApp(compiler);
69
+ }
70
+ }
71
+ applyWebApp(compiler) {
72
+ const { _remotes: remotes, _remoteType: remoteType } = this;
73
+ const remoteExternals = {};
74
+ for (const [key, config] of remotes) {
75
+ let i = 0;
76
+ for (const external of config.external) {
77
+ if (external.startsWith('internal '))
78
+ continue;
79
+ remoteExternals[`webpack/container/reference/${key}${i ? `/fallback-${i}` : ''}`] = external;
80
+ i++;
81
+ }
82
+ }
83
+ new ExternalsPlugin(remoteType, remoteExternals).apply(compiler);
84
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => {
85
+ compilation.dependencyFactories.set(RemoteToExternalDependency, normalModuleFactory);
86
+ compilation.dependencyFactories.set(FallbackItemDependency, normalModuleFactory);
87
+ compilation.dependencyFactories.set(FallbackDependency, new FallbackModuleFactory());
88
+ /**
89
+ * 把预编译的依赖改为 Remote module 的形式
90
+ * 例如把 import '@tarojs/taro' 改为 import '[remote]/@tarojs/taro'
91
+ */
92
+ normalModuleFactory.hooks.factorize.tap(PLUGIN_NAME, data => {
93
+ if (!data.request.includes('!')) {
94
+ for (const [key, config] of remotes) {
95
+ if (data.request.startsWith(`${key}`) && (data.request.length === key.length || data.request.charCodeAt(key.length) === slashCode)) {
96
+ return new RemoteModule_1.default(data.request, config.external.map((external, i) => external.startsWith('internal ') ? external.slice(9) : `webpack/container/reference/${key}${i ? `/fallback-${i}` : ''}`), `.${data.request.slice(key.length)}`, config.shareScope);
97
+ }
98
+ }
99
+ const [key, config] = [this.remoteName, this.remoteConfig];
100
+ for (const dep of this.deps.keys()) {
101
+ if (data.request === dep || data.request === '@tarojs/runtime') {
102
+ const externalList = typeof config.external === 'string' ? [config.external] : config.external;
103
+ return new RemoteModule_1.default(`${key}/${data.request}`, externalList.map((external, i) => external.startsWith('internal ')
104
+ ? external.slice(9)
105
+ : `webpack/container/reference/${key}${i ? `/fallback-${i}` : ''}`), `./${data.request}`, config.shareScope || 'default' // share scope
106
+ );
107
+ }
108
+ }
109
+ }
110
+ });
111
+ compilation.hooks.runtimeRequirementInTree
112
+ .for(webpack_1.RuntimeGlobals.ensureChunkHandlers)
113
+ .tap(PLUGIN_NAME, (chunk, set) => {
114
+ set.add(webpack_1.RuntimeGlobals.module);
115
+ set.add(webpack_1.RuntimeGlobals.moduleFactoriesAddOnly);
116
+ set.add(webpack_1.RuntimeGlobals.hasOwnProperty);
117
+ set.add(webpack_1.RuntimeGlobals.initializeSharing);
118
+ set.add(webpack_1.RuntimeGlobals.shareScopeMap);
119
+ compilation.addRuntimeModule(chunk, new TaroRemoteRuntimeModule_1.default(this.params.env));
120
+ });
121
+ });
122
+ }
123
+ applyMiniApp(compiler) {
124
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => {
125
+ /**
126
+ * 把预编译的依赖改为 Remote module 的形式
127
+ * 例如把 import '@tarojs/taro' 改为 import '[remote]/@tarojs/taro'
128
+ */
129
+ const [key, config] = this._remotes.find(([key, config]) => key === this.remoteName && config) || { external: [], shareScope: 'default' };
130
+ normalModuleFactory.hooks.factorize.tap(PLUGIN_NAME, data => {
131
+ if (!data.request.includes('!')) {
132
+ for (const dep of this.deps.keys()) {
133
+ if (data.request === dep || data.request === '@tarojs/runtime') {
134
+ return new RemoteModule_1.default(data.request, config.external.map((external, i) => external.startsWith('internal ')
135
+ ? external.slice(9)
136
+ : `webpack/container/reference/${key}${i ? `/fallback-${i}` : ''}`), `./${data.request}`, config.shareScope // share scope
137
+ );
138
+ }
139
+ }
140
+ }
141
+ });
142
+ /**
143
+ * 修改 webpack runtime
144
+ * 1. 注入一些 webpack 内置的工具函数(remote 打包时注入了,而 host 里没有,需要补全,后续改为自动补全)
145
+ * 2. 修改 webpack/runtime/remotes 模块的输出
146
+ * a) 生成 id 映射对象 idToExternalAndNameMapping
147
+ * b) 插入自动注册模块的逻辑
148
+ */
149
+ compilation.hooks.additionalTreeRuntimeRequirements.tap(PLUGIN_NAME, (chunk, set) => {
150
+ // webpack runtime 增加 Remote runtime 使用到的工具函数
151
+ this.runtimeRequirements.forEach(item => set.add(item));
152
+ compilation.addRuntimeModule(chunk, new TaroRemoteRuntimeModule_1.default(this.params.env));
153
+ });
154
+ /**
155
+ * 在 dist/app.js 头部注入 require,
156
+ * 依赖所有的预编译 chunk 和 remoteEntry
157
+ */
158
+ const hooks = webpack_1.default.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation);
159
+ hooks.render.tap(PLUGIN_NAME, (modules, { chunk }) => {
160
+ var _a;
161
+ const chunkEntryModule = (0, utils_1.getChunkEntryModule)(compilation, chunk);
162
+ if (chunkEntryModule) {
163
+ const entryModule = (_a = chunkEntryModule.rootModule) !== null && _a !== void 0 ? _a : chunkEntryModule;
164
+ if (entryModule.miniType === helper_1.META_TYPE.ENTRY) {
165
+ return (0, utils_1.addRequireToSource)((0, utils_1.getChunkIdOrName)(chunk), modules, this.remoteAssets);
166
+ }
167
+ return modules;
168
+ }
169
+ else {
170
+ return modules;
171
+ }
172
+ });
173
+ /**
174
+ * 模块 "webpack/container/reference/[remote]" 用于网络加载 remoteEntry.js,
175
+ * 在小程序环境则不需要了,因此将模块输出改为空字符串,减少不必要的代码
176
+ */
177
+ hooks.renderModuleContent.tap(PLUGIN_NAME, (source, module) => {
178
+ if (module.userRequest === `webpack/container/reference/${this.remoteName}`) {
179
+ return new webpack_sources_1.RawSource('');
180
+ }
181
+ return source;
182
+ });
183
+ });
184
+ }
185
+ }
186
+ exports.default = TaroContainerReferencePlugin;
187
+ //# sourceMappingURL=TaroContainerReferencePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaroContainerReferencePlugin.js","sourceRoot":"","sources":["../../src/webpack/TaroContainerReferencePlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Compiler } from 'webpack';
2
+ import ModuleFederationPlugin from 'webpack/lib/container/ModuleFederationPlugin';
3
+ import type { ModuleFederationPluginOptions } from 'webpack/types';
4
+ import { CollectedDeps } from '../utils/constant';
5
+ interface IParams {
6
+ deps: CollectedDeps;
7
+ env: string;
8
+ remoteAssets?: Record<'name', string>[];
9
+ runtimeRequirements: Set<string>;
10
+ }
11
+ export default class TaroModuleFederationPlugin extends ModuleFederationPlugin {
12
+ private params;
13
+ private deps;
14
+ private remoteAssets;
15
+ private runtimeRequirements;
16
+ protected _options: ModuleFederationPluginOptions;
17
+ constructor(options: ModuleFederationPluginOptions, params: IParams);
18
+ /** Apply the plugin */
19
+ apply(compiler: Compiler): void;
20
+ }
21
+ export {};
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * Modify from https://github.com/webpack/webpack/blob/main/lib/container/ModuleFederationPlugin.js
8
+ * MIT License http://www.opensource.org/licenses/mit-license.php
9
+ * Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
10
+ */
11
+ const lodash_1 = __importDefault(require("lodash"));
12
+ const webpack_1 = require("webpack");
13
+ const ModuleFederationPlugin_1 = __importDefault(require("webpack/lib/container/ModuleFederationPlugin"));
14
+ const ExternalsType_check_js_1 = __importDefault(require("webpack/schemas/plugins/container/ExternalsType.check.js"));
15
+ const TaroContainerPlugin_1 = __importDefault(require("./TaroContainerPlugin"));
16
+ const TaroContainerReferencePlugin_1 = __importDefault(require("./TaroContainerReferencePlugin"));
17
+ const { SharePlugin } = webpack_1.sharing;
18
+ const PLUGIN_NAME = 'TaroModuleFederationPlugin';
19
+ class TaroModuleFederationPlugin extends ModuleFederationPlugin_1.default {
20
+ constructor(options, params) {
21
+ super(options);
22
+ this.params = params;
23
+ this.deps = params.deps;
24
+ this.remoteAssets = params.remoteAssets || [];
25
+ this.runtimeRequirements = params.runtimeRequirements;
26
+ }
27
+ /** Apply the plugin */
28
+ apply(compiler) {
29
+ const { _options: options } = this;
30
+ const library = options.library || { type: 'var', name: options.name };
31
+ const remoteType = options.remoteType ||
32
+ (options.library && (0, ExternalsType_check_js_1.default)(options.library.type)
33
+ ? options.library.type
34
+ : 'script');
35
+ const enabledLibraryTypes = compiler.options.output.enabledLibraryTypes;
36
+ if (library && !(enabledLibraryTypes === null || enabledLibraryTypes === void 0 ? void 0 : enabledLibraryTypes.includes(library.type))) {
37
+ enabledLibraryTypes === null || enabledLibraryTypes === void 0 ? void 0 : enabledLibraryTypes.push(library.type);
38
+ }
39
+ compiler.hooks.afterPlugins.tap(PLUGIN_NAME, () => {
40
+ const { exposes, filename, name, remotes = [], runtime, shared, shareScope } = options;
41
+ if (!lodash_1.default.isEmpty(exposes)) {
42
+ new TaroContainerPlugin_1.default({
43
+ name,
44
+ library,
45
+ filename,
46
+ runtime,
47
+ exposes
48
+ }, {
49
+ env: this.params.env,
50
+ runtimeRequirements: this.runtimeRequirements
51
+ }).apply(compiler);
52
+ }
53
+ if (!lodash_1.default.isEmpty(remotes)) {
54
+ const opt = {
55
+ remoteType,
56
+ remotes
57
+ };
58
+ new TaroContainerReferencePlugin_1.default(opt, {
59
+ deps: this.deps,
60
+ env: this.params.env,
61
+ remoteAssets: this.remoteAssets,
62
+ runtimeRequirements: this.runtimeRequirements
63
+ }).apply(compiler);
64
+ }
65
+ if (shared) {
66
+ new SharePlugin({
67
+ shared,
68
+ shareScope
69
+ }).apply(compiler);
70
+ }
71
+ });
72
+ }
73
+ }
74
+ exports.default = TaroModuleFederationPlugin;
75
+ //# sourceMappingURL=TaroModuleFederationPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaroModuleFederationPlugin.js","sourceRoot":"","sources":["../../src/webpack/TaroModuleFederationPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ChunkGraph, Compilation, RuntimeModule } from 'webpack';
2
+ export default class TaroRemoteRuntimeModule extends RuntimeModule {
3
+ private env;
4
+ compilation: Compilation;
5
+ chunkGraph: ChunkGraph;
6
+ constructor(env: string);
7
+ getDepsMap(): {
8
+ chunkToRemotesMapping: Record<string | number, (string | number)[]>;
9
+ idToExternalAndNameMapping: {};
10
+ };
11
+ generate(): string;
12
+ generateWeb(): string;
13
+ generateMini(): string;
14
+ }