@mpxjs/webpack-plugin 2.8.42 → 2.8.44

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/index.js CHANGED
@@ -167,6 +167,7 @@ class MpxWebpackPlugin {
167
167
  }, options.nativeConfig)
168
168
  options.webConfig = options.webConfig || {}
169
169
  options.partialCompile = options.mode !== 'web' && options.partialCompile
170
+ options.asyncSubpackageRules = options.asyncSubpackageRules || null
170
171
  options.retryRequireAsync = options.retryRequireAsync || false
171
172
  options.enableAliRequireAsync = options.enableAliRequireAsync || false
172
173
  this.options = options
@@ -622,6 +623,7 @@ class MpxWebpackPlugin {
622
623
  forceProxyEventRules: this.options.forceProxyEventRules,
623
624
  enableRequireAsync: this.options.mode === 'wx' || (this.options.mode === 'ali' && this.options.enableAliRequireAsync),
624
625
  partialCompile: this.options.partialCompile,
626
+ asyncSubpackageRules: this.options.asyncSubpackageRules,
625
627
  pathHash: (resourcePath) => {
626
628
  if (this.options.pathHashMode === 'relative' && this.options.projectRoot) {
627
629
  return hash(path.relative(this.options.projectRoot, resourcePath))
@@ -1026,13 +1028,22 @@ class MpxWebpackPlugin {
1026
1028
  let request = expr.arguments[0].value
1027
1029
  const range = expr.arguments[0].range
1028
1030
  const context = parser.state.module.context
1029
- const { queryObj } = parseRequest(request)
1030
- if (queryObj.root) {
1031
+ const { queryObj, resourcePath } = parseRequest(request)
1032
+ let tarRoot = queryObj.root
1033
+ if (!tarRoot && mpx.asyncSubpackageRules) {
1034
+ for (const item of mpx.asyncSubpackageRules) {
1035
+ if (matchCondition(resourcePath, item)) {
1036
+ tarRoot = item.root
1037
+ break
1038
+ }
1039
+ }
1040
+ }
1041
+ if (tarRoot) {
1031
1042
  // 删除root query
1032
- request = addQuery(request, {}, false, ['root'])
1043
+ if (queryObj.root) request = addQuery(request, {}, false, ['root'])
1033
1044
  // 目前仅wx和ali支持require.async,ali需要开启enableAliRequireAsync,其余平台使用CommonJsAsyncDependency进行模拟抹平
1034
1045
  if (mpx.enableRequireAsync) {
1035
- const dep = new DynamicEntryDependency(request, 'export', '', queryObj.root, '', context, range, {
1046
+ const dep = new DynamicEntryDependency(request, 'export', '', tarRoot, '', context, range, {
1036
1047
  isRequireAsync: true,
1037
1048
  retryRequireAsync: !!this.options.retryRequireAsync
1038
1049
  })
@@ -6,6 +6,7 @@ const parseRequest = require('../utils/parse-request')
6
6
  const addQuery = require('../utils/add-query')
7
7
  const loaderUtils = require('loader-utils')
8
8
  const resolve = require('../utils/resolve')
9
+ const { matchCondition } = require('../utils/match-condition')
9
10
 
10
11
  module.exports = function createJSONHelper ({ loaderContext, emitWarning, customGetDynamicEntry }) {
11
12
  const mpx = loaderContext.getMpx()
@@ -17,6 +18,7 @@ module.exports = function createJSONHelper ({ loaderContext, emitWarning, custom
17
18
  const getOutputPath = mpx.getOutputPath
18
19
  const mode = mpx.mode
19
20
  const enableRequireAsync = mpx.enableRequireAsync
21
+ const asyncSubpackageRules = mpx.asyncSubpackageRules
20
22
 
21
23
  const isUrlRequest = r => isUrlRequestRaw(r, root, externals)
22
24
  const urlToRequest = r => loaderUtils.urlToRequest(r)
@@ -45,17 +47,27 @@ module.exports = function createJSONHelper ({ loaderContext, emitWarning, custom
45
47
  if (resolveMode === 'native') {
46
48
  component = urlToRequest(component)
47
49
  }
48
-
49
50
  resolve(context, component, loaderContext, (err, resource, info) => {
50
51
  if (err) return callback(err)
51
52
  const { resourcePath, queryObj } = parseRequest(resource)
52
-
53
+ let placeholder = null
53
54
  if (queryObj.root) {
54
55
  // 删除root query
55
56
  resource = addQuery(resource, {}, false, ['root'])
56
57
  // 目前只有微信支持分包异步化
57
- if (enableRequireAsync) tarRoot = queryObj.root
58
+ if (enableRequireAsync) {
59
+ tarRoot = queryObj.root
60
+ }
61
+ } else if (!queryObj.root && asyncSubpackageRules && enableRequireAsync) {
62
+ for (const item of asyncSubpackageRules) {
63
+ if (matchCondition(resourcePath, item)) {
64
+ tarRoot = item.root
65
+ placeholder = item.placeholder
66
+ break
67
+ }
68
+ }
58
69
  }
70
+
59
71
  const parsed = path.parse(resourcePath)
60
72
  const ext = parsed.ext
61
73
  const resourceName = path.join(parsed.dir, parsed.name)
@@ -84,7 +96,7 @@ module.exports = function createJSONHelper ({ loaderContext, emitWarning, custom
84
96
  }
85
97
 
86
98
  const entry = getDynamicEntry(resource, 'component', outputPath, tarRoot, relativePath)
87
- callback(null, entry)
99
+ callback(null, entry, tarRoot, placeholder)
88
100
  })
89
101
  }
90
102
 
@@ -38,6 +38,7 @@ module.exports = function (content) {
38
38
  const globalSrcMode = mpx.srcMode
39
39
  const localSrcMode = queryObj.mode
40
40
  const srcMode = localSrcMode || globalSrcMode
41
+ const projectRoot = mpx.projectRoot
41
42
 
42
43
  const isApp = !(pagesMap[resourcePath] || componentsMap[resourcePath])
43
44
  const publicPath = this._compilation.outputOptions.publicPath || ''
@@ -55,6 +56,25 @@ module.exports = function (content) {
55
56
  )
56
57
  }
57
58
 
59
+ const fillInComponentPlaceholder = (name, placeholder, placeholderEntry) => {
60
+ const componentPlaceholder = json.componentPlaceholder || {}
61
+ if (componentPlaceholder[name]) return
62
+ componentPlaceholder[name] = placeholder
63
+ json.componentPlaceholder = componentPlaceholder
64
+ if (placeholderEntry && !json.usingComponents[placeholder]) json.usingComponents[placeholder] = placeholderEntry
65
+ }
66
+ const normalizePlaceholder = (placeholder) => {
67
+ if (typeof placeholder === 'string') {
68
+ placeholder = {
69
+ name: placeholder
70
+ }
71
+ }
72
+ if (!placeholder.name) {
73
+ emitError('The asyncSubpackageRules configuration format of @mpxjs/webpack-plugin a is incorrect')
74
+ }
75
+ return placeholder
76
+ }
77
+
58
78
  const {
59
79
  isUrlRequest,
60
80
  urlToRequest,
@@ -142,22 +162,6 @@ module.exports = function (content) {
142
162
  }
143
163
  }
144
164
 
145
- // 校验异步组件占位符 componentPlaceholder 不为空
146
- if (mpx.enableRequireAsync) {
147
- const { usingComponents, componentPlaceholder = {} } = json
148
- if (usingComponents) {
149
- for (const compName in usingComponents) {
150
- const compPath = usingComponents[compName]
151
- if (!/\?root=/g.test(compPath)) continue
152
- const compPlaceholder = componentPlaceholder[compName]
153
- if (!compPlaceholder) {
154
- const errMsg = `componentPlaceholder of "${compName}" doesn't exist! \n\r`
155
- emitError(errMsg)
156
- }
157
- }
158
- }
159
- }
160
-
161
165
  // 快应用补全json配置,必填项
162
166
  if (mode === 'qa' && isApp) {
163
167
  const defaultConf = {
@@ -204,14 +208,36 @@ module.exports = function (content) {
204
208
  const processComponents = (components, context, callback) => {
205
209
  if (components) {
206
210
  async.eachOf(components, (component, name, callback) => {
207
- processComponent(component, context, { relativePath }, (err, entry) => {
211
+ processComponent(component, context, { relativePath }, (err, entry, root, placeholder) => {
208
212
  if (err === RESOLVE_IGNORED_ERR) {
209
213
  delete components[name]
210
214
  return callback()
211
215
  }
212
216
  if (err) return callback(err)
213
217
  components[name] = entry
214
- callback()
218
+ if (root) {
219
+ if (placeholder) {
220
+ placeholder = normalizePlaceholder(placeholder)
221
+ if (placeholder.resource) {
222
+ processComponent(placeholder.resource, projectRoot, { relativePath }, (err, entry) => {
223
+ if (err) return callback(err)
224
+ fillInComponentPlaceholder(name, placeholder.name, entry)
225
+ callback()
226
+ })
227
+ } else {
228
+ fillInComponentPlaceholder(name, placeholder.name)
229
+ callback()
230
+ }
231
+ } else {
232
+ if (!json.componentPlaceholder || !json.componentPlaceholder[name]) {
233
+ const errMsg = `componentPlaceholder of "${name}" doesn't exist! \n\r`
234
+ emitError(errMsg)
235
+ }
236
+ callback()
237
+ }
238
+ } else {
239
+ callback()
240
+ }
215
241
  })
216
242
  }, callback)
217
243
  } else {
@@ -120,8 +120,3 @@ html, body, .app {
120
120
  font-family "weui"
121
121
  src url('data:application/octet-stream;base64,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') format('truetype')
122
122
  }
123
-
124
- .mpx-root-view {
125
- display: inline
126
- line-height: normal
127
- }
@@ -113,7 +113,7 @@
113
113
  },
114
114
  watch: {
115
115
  scrollIntoView (val) {
116
- this.bs && this.bs.scrollToElement('#' + val, this.scrollWithAnimation ? 200 : 0)
116
+ this.scrollToView(val, this.scrollWithAnimation ? 200 : 0)
117
117
  },
118
118
  _scrollTop (val) {
119
119
  this.bs && this.bs.scrollTo(this.bs.x, -val, this.scrollWithAnimation ? 200 : 0)
@@ -201,9 +201,7 @@
201
201
  leading: true,
202
202
  trailing: false
203
203
  }))
204
- if (this.scrollIntoView) {
205
- this.bs.scrollToElement('#' + this.scrollIntoView)
206
- }
204
+ if (this.scrollIntoView) this.scrollToView(this.scrollIntoView)
207
205
  // 若开启自定义下拉刷新 或 开启 scroll-view 增强特性
208
206
  if (this.refresherEnabled || this.enhanced) {
209
207
  const actionsHandlerHooks = this.bs.scroller.actionsHandler.hooks
@@ -258,6 +256,12 @@
258
256
  }
259
257
  }
260
258
  },
259
+ scrollToView (id, duration = 0) {
260
+ if (!id) return
261
+ id = '#' + id
262
+ if (!document.querySelector(id)) return // 不存在元素时阻断,直接调用better-scroll的方法会报错
263
+ this.bs?.scrollToElement(id, duration)
264
+ },
261
265
  initLayerComputed () {
262
266
  const wrapper = this.$refs.wrapper
263
267
  const wrapperWidth = wrapper.offsetWidth
@@ -59,6 +59,7 @@ export default function processOption (
59
59
  global.__mpxRouter.stack = []
60
60
  global.__mpxRouter.needCache = null
61
61
  global.__mpxRouter.needRemove = []
62
+ global.__mpxRouter.eventChannelMap = {}
62
63
  // 处理reLaunch中传递的url并非首页时的replace逻辑
63
64
  global.__mpxRouter.beforeEach(function (to, from, next) {
64
65
  let action = global.__mpxRouter.__mpxAction
@@ -97,24 +98,15 @@ export default function processOption (
97
98
  })
98
99
  }
99
100
  } else {
100
- let methods = ''
101
- switch (action.type) {
102
- case 'to':
103
- methods = 'navigateTo'
104
- break
105
- case 'redirect':
106
- methods = 'redirectTo'
107
- break
108
- case 'back':
109
- methods = 'navigateBack'
110
- break
111
- case 'reLaunch':
112
- methods = 'reLaunch'
113
- break
114
- default:
115
- methods = 'navigateTo'
101
+ const typeMethodMap = {
102
+ to: 'navigateTo',
103
+ redirect: 'redirectTo',
104
+ back: 'navigateBack',
105
+ switch: 'switchTab',
106
+ reLaunch: 'reLaunch'
116
107
  }
117
- throw new Error(`${methods}:fail page "${to.path}" is not found`)
108
+ const method = typeMethodMap[action.type]
109
+ throw new Error(`${method}:fail page "${to.path}" is not found`)
118
110
  }
119
111
  }
120
112
 
@@ -126,6 +118,7 @@ export default function processOption (
126
118
  case 'to':
127
119
  stack.push(insertItem)
128
120
  global.__mpxRouter.needCache = insertItem
121
+ if (action.eventChannel) global.__mpxRouter.eventChannelMap[to.path.slice(1)] = action.eventChannel
129
122
  break
130
123
  case 'back':
131
124
  global.__mpxRouter.needRemove = stack.splice(stack.length - action.delta, action.delta)
@@ -1,10 +1,9 @@
1
1
  module.exports = (loaders, loaderIndex) => {
2
- for (let len = loaders.length; len > 0; --len) {
3
- const currentLoader = loaders[len - 1]
2
+ for (let i = loaderIndex; i >= 0; i--) {
3
+ const currentLoader = loaders[i]
4
4
  if (currentLoader.path.endsWith('ts-loader/dist/stringify-loader.js')) {
5
- break
5
+ return i
6
6
  }
7
- loaderIndex--
8
7
  }
9
8
  return loaderIndex
10
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mpxjs/webpack-plugin",
3
- "version": "2.8.42",
3
+ "version": "2.8.44",
4
4
  "description": "mpx compile core",
5
5
  "keywords": [
6
6
  "mpx"
@@ -82,5 +82,5 @@
82
82
  "engines": {
83
83
  "node": ">=14.14.0"
84
84
  },
85
- "gitHead": "a0d7f0171b8e4535f1962bdb7415fec0d25abe93"
85
+ "gitHead": "cd1f38bc84aca8b2a2e5ec890aa1e2f2693f26e3"
86
86
  }