Skip to content

Commit 094c644

Browse files
authored
Merge pull request #2113 from didi/feat-rn-async-names-0714
feat: trans async sub name rules
2 parents ab63fda + c9baa7d commit 094c644

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

packages/webpack-plugin/lib/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ const RequireExternalDependency = require('./dependencies/RequireExternalDepende
4848
const SplitChunksPlugin = require('webpack/lib/optimize/SplitChunksPlugin')
4949
const fixRelative = require('./utils/fix-relative')
5050
const parseRequest = require('./utils/parse-request')
51+
const { transSubpackage } = require('./utils/trans-async-sub-rules')
5152
const { matchCondition } = require('./utils/match-condition')
5253
const processDefs = require('./utils/process-defs')
5354
const config = require('./config')
@@ -142,6 +143,9 @@ class MpxWebpackPlugin {
142143
if (options.dynamicComponentRules && !options.dynamicRuntime) {
143144
errors.push('Please make sure you have set dynamicRuntime true in mpx webpack plugin config because you have use the dynamic runtime feature.')
144145
}
146+
if (options.transSubpackageRules && !isReact(options.mode)) {
147+
warnings.push('MpxWebpackPlugin transSubpackageRules option only supports "ios", "android", or "harmony" mode')
148+
}
145149
options.externalClasses = options.externalClasses || ['custom-class', 'i-class']
146150
options.resolveMode = options.resolveMode || 'webpack'
147151
options.writeMode = options.writeMode || 'changed'
@@ -781,6 +785,7 @@ class MpxWebpackPlugin {
781785
})
782786
},
783787
asyncSubpackageRules: this.options.asyncSubpackageRules,
788+
transSubpackageRules: this.options.transSubpackageRules,
784789
optimizeRenderRules: this.options.optimizeRenderRules,
785790
pathHash: (resourcePath) => {
786791
if (this.options.pathHashMode === 'relative' && this.options.projectRoot) {
@@ -1428,6 +1433,7 @@ class MpxWebpackPlugin {
14281433
// wx、ali和web平台支持require.async,其余平台使用CommonJsAsyncDependency进行模拟抹平
14291434
if (mpx.supportRequireAsync) {
14301435
if (isWeb(mpx.mode) || isReact(mpx.mode)) {
1436+
if (isReact(mpx.mode)) tarRoot = transSubpackage(mpx.transSubpackageRules, tarRoot)
14311437
const depBlock = new AsyncDependenciesBlock(
14321438
{
14331439
name: tarRoot + '/index'

packages/webpack-plugin/lib/react/processJSON.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const addQuery = require('../utils/add-query')
88
const parseComponent = require('../parser')
99
const getJSONContent = require('../utils/get-json-content')
1010
const resolve = require('../utils/resolve')
11+
const { transSubpackage } = require('../utils/trans-async-sub-rules')
1112
const createJSONHelper = require('../json-compiler/helper')
1213
const getRulesRunner = require('../platform/index')
1314
const { RESOLVE_IGNORED_ERR } = require('../utils/const')
@@ -146,15 +147,16 @@ module.exports = function (jsonContent, {
146147

147148
const fillInComponentsMap = (name, entry, tarRoot) => {
148149
const { resource, outputPath } = entry
149-
const { resourcePath, queryObj } = parseRequest(resource)
150+
const { resourcePath } = parseRequest(resource)
151+
tarRoot = transSubpackage(mpx.transSubpackageRules, tarRoot)
150152
componentsMap[resourcePath] = outputPath
151153
loaderContext._module && loaderContext._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, 'component', outputPath))
152154
localComponentsMap[name] = {
153155
resource: addQuery(resource, {
154156
isComponent: true,
155157
outputPath
156158
}),
157-
async: queryObj.async || tarRoot
159+
async: tarRoot
158160
}
159161
}
160162

@@ -288,7 +290,7 @@ module.exports = function (jsonContent, {
288290
if (err) return callback(err === RESOLVE_IGNORED_ERR ? null : err)
289291
if (pageKeySet.has(key)) return callback()
290292
pageKeySet.add(key)
291-
const { resourcePath, queryObj } = parseRequest(resource)
293+
const { resourcePath } = parseRequest(resource)
292294
if (localPagesMap[outputPath]) {
293295
const { resourcePath: oldResourcePath } = parseRequest(localPagesMap[outputPath].resource)
294296
if (oldResourcePath !== resourcePath) {
@@ -300,9 +302,11 @@ module.exports = function (jsonContent, {
300302

301303
pagesMap[resourcePath] = outputPath
302304
loaderContext._module && loaderContext._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, 'page', outputPath))
305+
// 通过asyncSubPackagesNameRules对tarRoot进行修改,仅修改tarRoot,不修改outputPath页面路径
306+
tarRoot = transSubpackage(mpx.transSubpackageRules, tarRoot)
303307
localPagesMap[outputPath] = {
304308
resource: addQuery(resource, { isPage: true }),
305-
async: queryObj.async || tarRoot,
309+
async: tarRoot,
306310
isFirst
307311
}
308312
callback()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function transSubpackage (asyncSubpackageNameRules, tarRoot) {
2+
// 如果没有tarRoot,则无需进行tarRoot的修改,因此
3+
if (tarRoot && Array.isArray(asyncSubpackageNameRules) && asyncSubpackageNameRules.length >= 1) {
4+
for (const item of asyncSubpackageNameRules) {
5+
if (item?.from) {
6+
const fromPaths = Array.isArray(item.from) ? item.from : [item.from]
7+
if (fromPaths.includes(tarRoot)) {
8+
tarRoot = item.to
9+
break
10+
}
11+
}
12+
}
13+
}
14+
return tarRoot
15+
}
16+
17+
module.exports = {
18+
transSubpackage
19+
}

0 commit comments

Comments
 (0)