@taro-minify-pack/plugin-async-pack 0.0.5-alpha.7 → 0.0.5

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 (42) hide show
  1. package/README.md +11 -44
  2. package/dist/index.js +14 -45
  3. package/dist/index.js.map +1 -1
  4. package/dist/merge-output.d.ts +12 -0
  5. package/dist/merge-output.js +26 -0
  6. package/dist/merge-output.js.map +1 -0
  7. package/dist/transform-app-config.d.ts +0 -1
  8. package/dist/transform-app-config.js +2 -5
  9. package/dist/transform-app-config.js.map +1 -1
  10. package/dist/transform-app-stylesheet.d.ts +6 -0
  11. package/dist/transform-app-stylesheet.js +14 -0
  12. package/dist/transform-app-stylesheet.js.map +1 -0
  13. package/dist/transform-webpack-runtime.js +4 -46
  14. package/dist/transform-webpack-runtime.js.map +1 -1
  15. package/dist/types.d.ts +0 -1
  16. package/dist/utils.d.ts +0 -4
  17. package/dist/utils.js +1 -15
  18. package/dist/utils.js.map +1 -1
  19. package/package.json +1 -5
  20. package/src/index.ts +13 -50
  21. package/src/merge-output.ts +33 -0
  22. package/src/transform-app-config.ts +1 -8
  23. package/src/transform-app-stylesheet.ts +17 -0
  24. package/src/transform-webpack-runtime.ts +6 -56
  25. package/src/types.ts +0 -1
  26. package/src/utils.ts +0 -10
  27. package/dist/inject-style-component.d.ts +0 -14
  28. package/dist/inject-style-component.js +0 -62
  29. package/dist/inject-style-component.js.map +0 -1
  30. package/dist/singleton-promise.d.ts +0 -16
  31. package/dist/singleton-promise.js +0 -46
  32. package/dist/singleton-promise.js.map +0 -1
  33. package/dist/transform-pages-wxml.d.ts +0 -7
  34. package/dist/transform-pages-wxml.js +0 -31
  35. package/dist/transform-pages-wxml.js.map +0 -1
  36. package/dist/transform-specifier-with-source.d.ts +0 -16
  37. package/dist/transform-specifier-with-source.js +0 -139
  38. package/dist/transform-specifier-with-source.js.map +0 -1
  39. package/src/inject-style-component.ts +0 -70
  40. package/src/singleton-promise.ts +0 -52
  41. package/src/transform-pages-wxml.ts +0 -35
  42. package/src/transform-specifier-with-source.ts +0 -142
@@ -0,0 +1,33 @@
1
+ import { Compiler, Compilation } from 'webpack'
2
+
3
+ export const PLUGIN_NAME = 'MergeOutput'
4
+
5
+ interface MergeOutputOpt {
6
+ test: (assetName: string) => boolean,
7
+ outputFile: string,
8
+ }
9
+
10
+ export class MergeOutputPlugin {
11
+ private readonly opts: MergeOutputOpt
12
+
13
+ constructor (opts: MergeOutputOpt) {
14
+ this.opts = opts
15
+ }
16
+
17
+ apply (compiler: Compiler) {
18
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation: Compilation) => {
19
+ const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL // 最早阶段,在优化前
20
+
21
+ compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, (assets) => {
22
+ const mergedResult = Object.keys(assets).reduce((result, item) => {
23
+ if (!this.opts.test(item)) return result
24
+ const code = assets[item].source().toString()
25
+ delete assets[item]
26
+ return result + code + '\n'
27
+ }, '')
28
+
29
+ compilation.assets[this.opts.outputFile!] = new compiler.webpack.sources.RawSource(mergedResult)
30
+ })
31
+ })
32
+ }
33
+ }
@@ -4,13 +4,12 @@ import { generateDynamicPackageName } from './utils'
4
4
 
5
5
  interface Opts extends AsyncPackOpts {
6
6
  assets: Record<string, RawSource>
7
- asyncComponents: Record<string, string>
8
7
  }
9
8
 
10
9
  const appConfigAssetKey = 'app.json'
11
10
 
12
11
  export const transformAppConfig = (opts: Opts) => {
13
- const { dynamicPackageCount, asyncComponents, assets } = opts
12
+ const { dynamicPackageCount, assets } = opts
14
13
 
15
14
  const curAppConfig = JSON.parse(assets[appConfigAssetKey].source() as string)
16
15
 
@@ -22,14 +21,8 @@ export const transformAppConfig = (opts: Opts) => {
22
21
  return { root: generateDynamicPackageName({ ...opts, order }), pages: [] }
23
22
  })
24
23
 
25
- const asyncComponentPlaceholder = Object.keys(asyncComponents).reduce((result, item) => {
26
- return { ...result, [item]: 'block' }
27
- }, {})
28
-
29
24
  const finalAppConfig = {
30
25
  ...otherAppJSON,
31
- usingComponents: { ...usingComponents, ...asyncComponents },
32
- componentPlaceholder: { ...componentPlaceholder, ...asyncComponentPlaceholder },
33
26
  subPackages: [...finalSubPackages, ...dynamicPackagesConfigs],
34
27
  resolveAlias: { ...resolveAlias, '~/*': '/*' }
35
28
  }
@@ -0,0 +1,17 @@
1
+ import type { CompilationAssets, AsyncPackOpts } from './types'
2
+
3
+ interface Opts extends AsyncPackOpts {
4
+ assets: CompilationAssets;
5
+ }
6
+
7
+ export const transformAppStylesheet = (code: string, opts: Opts) => {
8
+ const { dynamicPackageNamePrefix, assets } = opts
9
+
10
+ const isDynamicModuleStyleFileExist = Object.keys(assets).some(assetName => {
11
+ return new RegExp(`${dynamicPackageNamePrefix}\\.wxss`).test(assetName)
12
+ })
13
+
14
+ if (!isDynamicModuleStyleFileExist) return code
15
+
16
+ return code.concat(`@import './${dynamicPackageNamePrefix}.wxss';`)
17
+ }
@@ -5,11 +5,7 @@ import traverse from '@babel/traverse'
5
5
  import * as types from '@babel/types'
6
6
  import type {
7
7
  AssignmentExpression,
8
- ObjectMethod,
9
- ObjectProperty,
10
- SpreadElement,
11
- Statement, UnaryExpression,
12
- VariableDeclarator
8
+ Statement, UnaryExpression
13
9
  } from '@babel/types'
14
10
  import type { CompilationAssets, AsyncPackOpts } from './types'
15
11
  import { isDynamicPackageJsAsset } from './utils'
@@ -104,20 +100,11 @@ const replaceWebpackLoadScriptFn = (assignmentExpressionNodePath: NodePath<Assig
104
100
 
105
101
  const webpackLoadDynamicStylesheetTemplate = `
106
102
  !function () {
107
- var loadStylesheet = function (chunkId) {
108
- const href = __webpack_require__.miniCssF(chunkId);
109
- const fullHref = __webpack_require__.p + href;
110
- const dynamicPackageNameRegex = DYNAMIC_PACKAGE_NAME_REGEX;
111
- const [,dynamicPackageName] = fullHref.match(dynamicPackageNameRegex) || [];
112
- const { SingletonPromise } = require('~/singleton-promise.js');
113
- return SingletonPromise.wait({ dynamicPackageName })
103
+ var loadStylesheet = function (_chunkId) {
104
+ return Promise.resolve()
114
105
  }
115
- var installedCssChunks = INSTALLED_CSS_CHUNKS;
116
106
  __webpack_require__.f.miniCss = function (dynamicStylesheetChunkId, promises) {
117
- var cssChunks = CSS_CHUNKS;
118
- if (installedCssChunks[dynamicStylesheetChunkId] !== 0 && cssChunks[dynamicStylesheetChunkId]) {
119
- promises.push(loadStylesheet(dynamicStylesheetChunkId));
120
- }
107
+ promises.push(loadStylesheet(dynamicStylesheetChunkId));
121
108
  };
122
109
  }();
123
110
  `
@@ -149,42 +136,9 @@ const replaceWebpackLoadDynamicModuleStylesheetFn = (path: NodePath<UnaryExpress
149
136
 
150
137
  if (!needProcessed) return
151
138
 
152
- const installedCssChunksValueAst : Array<ObjectMethod | ObjectProperty | SpreadElement> = []
139
+ const templateCodeAst = template.ast(webpackLoadDynamicStylesheetTemplate)
153
140
 
154
- const cssChunksValueAst: Array<ObjectMethod | ObjectProperty | SpreadElement> = []
155
-
156
- path.traverse({
157
- VariableDeclarator: (nodePath: NodePath<VariableDeclarator>) => {
158
- const { id, init } = nodePath.node || {}
159
- if (!types.isObjectExpression(init)) return
160
- if (types.isIdentifier(id, { name: 'cssChunks' })) cssChunksValueAst.push(...init.properties)
161
- if (types.isIdentifier(id, { name: 'installedCssChunks' })) installedCssChunksValueAst.push(...init.properties)
162
- }
163
- })
164
-
165
- const { dynamicPackageNamePrefix } = opts
166
-
167
- const DYNAMIC_PACKAGE_NAME_REGEX = types.regExpLiteral(`(${dynamicPackageNamePrefix}(?:-[a-z]{2})?)\\/`)
168
-
169
- const INSTALLED_CSS_CHUNKS = types.objectExpression(installedCssChunksValueAst)
170
-
171
- const CSS_CHUNKS = types.objectExpression(cssChunksValueAst)
172
-
173
- const templateCodeAst = template.statement(webpackLoadDynamicStylesheetTemplate)({ CSS_CHUNKS, DYNAMIC_PACKAGE_NAME_REGEX, INSTALLED_CSS_CHUNKS })
174
-
175
- path.parentPath.replaceWith(templateCodeAst)
176
- }
177
-
178
- const removeCreateStylesheetFn = (nodePath: NodePath<VariableDeclarator>) => {
179
- const { id } = nodePath.node || {}
180
- if (!types.isIdentifier(id, { name: 'createStylesheet' })) return
181
- nodePath.remove()
182
- }
183
-
184
- const removeFindStylesheetFn = (nodePath: NodePath<VariableDeclarator>) => {
185
- const { id } = nodePath.node || {}
186
- if (!types.isIdentifier(id, { name: 'findStylesheet' })) return
187
- nodePath.remove()
141
+ path.parentPath.replaceWith(templateCodeAst as Statement)
188
142
  }
189
143
 
190
144
  export const transformWebpackRuntime = (code: string, opts: Opts) => {
@@ -195,10 +149,6 @@ export const transformWebpackRuntime = (code: string, opts: Opts) => {
195
149
  },
196
150
  AssignmentExpression: (nodePath: NodePath<AssignmentExpression>) => {
197
151
  replaceWebpackLoadScriptFn(nodePath, opts)
198
- },
199
- VariableDeclarator (nodePath: NodePath<VariableDeclarator>) {
200
- removeCreateStylesheetFn(nodePath)
201
- removeFindStylesheetFn(nodePath)
202
152
  }
203
153
  })
204
154
  return generator(ast).code
package/src/types.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { Source } from 'webpack-sources'
2
2
 
3
3
  export interface AsyncPackOpts {
4
- framework: 'react' | 'vue',
5
4
  dynamicPackageNamePrefix: string;
6
5
  dynamicPackageCount: number;
7
6
  }
package/src/utils.ts CHANGED
@@ -1,4 +1,3 @@
1
- import path from 'path'
2
1
  import { AsyncPackOpts } from './types'
3
2
 
4
3
  export const generateKeyByOrder = (order: number) => {
@@ -32,16 +31,7 @@ export const isDynamicPackageWXssAsset = (prefix: string, assetName: string) =>
32
31
  return dynamicWXssAssetRegExp.test(assetName)
33
32
  }
34
33
 
35
- export const isDynamicPackageWXssAssetWithOrder = (opt: AsyncPackOpts & { order?: number }, assetName: string) => {
36
- if (!isNumber(opt.order) || opt.dynamicPackageCount <= 1) return isDynamicPackageWXssAsset(opt.dynamicPackageNamePrefix, assetName)
37
- return new RegExp(`^${opt.dynamicPackageNamePrefix}-${generateKeyByOrder(opt.order!)}\\/.*\\.wxss$`).test(assetName)
38
- }
39
-
40
34
  export const generateDynamicPackageName = (opt: AsyncPackOpts & { order?: number }) => {
41
35
  if (!isNumber(opt.order) || opt.dynamicPackageCount <= 1) return opt.dynamicPackageNamePrefix
42
36
  return `${opt.dynamicPackageNamePrefix}-${generateKeyByOrder(opt.order!)}`
43
37
  }
44
-
45
- export const normalizeFileName = (fileName: string) => {
46
- return path.normalize(fileName).replace(/\\/g, '/')
47
- }
@@ -1,14 +0,0 @@
1
- import { Compiler } from 'webpack';
2
- import { AsyncPackOpts } from './types';
3
- export declare const PLUGIN_NAME = "InjectStyleComponent";
4
- export declare const InjectStyleComponentName = "inject-style";
5
- type Opt = AsyncPackOpts;
6
- export declare class InjectStyleComponentPlugin {
7
- private readonly opt;
8
- private readonly WXmlContent;
9
- private readonly JsonContent;
10
- private readonly JsContent;
11
- constructor(opt: Opt);
12
- apply(compiler: Compiler): void;
13
- }
14
- export {};
@@ -1,62 +0,0 @@
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
- exports.InjectStyleComponentPlugin = exports.InjectStyleComponentName = exports.PLUGIN_NAME = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- const template_1 = __importDefault(require("@babel/template"));
9
- const generator_1 = __importDefault(require("@babel/generator"));
10
- const utils_1 = require("./utils");
11
- exports.PLUGIN_NAME = 'InjectStyleComponent';
12
- exports.InjectStyleComponentName = 'inject-style';
13
- const injectStyleComponentCode = `
14
- const { SingletonPromise } = require('~/singleton-promise.js')
15
- Component({
16
- properties: {
17
- route: String,
18
- },
19
- lifetimes: {
20
- attached: function () {
21
- return SingletonPromise.loaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
22
- },
23
- detached: function () {
24
- return SingletonPromise.unloaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
25
- }
26
- }
27
- })
28
- `;
29
- class InjectStyleComponentPlugin {
30
- constructor(opt) {
31
- this.WXmlContent = '<block/>';
32
- this.JsonContent = '{"component": true,"styleIsolation": "shared"}';
33
- this.JsContent = injectStyleComponentCode;
34
- this.opt = opt;
35
- }
36
- apply(compiler) {
37
- compiler.hooks.compilation.tap(exports.PLUGIN_NAME, (compilation) => {
38
- const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL; // 最早阶段,在优化前
39
- compilation.hooks.processAssets.tap({ name: exports.PLUGIN_NAME, stage }, (assets) => {
40
- for (let order = 0; order < this.opt.dynamicPackageCount; order++) {
41
- const dynamicPackageName = (0, utils_1.generateDynamicPackageName)(Object.assign(Object.assign({}, this.opt), { order }));
42
- const { code: jsFileContent } = (0, generator_1.default)(template_1.default.program(this.JsContent)({ DYNAMIC_PACKAGE_NAME: dynamicPackageName }));
43
- const styleFileContent = Object.keys(assets).reduce((result, assetPath) => {
44
- if (!(0, utils_1.isDynamicPackageWXssAssetWithOrder)(Object.assign(Object.assign({}, this.opt), { order }), assetPath))
45
- return result;
46
- const relativePath = path_1.default.relative(dynamicPackageName, assetPath);
47
- const code = `@import './${relativePath}';`;
48
- return result + code + '\n';
49
- }, '');
50
- const { RawSource } = compiler.webpack.sources;
51
- const componentPath = `${dynamicPackageName}/${exports.InjectStyleComponentName}`;
52
- compilation.assets[`${componentPath}.js`] = new RawSource(jsFileContent);
53
- compilation.assets[`${componentPath}.wxss`] = new RawSource(styleFileContent);
54
- compilation.assets[`${componentPath}.wxml`] = new RawSource(this.WXmlContent);
55
- compilation.assets[`${componentPath}.json`] = new RawSource(this.JsonContent);
56
- }
57
- });
58
- });
59
- }
60
- }
61
- exports.InjectStyleComponentPlugin = InjectStyleComponentPlugin;
62
- //# sourceMappingURL=inject-style-component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inject-style-component.js","sourceRoot":"","sources":["../src/inject-style-component.ts"],"names":[],"mappings":";;;;;;AACA,gDAAuB;AAEvB,+DAAsC;AACtC,iEAAwC;AACxC,mCAAwF;AAE3E,QAAA,WAAW,GAAG,sBAAsB,CAAA;AAEpC,QAAA,wBAAwB,GAAG,cAAc,CAAA;AAEtD,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;CAehC,CAAA;AAID,MAAa,0BAA0B;IASrC,YAAa,GAAQ;QANJ,gBAAW,GAAW,UAAU,CAAA;QAEhC,gBAAW,GAAU,gDAAgD,CAAA;QAErE,cAAS,GAAW,wBAAwB,CAAA;QAG3D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAE,QAAkB;QACvB,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAW,EAAE,CAAC,WAAwB,EAAE,EAAE;YACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAA,CAAC,YAAY;YAEvF,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,mBAAW,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC3E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,CAAC;oBAClE,MAAM,kBAAkB,GAAG,IAAA,kCAA0B,kCAAM,IAAI,CAAC,GAAG,KAAE,KAAK,IAAG,CAAA;oBAE7E,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,IAAA,mBAAS,EAAC,kBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAA;oBACzH,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;wBACxE,IAAI,CAAC,IAAA,0CAAkC,kCAAM,IAAI,CAAC,GAAG,KAAE,KAAK,KAAI,SAAS,CAAC;4BAAE,OAAO,MAAM,CAAA;wBACzF,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;wBACjE,MAAM,IAAI,GAAG,cAAc,YAAY,IAAI,CAAA;wBAC3C,OAAO,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;oBAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;oBAEN,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAA;oBAC9C,MAAM,aAAa,GAAG,GAAG,kBAAkB,IAAI,gCAAwB,EAAE,CAAA;oBACzE,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAA;oBACxE,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAA;oBAC7E,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;oBAC7E,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC/E,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAvCD,gEAuCC"}
@@ -1,16 +0,0 @@
1
- interface Opt {
2
- dynamicPackageName: string;
3
- pageRoute: string;
4
- }
5
- export declare class SingletonPromise {
6
- private static instance?;
7
- private promise?;
8
- private resolve?;
9
- constructor();
10
- private resetPromise;
11
- static getInstance(opt: Pick<Opt, 'dynamicPackageName'>): Map<string, SingletonPromise>;
12
- static wait(opt: Pick<Opt, 'dynamicPackageName'>): Promise<(void | undefined)[]>;
13
- static loaded(opt: Opt): void;
14
- static unloaded(opt: Opt): void;
15
- }
16
- export {};
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SingletonPromise = void 0;
4
- class SingletonPromise {
5
- constructor() {
6
- this.resetPromise();
7
- }
8
- resetPromise() {
9
- this.promise = new Promise((resolve) => {
10
- this.resolve = resolve;
11
- });
12
- }
13
- static getInstance(opt) {
14
- const { dynamicPackageName } = opt;
15
- if (!SingletonPromise.instance)
16
- SingletonPromise.instance = new Map();
17
- if (!SingletonPromise.instance.has(dynamicPackageName))
18
- SingletonPromise.instance.set(dynamicPackageName, new Map());
19
- return SingletonPromise.instance.get(dynamicPackageName);
20
- }
21
- static wait(opt) {
22
- const instance = this.getInstance(opt);
23
- const currentPages = getCurrentPages();
24
- return Promise.all(currentPages.map(page => {
25
- var _a;
26
- if (!instance.has(page.route))
27
- instance.set(page.route, new SingletonPromise());
28
- return (_a = instance.get(page.route)) === null || _a === void 0 ? void 0 : _a.promise;
29
- }));
30
- }
31
- static loaded(opt) {
32
- var _a, _b;
33
- const { pageRoute } = opt;
34
- const instance = this.getInstance(opt);
35
- if (!instance.has(pageRoute))
36
- instance.set(pageRoute, new SingletonPromise());
37
- (_b = (_a = instance.get(pageRoute)) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);
38
- }
39
- static unloaded(opt) {
40
- const { pageRoute } = opt;
41
- const instance = this.getInstance(opt);
42
- instance.delete(pageRoute);
43
- }
44
- }
45
- exports.SingletonPromise = SingletonPromise;
46
- //# sourceMappingURL=singleton-promise.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"singleton-promise.js","sourceRoot":"","sources":["../src/singleton-promise.ts"],"names":[],"mappings":";;;AAKA,MAAa,gBAAgB;IAQ3B;QACE,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAE,GAAoC;QACtD,MAAM,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAA;QAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ;YAAE,gBAAgB,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;QACrE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACpH,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAE,CAAA;IAC3D,CAAC;IAED,MAAM,CAAC,IAAI,CAAE,GAAoC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAA;YAC/E,OAAO,MAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,0CAAE,OAAO,CAAA;QAC1C,CAAC,CAAC,CAAC,CAAA;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAE,GAAQ;;QACrB,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAA;QAC7E,MAAA,MAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,OAAO,kDAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAE,GAAQ;QACvB,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;CACF;AA9CD,4CA8CC"}
@@ -1,7 +0,0 @@
1
- import { RawSource } from 'webpack-sources';
2
- interface Opts {
3
- assets: Record<string, RawSource>;
4
- asyncComponents: Record<string, string>;
5
- }
6
- export declare const transformPagesWXml: (opts: Opts) => void;
7
- export {};
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformPagesWXml = void 0;
4
- const webpack_sources_1 = require("webpack-sources");
5
- const appConfigAssetKey = 'app.json';
6
- const transformPagesWXml = (opts) => {
7
- const { assets, asyncComponents } = opts;
8
- const curAppConfig = JSON.parse(assets[appConfigAssetKey].source());
9
- const pageWXmlPaths = (() => {
10
- var _a;
11
- const { pages = [], subpackages, subPackages, tabBar } = curAppConfig;
12
- const tabBarPagePaths = ((_a = tabBar === null || tabBar === void 0 ? void 0 : tabBar.list) === null || _a === void 0 ? void 0 : _a.map((item) => item.pagePath)) || [];
13
- const curSubPackages = subPackages || subpackages || [];
14
- const subPackagePagePaths = curSubPackages.reduce((result, item) => {
15
- const subPackagePagePath = item.root || '';
16
- return [...result, ...(item.pages || []).map((page) => `${subPackagePagePath}/${page}`)];
17
- }, []);
18
- return [...pages, ...tabBarPagePaths, ...subPackagePagePaths].map((item) => `${item}.wxml`);
19
- })();
20
- Object.keys(assets).forEach((assetPath) => {
21
- if (!pageWXmlPaths.includes(assetPath))
22
- return;
23
- const source = assets[assetPath].source();
24
- const pageRoute = assetPath.replace(/\.wxml$/, '');
25
- const asyncComponentCode = Object.keys(asyncComponents).map((item) => `<${item} route="${pageRoute}"/>`);
26
- const tempCode = [source, ...asyncComponentCode].join('\n');
27
- assets[assetPath] = new webpack_sources_1.RawSource(tempCode);
28
- });
29
- };
30
- exports.transformPagesWXml = transformPagesWXml;
31
- //# sourceMappingURL=transform-pages-wxml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform-pages-wxml.js","sourceRoot":"","sources":["../src/transform-pages-wxml.ts"],"names":[],"mappings":";;;AACA,qDAA2C;AAO3C,MAAM,iBAAiB,GAAG,UAAU,CAAA;AAE7B,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC/C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAExC,MAAM,YAAY,GAAc,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAY,CAAC,CAAA;IAExF,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE;;QAC1B,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,CAAA;QACrE,MAAM,eAAe,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAI,EAAE,CAAA;QACxE,MAAM,cAAc,GAAG,WAAW,IAAI,WAAW,IAAI,EAAE,CAAA;QACvD,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAC3E,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;YAC1C,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,kBAAkB,IAAI,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1F,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,eAAe,EAAE,GAAG,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,CAAA;IAC7F,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAM;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAY,CAAA;QACnD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAClD,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,WAAW,SAAS,KAAK,CAAC,CAAA;QACxG,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,2BAAS,CAAC,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAxBY,QAAA,kBAAkB,sBAwB9B"}
@@ -1,16 +0,0 @@
1
- import { PluginObj, PluginPass } from '@babel/core';
2
- interface ModuleReference {
3
- source: string;
4
- specifier: string;
5
- }
6
- interface Opts {
7
- original: ModuleReference;
8
- transformed: ModuleReference;
9
- }
10
- interface State extends PluginPass {
11
- opts: Opts;
12
- namespaces: Set<string>;
13
- bindings: Set<string>;
14
- }
15
- declare const _default: () => PluginObj<State>;
16
- export default _default;
@@ -1,139 +0,0 @@
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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const types = __importStar(require("@babel/types"));
37
- const utils_1 = require("./utils");
38
- exports.default = () => {
39
- return {
40
- visitor: {
41
- Program: {
42
- enter(programPath, state) {
43
- const { filename = '', opts } = state;
44
- if (new RegExp(opts.transformed.source).test((0, utils_1.normalizeFileName)(filename)))
45
- return;
46
- state.namespaces = new Set();
47
- state.bindings = new Set();
48
- programPath.traverse({
49
- ImportDeclaration(path) {
50
- if (!types.isStringLiteral(path.node.source, { value: opts.original.source }))
51
- return;
52
- const { specifiers } = path.node;
53
- specifiers.forEach((spec) => {
54
- const { name } = spec.local;
55
- // import namespace from 'source'
56
- if (types.isImportDefaultSpecifier(spec))
57
- return state.namespaces.add(name);
58
- // import * as namespace from 'source'
59
- if (types.isImportNamespaceSpecifier(spec))
60
- return state.namespaces.add(name);
61
- // import { specifier } from 'source'
62
- if (types.isImportSpecifier(spec) && types.isIdentifier(spec.imported, { name: opts.original.specifier })) {
63
- state.bindings.add(name);
64
- }
65
- });
66
- }
67
- });
68
- programPath.traverse({
69
- VariableDeclarator(path) {
70
- const { id, init } = path.node;
71
- // const alias = namespace.specifier
72
- if (types.isIdentifier(id)) {
73
- if (!types.isMemberExpression(init))
74
- return;
75
- if (!types.isIdentifier(init.object))
76
- return;
77
- if (!types.isIdentifier(init.property, { name: opts.original.specifier }))
78
- return;
79
- if (!state.namespaces.has(init.object.name))
80
- return;
81
- state.bindings.add(id.name);
82
- }
83
- // const { specifier: alias } = namespace;
84
- if (types.isObjectPattern(id) && types.isIdentifier(init)) {
85
- const { properties } = id;
86
- if (!state.namespaces.has(init.name))
87
- return;
88
- properties.forEach((prop) => {
89
- if (!types.isObjectProperty(prop))
90
- return;
91
- if (!types.isIdentifier(prop.key, { name: opts.original.specifier }))
92
- return;
93
- if (!types.isIdentifier(prop.value))
94
- return;
95
- state.bindings.add(prop.value.name);
96
- });
97
- }
98
- }
99
- });
100
- },
101
- exit(programPath, state) {
102
- const { filename = '', opts } = state;
103
- if (new RegExp(opts.transformed.source).test((0, utils_1.normalizeFileName)(filename)))
104
- return;
105
- let needInject = false;
106
- const transformedSpecifierId = programPath.scope.generateUidIdentifier(opts.transformed.specifier);
107
- programPath.traverse({
108
- CallExpression(path) {
109
- const { callee } = path.node;
110
- if (types.isMemberExpression(callee)) {
111
- if (!types.isIdentifier(callee.object))
112
- return;
113
- if (!state.namespaces.has(callee.object.name))
114
- return;
115
- if (!types.isIdentifier(callee.property, { name: 'lazy' }))
116
- return;
117
- path.node.callee = transformedSpecifierId;
118
- needInject = true;
119
- }
120
- if (types.isIdentifier(callee) && state.bindings.has(callee.name)) {
121
- path.node.callee = transformedSpecifierId;
122
- needInject = true;
123
- }
124
- }
125
- });
126
- const hasImport = programPath.node.body.some((node) => {
127
- return types.isImportDeclaration(node) && node.source.value === opts.transformed.source;
128
- });
129
- if (hasImport || !needInject)
130
- return;
131
- const specifier = types.importSpecifier(transformedSpecifierId, types.identifier(opts.transformed.specifier));
132
- const nodes = types.importDeclaration([specifier], types.stringLiteral(opts.transformed.source));
133
- programPath.unshiftContainer('body', nodes);
134
- }
135
- }
136
- }
137
- };
138
- };
139
- //# sourceMappingURL=transform-specifier-with-source.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform-specifier-with-source.js","sourceRoot":"","sources":["../src/transform-specifier-with-source.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- import { Compiler, Compilation } from 'webpack'
2
- import path from 'path'
3
- import { AsyncPackOpts } from './types'
4
- import template from '@babel/template'
5
- import generator from '@babel/generator'
6
- import { generateDynamicPackageName, isDynamicPackageWXssAssetWithOrder } from './utils'
7
-
8
- export const PLUGIN_NAME = 'InjectStyleComponent'
9
-
10
- export const InjectStyleComponentName = 'inject-style'
11
-
12
- const injectStyleComponentCode = `
13
- const { SingletonPromise } = require('~/singleton-promise.js')
14
- Component({
15
- properties: {
16
- route: String,
17
- },
18
- lifetimes: {
19
- attached: function () {
20
- return SingletonPromise.loaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
21
- },
22
- detached: function () {
23
- return SingletonPromise.unloaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
24
- }
25
- }
26
- })
27
- `
28
-
29
- type Opt = AsyncPackOpts
30
-
31
- export class InjectStyleComponentPlugin {
32
- private readonly opt: Opt
33
-
34
- private readonly WXmlContent: string = '<block/>'
35
-
36
- private readonly JsonContent:string = '{"component": true,"styleIsolation": "shared"}'
37
-
38
- private readonly JsContent: string = injectStyleComponentCode
39
-
40
- constructor (opt: Opt) {
41
- this.opt = opt
42
- }
43
-
44
- apply (compiler: Compiler) {
45
- compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation: Compilation) => {
46
- const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL // 最早阶段,在优化前
47
-
48
- compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, (assets) => {
49
- for (let order = 0; order < this.opt.dynamicPackageCount; order++) {
50
- const dynamicPackageName = generateDynamicPackageName({ ...this.opt, order })
51
-
52
- const { code: jsFileContent } = generator(template.program(this.JsContent)({ DYNAMIC_PACKAGE_NAME: dynamicPackageName }))
53
- const styleFileContent = Object.keys(assets).reduce((result, assetPath) => {
54
- if (!isDynamicPackageWXssAssetWithOrder({ ...this.opt, order }, assetPath)) return result
55
- const relativePath = path.relative(dynamicPackageName, assetPath)
56
- const code = `@import './${relativePath}';`
57
- return result + code + '\n'
58
- }, '')
59
-
60
- const { RawSource } = compiler.webpack.sources
61
- const componentPath = `${dynamicPackageName}/${InjectStyleComponentName}`
62
- compilation.assets[`${componentPath}.js`] = new RawSource(jsFileContent)
63
- compilation.assets[`${componentPath}.wxss`] = new RawSource(styleFileContent)
64
- compilation.assets[`${componentPath}.wxml`] = new RawSource(this.WXmlContent)
65
- compilation.assets[`${componentPath}.json`] = new RawSource(this.JsonContent)
66
- }
67
- })
68
- })
69
- }
70
- }