@taro-minify-pack/plugin-async-pack 0.1.4 → 0.1.5-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -85,7 +85,9 @@ const replaceWebpackLoadScriptFn = (assignmentExpressionNodePath, opts) => {
|
|
|
85
85
|
const { left, right } = assignmentExpressionNodePath.node || {};
|
|
86
86
|
if (!types.isMemberExpression(left))
|
|
87
87
|
return;
|
|
88
|
-
|
|
88
|
+
// webpack5 的 loadScript 在产物中可能是 FunctionExpression 或 ArrowFunctionExpression(受
|
|
89
|
+
// output.environment.arrowFunction 影响,Taro 3.6.x 默认产物为箭头函数),二者都需命中
|
|
90
|
+
if (!types.isFunction(right))
|
|
89
91
|
return;
|
|
90
92
|
if (!types.isIdentifier(left.object, { name: '__webpack_require__' }))
|
|
91
93
|
return;
|
|
@@ -112,6 +114,7 @@ const replaceWebpackLoadScriptFn = (assignmentExpressionNodePath, opts) => {
|
|
|
112
114
|
assignmentExpressionNodePath.replaceWith(templateCodeAst);
|
|
113
115
|
assignmentExpressionNodePath.insertBefore(loadDynamicModuleFnMapAst);
|
|
114
116
|
assignmentExpressionNodePath.insertBefore(templateCodeDepAst);
|
|
117
|
+
return true;
|
|
115
118
|
};
|
|
116
119
|
const webpackLoadDynamicStylesheetTemplate = `
|
|
117
120
|
!function () {
|
|
@@ -130,7 +133,7 @@ const replaceWebpackLoadDynamicModuleStylesheetFn = (path, opts) => {
|
|
|
130
133
|
const { left, right } = nodePath.node || {};
|
|
131
134
|
if (!types.isMemberExpression(left))
|
|
132
135
|
return;
|
|
133
|
-
if (!types.
|
|
136
|
+
if (!types.isFunction(right))
|
|
134
137
|
return;
|
|
135
138
|
if (!types.isMemberExpression(left.object))
|
|
136
139
|
return;
|
|
@@ -152,14 +155,28 @@ const replaceWebpackLoadDynamicModuleStylesheetFn = (path, opts) => {
|
|
|
152
155
|
};
|
|
153
156
|
const transformWebpackRuntime = (code, opts) => {
|
|
154
157
|
const ast = parser.parse(code); // 将代码解析为 AST
|
|
158
|
+
let loadScriptMatched = false;
|
|
155
159
|
(0, traverse_1.default)(ast, {
|
|
156
160
|
UnaryExpression: (nodePath) => {
|
|
157
161
|
replaceWebpackLoadDynamicModuleStylesheetFn(nodePath, opts);
|
|
158
162
|
},
|
|
159
163
|
AssignmentExpression: (nodePath) => {
|
|
160
|
-
replaceWebpackLoadScriptFn(nodePath, opts);
|
|
164
|
+
const matched = replaceWebpackLoadScriptFn(nodePath, opts);
|
|
165
|
+
loadScriptMatched = loadScriptMatched || !!matched;
|
|
161
166
|
}
|
|
162
167
|
});
|
|
168
|
+
const hasDynamicJsAssets = Object.keys(opts.assets).some((assetName) => {
|
|
169
|
+
return (0, utils_1.isDynamicPackageAsset)(opts, assetName) && (0, utils_1.matchSuffix)('js', assetName);
|
|
170
|
+
});
|
|
171
|
+
// fail loud:配置了动态分包但 runtime 的 loadScript 未被替换时,异步 chunk 会退回
|
|
172
|
+
// 浏览器 script 注入(document.createElement),在微信小程序环境必然加载失败,
|
|
173
|
+
// 且该失败发生在真机运行时,构建期无任何报错——必须在构建期显式暴露
|
|
174
|
+
if (hasDynamicJsAssets && !loadScriptMatched) {
|
|
175
|
+
console.warn('[taro-plugin-async-pack] 未能在 runtime.js 中匹配 __webpack_require__.l(loadScript)赋值,' +
|
|
176
|
+
'异步 chunk 加载将退回浏览器实现,在微信小程序环境会运行时失败。' +
|
|
177
|
+
'已知 workaround:webpackChain 中设置 output.environment.arrowFunction = false,' +
|
|
178
|
+
'使 runtime 降为普通函数形态;或将你的 Taro/webpack 版本与插件兼容矩阵对照确认。');
|
|
179
|
+
}
|
|
163
180
|
return (0, generator_1.default)(ast).code;
|
|
164
181
|
};
|
|
165
182
|
exports.transformWebpackRuntime = transformWebpackRuntime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-webpack-runtime.js","sourceRoot":"","sources":["../src/transform-webpack-runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAgD;AAChD,iEAAwC;AACxC,sDAAuC;AACvC,+DAAsC;AACtC,oDAAqC;AAMrC,mCAA4D;AAM5D,MAAM,mCAAmC,GAAG;;;;;;;;;;;;;;;;;CAiB3C,CAAA;AAED,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;CAmBxC,CAAA;AAED,MAAM,0BAA0B,GAAG,CAAC,4BAA4D,EAAE,IAAU,EAAE,EAAE;IAC9G,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,4BAA4B,CAAC,IAAI,IAAI,EAAE,CAAA;IAE/D,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAM;IAE3C,IAAI,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"transform-webpack-runtime.js","sourceRoot":"","sources":["../src/transform-webpack-runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAgD;AAChD,iEAAwC;AACxC,sDAAuC;AACvC,+DAAsC;AACtC,oDAAqC;AAMrC,mCAA4D;AAM5D,MAAM,mCAAmC,GAAG;;;;;;;;;;;;;;;;;CAiB3C,CAAA;AAED,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;CAmBxC,CAAA;AAED,MAAM,0BAA0B,GAAG,CAAC,4BAA4D,EAAE,IAAU,EAAE,EAAE;IAC9G,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,4BAA4B,CAAC,IAAI,IAAI,EAAE,CAAA;IAE/D,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAM;IAE3C,+EAA+E;IAC/E,mEAAmE;IACnE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAM;IAEpC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;QAAE,OAAM;IAE7E,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAE,OAAM;IAE7D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,IAAI,WAAW;QAAE,OAAM;IAEvB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAEvB,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/D,OAAO,IAAA,6BAAqB,EAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAA,mBAAW,EAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;IAEF,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE;QACvC,MAAM,4BAA4B,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;YAC1E,OAAO,KAAK,cAAc,0CAA0C,cAAc,OAAO,CAAA;QAC3F,CAAC,CAAC,CAAA;QAEF,OAAO,iCAAiC,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACnF,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,eAAe,GAAG,eAAQ,CAAC,GAAG,CAAC,gCAAgC,CAAc,CAAA;IAEnF,MAAM,yBAAyB,GAAG,eAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IAE1E,MAAM,kBAAkB,GAAG,eAAQ,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAE5E,4BAA4B,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;IAEzD,4BAA4B,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAA;IAEpE,4BAA4B,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAA;IAE7D,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,oCAAoC,GAAG;;;;;;;;;CAS5C,CAAA;AAED,MAAM,2CAA2C,GAAG,CAAC,IAA+B,EAAE,IAAU,EAAE,EAAE;IAClG,IAAI,aAAa,GAAG,KAAK,CAAA;IAEzB,IAAI,CAAC,QAAQ,CAAC;QACZ,oBAAoB,EAAE,CAAC,QAAwC,EAAE,EAAE;YACjE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAA;YAE3C,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAAE,OAAM;YAE3C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAM;YAEpC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAM;YAElD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;gBAAE,OAAM;YAEpF,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;gBAAE,OAAM;YAEpE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAAE,OAAM;YAEnE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBAAE,OAAM;YAEvG,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,aAAa;QAAE,OAAM;IAE1B,MAAM,eAAe,GAAG,eAAQ,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;IAE1E,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,eAA4B,CAAC,CAAA;AAC3D,CAAC,CAAA;AAEM,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,IAAU,EAAE,EAAE;IAClE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAC,aAAa;IAE5C,IAAI,iBAAiB,GAAG,KAAK,CAAA;IAE7B,IAAA,kBAAQ,EAAC,GAAG,EAAE;QACZ,eAAe,EAAE,CAAC,QAAmC,EAAE,EAAE;YACvD,2CAA2C,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC7D,CAAC;QACD,oBAAoB,EAAE,CAAC,QAAwC,EAAE,EAAE;YACjE,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAE1D,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,CAAC,OAAO,CAAA;QACpD,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACrE,OAAO,IAAA,6BAAqB,EAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAA,mBAAW,EAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;IAEF,6DAA6D;IAC7D,wDAAwD;IACxD,oCAAoC;IACpC,IAAI,kBAAkB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CACV,kFAAkF;YAChF,qCAAqC;YACrC,0EAA0E;YAC1E,qDAAqD,CACxD,CAAA;IACH,CAAC;IAED,OAAO,IAAA,mBAAS,EAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAC5B,CAAC,CAAA;AAjCY,QAAA,uBAAuB,2BAiCnC"}
|
package/package.json
CHANGED
|
@@ -59,7 +59,9 @@ const replaceWebpackLoadScriptFn = (assignmentExpressionNodePath: NodePath<Assig
|
|
|
59
59
|
|
|
60
60
|
if (!types.isMemberExpression(left)) return
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
// webpack5 的 loadScript 在产物中可能是 FunctionExpression 或 ArrowFunctionExpression(受
|
|
63
|
+
// output.environment.arrowFunction 影响,Taro 3.6.x 默认产物为箭头函数),二者都需命中
|
|
64
|
+
if (!types.isFunction(right)) return
|
|
63
65
|
|
|
64
66
|
if (!types.isIdentifier(left.object, { name: '__webpack_require__' })) return
|
|
65
67
|
|
|
@@ -96,6 +98,8 @@ const replaceWebpackLoadScriptFn = (assignmentExpressionNodePath: NodePath<Assig
|
|
|
96
98
|
assignmentExpressionNodePath.insertBefore(loadDynamicModuleFnMapAst)
|
|
97
99
|
|
|
98
100
|
assignmentExpressionNodePath.insertBefore(templateCodeDepAst)
|
|
101
|
+
|
|
102
|
+
return true
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
const webpackLoadDynamicStylesheetTemplate = `
|
|
@@ -118,7 +122,7 @@ const replaceWebpackLoadDynamicModuleStylesheetFn = (path: NodePath<UnaryExpress
|
|
|
118
122
|
|
|
119
123
|
if (!types.isMemberExpression(left)) return
|
|
120
124
|
|
|
121
|
-
if (!types.
|
|
125
|
+
if (!types.isFunction(right)) return
|
|
122
126
|
|
|
123
127
|
if (!types.isMemberExpression(left.object)) return
|
|
124
128
|
|
|
@@ -143,13 +147,35 @@ const replaceWebpackLoadDynamicModuleStylesheetFn = (path: NodePath<UnaryExpress
|
|
|
143
147
|
|
|
144
148
|
export const transformWebpackRuntime = (code: string, opts: Opts) => {
|
|
145
149
|
const ast = parser.parse(code) // 将代码解析为 AST
|
|
150
|
+
|
|
151
|
+
let loadScriptMatched = false
|
|
152
|
+
|
|
146
153
|
traverse(ast, {
|
|
147
154
|
UnaryExpression: (nodePath: NodePath<UnaryExpression>) => {
|
|
148
155
|
replaceWebpackLoadDynamicModuleStylesheetFn(nodePath, opts)
|
|
149
156
|
},
|
|
150
157
|
AssignmentExpression: (nodePath: NodePath<AssignmentExpression>) => {
|
|
151
|
-
replaceWebpackLoadScriptFn(nodePath, opts)
|
|
158
|
+
const matched = replaceWebpackLoadScriptFn(nodePath, opts)
|
|
159
|
+
|
|
160
|
+
loadScriptMatched = loadScriptMatched || !!matched
|
|
152
161
|
}
|
|
153
162
|
})
|
|
163
|
+
|
|
164
|
+
const hasDynamicJsAssets = Object.keys(opts.assets).some((assetName) => {
|
|
165
|
+
return isDynamicPackageAsset(opts, assetName) && matchSuffix('js', assetName)
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
// fail loud:配置了动态分包但 runtime 的 loadScript 未被替换时,异步 chunk 会退回
|
|
169
|
+
// 浏览器 script 注入(document.createElement),在微信小程序环境必然加载失败,
|
|
170
|
+
// 且该失败发生在真机运行时,构建期无任何报错——必须在构建期显式暴露
|
|
171
|
+
if (hasDynamicJsAssets && !loadScriptMatched) {
|
|
172
|
+
console.warn(
|
|
173
|
+
'[taro-plugin-async-pack] 未能在 runtime.js 中匹配 __webpack_require__.l(loadScript)赋值,' +
|
|
174
|
+
'异步 chunk 加载将退回浏览器实现,在微信小程序环境会运行时失败。' +
|
|
175
|
+
'已知 workaround:webpackChain 中设置 output.environment.arrowFunction = false,' +
|
|
176
|
+
'使 runtime 降为普通函数形态;或将你的 Taro/webpack 版本与插件兼容矩阵对照确认。'
|
|
177
|
+
)
|
|
178
|
+
}
|
|
179
|
+
|
|
154
180
|
return generator(ast).code
|
|
155
181
|
}
|