@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.
- package/README.md +11 -44
- package/dist/index.js +14 -45
- package/dist/index.js.map +1 -1
- package/dist/merge-output.d.ts +12 -0
- package/dist/merge-output.js +26 -0
- package/dist/merge-output.js.map +1 -0
- package/dist/transform-app-config.d.ts +0 -1
- package/dist/transform-app-config.js +2 -5
- package/dist/transform-app-config.js.map +1 -1
- package/dist/transform-app-stylesheet.d.ts +6 -0
- package/dist/transform-app-stylesheet.js +14 -0
- package/dist/transform-app-stylesheet.js.map +1 -0
- package/dist/transform-webpack-runtime.js +4 -46
- package/dist/transform-webpack-runtime.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/utils.d.ts +0 -4
- package/dist/utils.js +1 -15
- package/dist/utils.js.map +1 -1
- package/package.json +1 -5
- package/src/index.ts +13 -50
- package/src/merge-output.ts +33 -0
- package/src/transform-app-config.ts +1 -8
- package/src/transform-app-stylesheet.ts +17 -0
- package/src/transform-webpack-runtime.ts +6 -56
- package/src/types.ts +0 -1
- package/src/utils.ts +0 -10
- package/dist/inject-style-component.d.ts +0 -14
- package/dist/inject-style-component.js +0 -62
- package/dist/inject-style-component.js.map +0 -1
- package/dist/singleton-promise.d.ts +0 -16
- package/dist/singleton-promise.js +0 -46
- package/dist/singleton-promise.js.map +0 -1
- package/dist/transform-pages-wxml.d.ts +0 -7
- package/dist/transform-pages-wxml.js +0 -31
- package/dist/transform-pages-wxml.js.map +0 -1
- package/dist/transform-specifier-with-source.d.ts +0 -16
- package/dist/transform-specifier-with-source.js +0 -139
- package/dist/transform-specifier-with-source.js.map +0 -1
- package/src/inject-style-component.ts +0 -70
- package/src/singleton-promise.ts +0 -52
- package/src/transform-pages-wxml.ts +0 -35
- 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,
|
|
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
|
-
|
|
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 (
|
|
108
|
-
|
|
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
|
-
|
|
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
|
|
139
|
+
const templateCodeAst = template.ast(webpackLoadDynamicStylesheetTemplate)
|
|
153
140
|
|
|
154
|
-
|
|
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
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,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
|
-
}
|