@mpxjs/webpack-plugin 2.7.47 → 2.7.48
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/lib/dependencies/DynamicEntryDependency.js +21 -21
- package/lib/index.js +30 -2
- package/lib/utils/const.js +1 -2
- package/package.json +2 -2
|
@@ -5,7 +5,6 @@ const addQuery = require('../utils/add-query')
|
|
|
5
5
|
const toPosix = require('../utils/to-posix')
|
|
6
6
|
const async = require('async')
|
|
7
7
|
const parseRequest = require('../utils/parse-request')
|
|
8
|
-
const { MPX_CURRENT_CHUNK } = require('../utils/const')
|
|
9
8
|
|
|
10
9
|
class DynamicEntryDependency extends NullDependency {
|
|
11
10
|
constructor (request, entryType, outputPath = '', packageRoot = '', relativePath = '', context = '', range) {
|
|
@@ -61,7 +60,7 @@ class DynamicEntryDependency extends NullDependency {
|
|
|
61
60
|
})
|
|
62
61
|
|
|
63
62
|
let resultPath = publicPath + filename
|
|
64
|
-
if (relativePath
|
|
63
|
+
if (relativePath) {
|
|
65
64
|
resultPath = toPosix(path.relative(relativePath, resultPath))
|
|
66
65
|
}
|
|
67
66
|
|
|
@@ -91,10 +90,16 @@ class DynamicEntryDependency extends NullDependency {
|
|
|
91
90
|
}
|
|
92
91
|
|
|
93
92
|
mpxAction (module, compilation, callback) {
|
|
94
|
-
const mpx = compilation
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
const { __mpx__: mpx, moduleGraph } = compilation
|
|
94
|
+
let entryModule = module
|
|
95
|
+
while (true) {
|
|
96
|
+
const issuer = moduleGraph.getIssuer(entryModule)
|
|
97
|
+
if (issuer) entryModule = issuer
|
|
98
|
+
else break
|
|
99
|
+
}
|
|
100
|
+
this.originEntryNode = mpx.getEntryNode(entryModule)
|
|
97
101
|
this.publicPath = compilation.outputOptions.publicPath || ''
|
|
102
|
+
const { packageRoot, context } = this
|
|
98
103
|
if (context) this.resolver = compilation.resolverFactory.get('normal', module.resolveOptions)
|
|
99
104
|
// 分包构建在需要在主包构建完成后在finishMake中处理,返回的资源路径先用key来占位,在合成extractedAssets时再进行最终替换
|
|
100
105
|
if (packageRoot && mpx.currentPackageRoot !== packageRoot) {
|
|
@@ -112,10 +117,10 @@ class DynamicEntryDependency extends NullDependency {
|
|
|
112
117
|
|
|
113
118
|
// hash会影响最终的codeGenerateResult是否走缓存,由于该dep中resultPath是动态变更的,需要将其更新到hash中,避免错误使用缓存
|
|
114
119
|
updateHash (hash, context) {
|
|
115
|
-
const { resultPath,
|
|
120
|
+
const { resultPath, customApply } = this
|
|
116
121
|
if (resultPath) hash.update(resultPath)
|
|
117
|
-
//
|
|
118
|
-
if (
|
|
122
|
+
// 当存在customApply时,插入随机hash使当前module的codeGeneration cache失效,从而执行dep.apply动态获取当前module所属的chunk路径
|
|
123
|
+
if (typeof customApply === 'function') hash.update('' + (+new Date()) + Math.random())
|
|
119
124
|
super.updateHash(hash, context)
|
|
120
125
|
}
|
|
121
126
|
|
|
@@ -145,19 +150,14 @@ class DynamicEntryDependency extends NullDependency {
|
|
|
145
150
|
}
|
|
146
151
|
|
|
147
152
|
DynamicEntryDependency.Template = class DynamicEntryDependencyTemplate {
|
|
148
|
-
apply (dep, source, {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
} else if (resultPath) {
|
|
157
|
-
if (relativePath === MPX_CURRENT_CHUNK) {
|
|
158
|
-
relativePath = publicPath + path.dirname(chunkGraph.getModuleChunks(module)[0].name)
|
|
159
|
-
resultPath = toPosix(path.relative(relativePath, resultPath))
|
|
160
|
-
}
|
|
153
|
+
apply (dep, source, options) {
|
|
154
|
+
const { resultPath, range, key, customApply } = dep
|
|
155
|
+
|
|
156
|
+
if (typeof customApply === 'function') {
|
|
157
|
+
return customApply(dep, source, options)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (resultPath) {
|
|
161
161
|
source.replace(range[0], range[1] - 1, JSON.stringify(resultPath))
|
|
162
162
|
} else {
|
|
163
163
|
const replaceRange = `mpx_replace_path_${key}`
|
package/lib/index.js
CHANGED
|
@@ -55,7 +55,7 @@ const extractorPath = normalize.lib('extractor')
|
|
|
55
55
|
const async = require('async')
|
|
56
56
|
const stringifyLoadersAndResource = require('./utils/stringify-loaders-resource')
|
|
57
57
|
const emitFile = require('./utils/emit-file')
|
|
58
|
-
const { MPX_PROCESSED_FLAG, MPX_DISABLE_EXTRACTOR_CACHE
|
|
58
|
+
const { MPX_PROCESSED_FLAG, MPX_DISABLE_EXTRACTOR_CACHE } = require('./utils/const')
|
|
59
59
|
const isEmptyObject = require('./utils/is-empty-object')
|
|
60
60
|
|
|
61
61
|
const isProductionLikeMode = options => {
|
|
@@ -164,6 +164,7 @@ class MpxWebpackPlugin {
|
|
|
164
164
|
}, options.nativeConfig)
|
|
165
165
|
options.webConfig = options.webConfig || {}
|
|
166
166
|
options.partialCompile = options.mode !== 'web' && options.partialCompile
|
|
167
|
+
options.retryRequireAsync = options.retryRequireAsync || false
|
|
167
168
|
this.options = options
|
|
168
169
|
// Hack for buildDependencies
|
|
169
170
|
const rawResolveBuildDependencies = FileSystemInfo.prototype.resolveBuildDependencies
|
|
@@ -584,6 +585,11 @@ class MpxWebpackPlugin {
|
|
|
584
585
|
if (!entryNode) {
|
|
585
586
|
entryNode = new EntryNode(module, type)
|
|
586
587
|
entryNodeModulesMap.set(module, entryNode)
|
|
588
|
+
} else if (type) {
|
|
589
|
+
if (entryNode.type && entryNode.type !== type) {
|
|
590
|
+
compilation.errors.push(`获取request为${module.request}的entryNode时类型与已有节点冲突, 当前注册的type为${type}, 已有节点的type为${entryNode.type}!`)
|
|
591
|
+
}
|
|
592
|
+
entryNode.type = type
|
|
587
593
|
}
|
|
588
594
|
return entryNode
|
|
589
595
|
},
|
|
@@ -956,7 +962,15 @@ class MpxWebpackPlugin {
|
|
|
956
962
|
parser.hooks.call.for('__mpx_dynamic_entry__').tap('MpxWebpackPlugin', (expr) => {
|
|
957
963
|
const args = expr.arguments.map((i) => i.value)
|
|
958
964
|
args.push(expr.range)
|
|
965
|
+
|
|
959
966
|
const dep = new DynamicEntryDependency(...args)
|
|
967
|
+
if (args[2] === 'custom-tab-bar/index') {
|
|
968
|
+
// replace with true for custom-tab-bar
|
|
969
|
+
dep.customApply = (dep, source) => {
|
|
970
|
+
const { range } = dep
|
|
971
|
+
source.replace(range[0], range[1] - 1, 'true')
|
|
972
|
+
}
|
|
973
|
+
}
|
|
960
974
|
parser.state.current.addPresentationalDependency(dep)
|
|
961
975
|
return true
|
|
962
976
|
})
|
|
@@ -972,7 +986,21 @@ class MpxWebpackPlugin {
|
|
|
972
986
|
request = addQuery(request, {}, false, ['root'])
|
|
973
987
|
// 目前仅wx支持require.async,其余平台使用CommonJsAsyncDependency进行模拟抹平
|
|
974
988
|
if (mpx.mode === 'wx') {
|
|
975
|
-
const dep = new DynamicEntryDependency(request, 'export', '', queryObj.root,
|
|
989
|
+
const dep = new DynamicEntryDependency(request, 'export', '', queryObj.root, '', context, range)
|
|
990
|
+
dep.customApply = (dep, source, { module, chunkGraph }) => {
|
|
991
|
+
let { publicPath, resultPath } = dep
|
|
992
|
+
if (resultPath) {
|
|
993
|
+
const relativePath = publicPath + path.dirname(chunkGraph.getModuleChunks(module)[0].name)
|
|
994
|
+
resultPath = toPosix(path.relative(relativePath, resultPath))
|
|
995
|
+
let replaceContent = JSON.stringify(resultPath)
|
|
996
|
+
if (this.options.retryRequireAsync) {
|
|
997
|
+
replaceContent += `).catch(function (e) {
|
|
998
|
+
return require.async(${JSON.stringify(resultPath)});
|
|
999
|
+
}`
|
|
1000
|
+
}
|
|
1001
|
+
source.replace(range[0], range[1] - 1, replaceContent)
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
976
1004
|
parser.state.current.addPresentationalDependency(dep)
|
|
977
1005
|
// 包含require.async的模块不能被concatenate,避免DynamicEntryDependency中无法获取模块chunk以计算相对路径
|
|
978
1006
|
parser.state.module.buildInfo.moduleConcatenationBailout = 'require async'
|
package/lib/utils/const.js
CHANGED
|
@@ -5,6 +5,5 @@ module.exports = {
|
|
|
5
5
|
RESOLVE_IGNORED_ERR: new Error('Resolve ignored!'),
|
|
6
6
|
JSON_JS_EXT: '.json.js',
|
|
7
7
|
MPX_ROOT_VIEW: 'mpx-root-view', // 根节点类名
|
|
8
|
-
MPX_APP_MODULE_ID: 'mpx-app-scope'
|
|
9
|
-
MPX_CURRENT_CHUNK: 'mpx_current_chunk'
|
|
8
|
+
MPX_APP_MODULE_ID: 'mpx-app-scope' // app文件moduleId
|
|
10
9
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpxjs/webpack-plugin",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.48",
|
|
4
4
|
"description": "mpx compile core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mpx"
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"engines": {
|
|
81
81
|
"node": ">=14.14.0"
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "4e8f3ea3d582b3819856345ee618d705eb5eb2e3"
|
|
84
84
|
}
|