@mpxjs/webpack-plugin 2.8.41 → 2.8.43
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 +15 -4
- package/lib/json-compiler/helper.js +16 -4
- package/lib/json-compiler/index.js +54 -25
- package/lib/loader.js +2 -9
- package/lib/native-loader.js +3 -8
- package/lib/platform/json/wx/index.js +21 -0
- package/lib/platform/template/wx/component-config/hypen-tag-name.js +2 -6
- package/lib/platform/template/wx/component-config/index.js +2 -2
- package/lib/platform/template/wx/index.js +9 -9
- package/lib/runtime/base.styl +0 -5
- package/lib/runtime/components/web/mpx-scroll-view.vue +8 -4
- package/lib/utils/ts-loader-watch-run-loader-filter.js +3 -4
- package/package.json +2 -2
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
|
-
|
|
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', '',
|
|
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)
|
|
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 = {
|
|
@@ -177,14 +181,14 @@ module.exports = function (content) {
|
|
|
177
181
|
type: 'json',
|
|
178
182
|
waterfall: true,
|
|
179
183
|
warn: emitWarning,
|
|
180
|
-
error: emitError
|
|
184
|
+
error: emitError,
|
|
185
|
+
data: {
|
|
186
|
+
// polyfill global usingComponents & record globalComponents
|
|
187
|
+
globalComponents: mpx.usingComponents
|
|
188
|
+
}
|
|
181
189
|
}
|
|
182
190
|
if (!isApp) {
|
|
183
191
|
rulesRunnerOptions.mainKey = pagesMap[resourcePath] ? 'page' : 'component'
|
|
184
|
-
// polyfill global usingComponents
|
|
185
|
-
rulesRunnerOptions.data = {
|
|
186
|
-
globalComponents: mpx.usingComponents
|
|
187
|
-
}
|
|
188
192
|
}
|
|
189
193
|
|
|
190
194
|
const rulesRunner = getRulesRunner(rulesRunnerOptions)
|
|
@@ -193,22 +197,47 @@ module.exports = function (content) {
|
|
|
193
197
|
rulesRunner(json)
|
|
194
198
|
}
|
|
195
199
|
|
|
196
|
-
if (isApp
|
|
200
|
+
if (isApp) {
|
|
201
|
+
Object.assign(mpx.usingComponents, json.usingComponents)
|
|
197
202
|
// 在 rulesRunner 运行后保存全局注册组件
|
|
198
|
-
|
|
203
|
+
// todo 其余地方在使用mpx.usingComponents时存在缓存问题,要规避该问题需要在所有使用mpx.usingComponents的loader中添加app resourcePath作为fileDependency,但对于缓存有效率影响巨大
|
|
204
|
+
// todo 需要考虑一种精准控制缓存的方式,仅在全局组件发生变更时才使相关使用方的缓存失效,例如按需在相关模块上动态添加request query?
|
|
205
|
+
this._module.addPresentationalDependency(new RecordGlobalComponentsDependency(mpx.usingComponents, this.context))
|
|
199
206
|
}
|
|
200
207
|
|
|
201
208
|
const processComponents = (components, context, callback) => {
|
|
202
209
|
if (components) {
|
|
203
210
|
async.eachOf(components, (component, name, callback) => {
|
|
204
|
-
processComponent(component, context, { relativePath }, (err, entry) => {
|
|
211
|
+
processComponent(component, context, { relativePath }, (err, entry, root, placeholder) => {
|
|
205
212
|
if (err === RESOLVE_IGNORED_ERR) {
|
|
206
213
|
delete components[name]
|
|
207
214
|
return callback()
|
|
208
215
|
}
|
|
209
216
|
if (err) return callback(err)
|
|
210
217
|
components[name] = entry
|
|
211
|
-
|
|
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
|
+
}
|
|
212
241
|
})
|
|
213
242
|
}, callback)
|
|
214
243
|
} else {
|
package/lib/loader.js
CHANGED
|
@@ -120,7 +120,6 @@ module.exports = function (content) {
|
|
|
120
120
|
|
|
121
121
|
let usingComponents = [].concat(Object.keys(mpx.usingComponents))
|
|
122
122
|
let componentPlaceholder = []
|
|
123
|
-
|
|
124
123
|
let componentGenerics = {}
|
|
125
124
|
|
|
126
125
|
if (parts.json && parts.json.content) {
|
|
@@ -134,18 +133,12 @@ module.exports = function (content) {
|
|
|
134
133
|
}
|
|
135
134
|
if (!isApp) {
|
|
136
135
|
rulesRunnerOptions.mainKey = pagesMap[resourcePath] ? 'page' : 'component'
|
|
137
|
-
// polyfill global usingComponents
|
|
138
|
-
// 预读json时无需注入polyfill全局组件
|
|
139
|
-
// rulesRunnerOptions.data = {
|
|
140
|
-
// globalComponents: mpx.usingComponents
|
|
141
|
-
// }
|
|
142
136
|
}
|
|
143
|
-
|
|
137
|
+
const rulesRunner = getRulesRunner(rulesRunnerOptions)
|
|
144
138
|
try {
|
|
145
139
|
const ret = JSON5.parse(parts.json.content)
|
|
140
|
+
if (rulesRunner) rulesRunner(ret)
|
|
146
141
|
if (ret.usingComponents) {
|
|
147
|
-
const rulesRunner = getRulesRunner(rulesRunnerOptions)
|
|
148
|
-
if (rulesRunner) rulesRunner(ret)
|
|
149
142
|
usingComponents = usingComponents.concat(Object.keys(ret.usingComponents))
|
|
150
143
|
}
|
|
151
144
|
if (ret.componentPlaceholder) {
|
package/lib/native-loader.js
CHANGED
|
@@ -137,6 +137,7 @@ module.exports = function (content) {
|
|
|
137
137
|
} catch (e) {
|
|
138
138
|
return callback(e)
|
|
139
139
|
}
|
|
140
|
+
let usingComponents = Object.keys(mpx.usingComponents)
|
|
140
141
|
const rulesRunnerOptions = {
|
|
141
142
|
mode,
|
|
142
143
|
srcMode,
|
|
@@ -147,16 +148,10 @@ module.exports = function (content) {
|
|
|
147
148
|
}
|
|
148
149
|
if (!isApp) {
|
|
149
150
|
rulesRunnerOptions.mainKey = pagesMap[resourcePath] ? 'page' : 'component'
|
|
150
|
-
// polyfill global usingComponents
|
|
151
|
-
// 预读json时无需注入polyfill全局组件
|
|
152
|
-
// rulesRunnerOptions.data = {
|
|
153
|
-
// globalComponents: mpx.usingComponents
|
|
154
|
-
// }
|
|
155
151
|
}
|
|
156
|
-
|
|
152
|
+
const rulesRunner = getRulesRunner(rulesRunnerOptions)
|
|
153
|
+
if (rulesRunner) rulesRunner(json)
|
|
157
154
|
if (json.usingComponents) {
|
|
158
|
-
const rulesRunner = getRulesRunner(rulesRunnerOptions)
|
|
159
|
-
if (rulesRunner) rulesRunner(json)
|
|
160
155
|
usingComponents = usingComponents.concat(Object.keys(json.usingComponents))
|
|
161
156
|
}
|
|
162
157
|
const {
|
|
@@ -70,6 +70,13 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
70
70
|
return input
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
function fillGlobalComponents (input, { globalComponents }) {
|
|
74
|
+
if (globalComponents) {
|
|
75
|
+
Object.assign(globalComponents, input.usingComponents)
|
|
76
|
+
}
|
|
77
|
+
return input
|
|
78
|
+
}
|
|
79
|
+
|
|
73
80
|
// 处理 ali swan 的组件名大写字母转连字符:WordExample/wordExample -> word-example
|
|
74
81
|
function componentNameCapitalToHyphen (type) {
|
|
75
82
|
return function (input) {
|
|
@@ -318,6 +325,20 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
318
325
|
tt: deletePath(),
|
|
319
326
|
jd: deletePath(true)
|
|
320
327
|
},
|
|
328
|
+
{
|
|
329
|
+
test: 'usingComponents',
|
|
330
|
+
ali: componentNameCapitalToHyphen('usingComponents'),
|
|
331
|
+
swan: componentNameCapitalToHyphen('usingComponents')
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
test: 'usingComponents',
|
|
335
|
+
// todo ali 2.0已支持全局组件,待移除
|
|
336
|
+
ali: fillGlobalComponents,
|
|
337
|
+
qq: fillGlobalComponents,
|
|
338
|
+
swan: fillGlobalComponents,
|
|
339
|
+
tt: fillGlobalComponents,
|
|
340
|
+
jd: fillGlobalComponents
|
|
341
|
+
},
|
|
321
342
|
{
|
|
322
343
|
test: 'usingComponents',
|
|
323
344
|
// todo ali 2.0已支持全局组件,待移除
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
const { capitalToHyphen } = require('../../../../utils/string')
|
|
2
2
|
|
|
3
3
|
module.exports = function () {
|
|
4
|
-
function convertTagName (name) {
|
|
5
|
-
return capitalToHyphen(name)
|
|
6
|
-
}
|
|
7
|
-
|
|
8
4
|
return {
|
|
9
5
|
// tag name contains capital letters
|
|
10
6
|
test: /[A-Z]/,
|
|
11
|
-
ali:
|
|
12
|
-
swan:
|
|
7
|
+
ali: capitalToHyphen,
|
|
8
|
+
swan: capitalToHyphen
|
|
13
9
|
}
|
|
14
10
|
}
|
|
@@ -8,7 +8,7 @@ const checkbox = require('./checkbox')
|
|
|
8
8
|
const coverImage = require('./cover-image')
|
|
9
9
|
const coverView = require('./cover-view')
|
|
10
10
|
const form = require('./form')
|
|
11
|
-
const
|
|
11
|
+
const hyphenTagName = require('./hypen-tag-name')
|
|
12
12
|
const icon = require('./icon')
|
|
13
13
|
const image = require('./image')
|
|
14
14
|
const input = require('./input')
|
|
@@ -118,7 +118,7 @@ module.exports = function getComponentConfigs ({ warn, error }) {
|
|
|
118
118
|
camera({ print }),
|
|
119
119
|
livePlayer({ print }),
|
|
120
120
|
livePusher({ print }),
|
|
121
|
-
|
|
121
|
+
hyphenTagName({ print }),
|
|
122
122
|
component()
|
|
123
123
|
]
|
|
124
124
|
}
|
|
@@ -190,16 +190,16 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
190
190
|
}
|
|
191
191
|
const styleBinding = []
|
|
192
192
|
el.isStyleParsed = true
|
|
193
|
-
|
|
193
|
+
// 不过滤的话每一个属性都要 parse
|
|
194
|
+
el.attrsList.filter(item => this.test.test(item.name)).forEach((item) => {
|
|
194
195
|
const parsed = parseMustache(item.value)
|
|
195
|
-
if (item.name === 'style') {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
styleBinding.push(parseMustache(item.value).result)
|
|
196
|
+
if (item.name === 'wx:style') {
|
|
197
|
+
styleBinding.push(parsed.result)
|
|
198
|
+
// item.name === 'style'
|
|
199
|
+
} else if (parsed.hasBinding || parsed.result.indexOf('rpx') > -1) {
|
|
200
|
+
styleBinding.push(parsed.result)
|
|
201
|
+
} else {
|
|
202
|
+
styleBinding.push(JSON.stringify(item.value))
|
|
203
203
|
}
|
|
204
204
|
})
|
|
205
205
|
return {
|
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
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
module.exports = (loaders, loaderIndex) => {
|
|
2
|
-
for (let
|
|
3
|
-
const currentLoader = loaders[
|
|
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
|
-
|
|
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.
|
|
3
|
+
"version": "2.8.43",
|
|
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": "f1066822d83e958f6266218c51c21b2ebb2ad04b"
|
|
86
86
|
}
|