@mpxjs/webpack-plugin 2.9.0-beta.1 → 2.9.0-beta.2
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
|
@@ -166,6 +166,7 @@ class MpxWebpackPlugin {
|
|
|
166
166
|
}, options.nativeConfig)
|
|
167
167
|
options.webConfig = options.webConfig || {}
|
|
168
168
|
options.partialCompile = options.mode !== 'web' && options.partialCompile
|
|
169
|
+
options.asyncSubpackageRules = options.asyncSubpackageRules || null
|
|
169
170
|
options.retryRequireAsync = options.retryRequireAsync || false
|
|
170
171
|
options.enableAliRequireAsync = options.enableAliRequireAsync || false
|
|
171
172
|
this.options = options
|
|
@@ -633,6 +634,7 @@ class MpxWebpackPlugin {
|
|
|
633
634
|
filename
|
|
634
635
|
})
|
|
635
636
|
},
|
|
637
|
+
asyncSubpackageRules: this.options.asyncSubpackageRules,
|
|
636
638
|
pathHash: (resourcePath) => {
|
|
637
639
|
if (this.options.pathHashMode === 'relative' && this.options.projectRoot) {
|
|
638
640
|
return hash(path.relative(this.options.projectRoot, resourcePath))
|
|
@@ -1042,13 +1044,22 @@ class MpxWebpackPlugin {
|
|
|
1042
1044
|
let request = expr.arguments[0].value
|
|
1043
1045
|
const range = expr.arguments[0].range
|
|
1044
1046
|
const context = parser.state.module.context
|
|
1045
|
-
const { queryObj } = parseRequest(request)
|
|
1046
|
-
|
|
1047
|
+
const { queryObj, resourcePath } = parseRequest(request)
|
|
1048
|
+
let tarRoot = queryObj.root
|
|
1049
|
+
if (!tarRoot && mpx.asyncSubpackageRules) {
|
|
1050
|
+
for (const item of mpx.asyncSubpackageRules) {
|
|
1051
|
+
if (matchCondition(resourcePath, item)) {
|
|
1052
|
+
tarRoot = item.root
|
|
1053
|
+
break
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
if (tarRoot) {
|
|
1047
1058
|
// 删除root query
|
|
1048
|
-
request = addQuery(request, {}, false, ['root'])
|
|
1059
|
+
if (queryObj.root) request = addQuery(request, {}, false, ['root'])
|
|
1049
1060
|
// 目前仅wx和ali支持require.async,ali需要开启enableAliRequireAsync,其余平台使用CommonJsAsyncDependency进行模拟抹平
|
|
1050
1061
|
if (mpx.enableRequireAsync) {
|
|
1051
|
-
const dep = new DynamicEntryDependency(request, 'export', '',
|
|
1062
|
+
const dep = new DynamicEntryDependency(request, 'export', '', tarRoot, '', context, range, {
|
|
1052
1063
|
isRequireAsync: true,
|
|
1053
1064
|
retryRequireAsync: !!this.options.retryRequireAsync
|
|
1054
1065
|
})
|
|
@@ -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)
|
|
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
|
-
|
|
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 {
|
package/lib/runtime/base.styl
CHANGED
|
@@ -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.
|
|
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
|
|
@@ -3,7 +3,19 @@ import { isBrowser } from './env'
|
|
|
3
3
|
import transRpxStyle from './transRpxStyle'
|
|
4
4
|
import animation from './animation'
|
|
5
5
|
|
|
6
|
-
export default function processComponentOption (
|
|
6
|
+
export default function processComponentOption (
|
|
7
|
+
{
|
|
8
|
+
option,
|
|
9
|
+
ctorType,
|
|
10
|
+
outputPath,
|
|
11
|
+
pageConfig,
|
|
12
|
+
componentsMap,
|
|
13
|
+
componentGenerics,
|
|
14
|
+
genericsInfo,
|
|
15
|
+
mixin,
|
|
16
|
+
hasApp
|
|
17
|
+
}
|
|
18
|
+
) {
|
|
7
19
|
// 局部注册页面和组件中依赖的组件
|
|
8
20
|
for (const componentName in componentsMap) {
|
|
9
21
|
if (hasOwn(componentsMap, componentName)) {
|
|
@@ -128,6 +140,7 @@ function createApp ({ componentsMap, Vue, pagesMap, firstPage, VueRouter, App, t
|
|
|
128
140
|
global.__mpxRouter.stack = []
|
|
129
141
|
global.__mpxRouter.needCache = null
|
|
130
142
|
global.__mpxRouter.needRemove = []
|
|
143
|
+
global.__mpxRouter.eventChannelMap = {}
|
|
131
144
|
// 处理reLaunch中传递的url并非首页时的replace逻辑
|
|
132
145
|
global.__mpxRouter.beforeEach(function (to, from, next) {
|
|
133
146
|
let action = global.__mpxRouter.__mpxAction
|
|
@@ -166,24 +179,15 @@ function createApp ({ componentsMap, Vue, pagesMap, firstPage, VueRouter, App, t
|
|
|
166
179
|
})
|
|
167
180
|
}
|
|
168
181
|
} else {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
methods = 'redirectTo'
|
|
176
|
-
break
|
|
177
|
-
case 'back':
|
|
178
|
-
methods = 'navigateBack'
|
|
179
|
-
break
|
|
180
|
-
case 'reLaunch':
|
|
181
|
-
methods = 'reLaunch'
|
|
182
|
-
break
|
|
183
|
-
default:
|
|
184
|
-
methods = 'navigateTo'
|
|
182
|
+
const typeMethodMap = {
|
|
183
|
+
to: 'navigateTo',
|
|
184
|
+
redirect: 'redirectTo',
|
|
185
|
+
back: 'navigateBack',
|
|
186
|
+
switch: 'switchTab',
|
|
187
|
+
reLaunch: 'reLaunch'
|
|
185
188
|
}
|
|
186
|
-
|
|
189
|
+
const method = typeMethodMap[action.type]
|
|
190
|
+
throw new Error(`${method}:fail page "${to.path}" is not found`)
|
|
187
191
|
}
|
|
188
192
|
}
|
|
189
193
|
|
|
@@ -195,6 +199,7 @@ function createApp ({ componentsMap, Vue, pagesMap, firstPage, VueRouter, App, t
|
|
|
195
199
|
case 'to':
|
|
196
200
|
stack.push(insertItem)
|
|
197
201
|
global.__mpxRouter.needCache = insertItem
|
|
202
|
+
if (action.eventChannel) global.__mpxRouter.eventChannelMap[to.path.slice(1)] = action.eventChannel
|
|
198
203
|
break
|
|
199
204
|
case 'back':
|
|
200
205
|
global.__mpxRouter.needRemove = stack.splice(stack.length - action.delta, action.delta)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpxjs/webpack-plugin",
|
|
3
|
-
"version": "2.9.0-beta.
|
|
3
|
+
"version": "2.9.0-beta.2",
|
|
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": "
|
|
85
|
+
"gitHead": "2d61bab77c50eccb7470b9b9bd644e7bd6510467"
|
|
86
86
|
}
|