@mpxjs/webpack-plugin 2.7.0-beta.1 → 2.7.0-beta.13
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/AppEntryDependency.js +2 -0
- package/lib/dependencies/CommonJsVariableDependency.js +9 -5
- package/lib/dependencies/DynamicEntryDependency.js +8 -3
- package/lib/dependencies/FlagPluginDependency.js +1 -0
- package/lib/dependencies/RecordIndependentDependency.js +41 -0
- package/lib/dependencies/{RecordStaticResourceDependency.js → RecordResourceMapDependency.js} +12 -7
- package/lib/dependencies/RemoveEntryDependency.js +40 -0
- package/lib/dependencies/ResolveDependency.js +8 -7
- package/lib/extractor.js +7 -4
- package/lib/file-loader.js +2 -2
- package/lib/helpers.js +1 -0
- package/lib/index.js +218 -146
- package/lib/json-compiler/helper.js +21 -25
- package/lib/json-compiler/index.js +70 -54
- package/lib/json-compiler/plugin.js +21 -5
- package/lib/loader.js +59 -77
- package/lib/native-loader.js +28 -65
- package/lib/parser.js +1 -2
- package/lib/platform/json/wx/index.js +7 -2
- package/lib/platform/template/wx/component-config/button.js +3 -3
- package/lib/platform/template/wx/component-config/navigator.js +1 -1
- package/lib/record-loader.js +2 -2
- package/lib/resolver/AddEnvPlugin.js +3 -2
- package/lib/resolver/AddModePlugin.js +3 -2
- package/lib/runtime/base.styl +5 -0
- package/lib/runtime/components/web/getInnerListeners.js +51 -45
- package/lib/runtime/components/web/mpx-keep-alive.vue +4 -1
- package/lib/runtime/components/web/mpx-tab-bar-container.vue +2 -2
- package/lib/runtime/optionProcessor.js +5 -20
- package/lib/runtime/stringify.wxs +3 -3
- package/lib/selector.js +23 -5
- package/lib/style-compiler/index.js +8 -10
- package/lib/template-compiler/bind-this.js +4 -4
- package/lib/template-compiler/compiler.js +109 -46
- package/lib/template-compiler/index.js +3 -6
- package/lib/template-compiler/trans-dynamic-class-expr.js +3 -3
- package/lib/utils/const.js +5 -1
- package/lib/utils/eval-json-js.js +31 -0
- package/lib/utils/get-json-content.js +41 -0
- package/lib/utils/resolve.js +13 -0
- package/lib/web/processJSON.js +113 -142
- package/lib/web/processScript.js +30 -30
- package/lib/web/processTemplate.js +56 -40
- package/lib/wxs/i18n-loader.js +1 -3
- package/lib/wxs/loader.js +24 -27
- package/lib/wxs/pre-loader.js +7 -8
- package/lib/wxss/processCss.js +44 -44
- package/package.json +8 -8
- package/lib/built-in-loader.js +0 -49
- package/lib/utils/get-main-compilation.js +0 -6
- package/lib/utils/read-json-for-src.js +0 -34
package/lib/loader.js
CHANGED
|
@@ -11,10 +11,13 @@ const processJSON = require('./web/processJSON')
|
|
|
11
11
|
const processScript = require('./web/processScript')
|
|
12
12
|
const processStyles = require('./web/processStyles')
|
|
13
13
|
const processTemplate = require('./web/processTemplate')
|
|
14
|
-
const
|
|
14
|
+
const getJSONContent = require('./utils/get-json-content')
|
|
15
15
|
const normalize = require('./utils/normalize')
|
|
16
16
|
const getEntryName = require('./utils/get-entry-name')
|
|
17
17
|
const AppEntryDependency = require('./dependencies/AppEntryDependency')
|
|
18
|
+
const RecordResourceMapDependency = require('./dependencies/RecordResourceMapDependency')
|
|
19
|
+
const CommonJsVariableDependency = require('./dependencies/CommonJsVariableDependency')
|
|
20
|
+
const { MPX_APP_MODULE_ID } = require('./utils/const')
|
|
18
21
|
|
|
19
22
|
module.exports = function (content) {
|
|
20
23
|
this.cacheable()
|
|
@@ -24,14 +27,13 @@ module.exports = function (content) {
|
|
|
24
27
|
return content
|
|
25
28
|
}
|
|
26
29
|
const { resourcePath, queryObj } = parseRequest(this.resource)
|
|
27
|
-
const
|
|
30
|
+
const packageRoot = queryObj.packageRoot || mpx.currentPackageRoot
|
|
31
|
+
const packageName = packageRoot || 'main'
|
|
32
|
+
const isIndependent = queryObj.isIndependent
|
|
28
33
|
const pagesMap = mpx.pagesMap
|
|
29
34
|
const componentsMap = mpx.componentsMap[packageName]
|
|
30
|
-
const resolveMode = mpx.resolveMode
|
|
31
|
-
const projectRoot = mpx.projectRoot
|
|
32
35
|
const mode = mpx.mode
|
|
33
36
|
const env = mpx.env
|
|
34
|
-
const defs = mpx.defs
|
|
35
37
|
const i18n = mpx.i18n
|
|
36
38
|
const globalSrcMode = mpx.srcMode
|
|
37
39
|
const localSrcMode = queryObj.mode
|
|
@@ -39,16 +41,6 @@ module.exports = function (content) {
|
|
|
39
41
|
const vueContentCache = mpx.vueContentCache
|
|
40
42
|
const autoScope = matchCondition(resourcePath, mpx.autoScopeRules)
|
|
41
43
|
|
|
42
|
-
// 支持资源query传入page或component支持页面/组件单独编译
|
|
43
|
-
if ((queryObj.component && !componentsMap[resourcePath]) || (queryObj.page && !pagesMap[resourcePath])) {
|
|
44
|
-
const entryName = getEntryName(this)
|
|
45
|
-
if (queryObj.component) {
|
|
46
|
-
componentsMap[resourcePath] = entryName || 'noEntryComponent'
|
|
47
|
-
} else {
|
|
48
|
-
pagesMap[resourcePath] = entryName || 'noEntryPage'
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
44
|
let ctorType = 'app'
|
|
53
45
|
if (pagesMap[resourcePath]) {
|
|
54
46
|
// page
|
|
@@ -58,24 +50,23 @@ module.exports = function (content) {
|
|
|
58
50
|
ctorType = 'component'
|
|
59
51
|
}
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this
|
|
53
|
+
// 支持资源query传入isPage或isComponent支持页面/组件单独编译
|
|
54
|
+
if (queryObj.isComponent || queryObj.isPage) {
|
|
55
|
+
const entryName = getEntryName(this) || (queryObj.isComponent ? 'noEntryComponent' : 'noEntryPage')
|
|
56
|
+
ctorType = queryObj.isComponent ? 'component' : 'page'
|
|
57
|
+
this._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, ctorType, entryName, packageRoot))
|
|
64
58
|
}
|
|
65
59
|
|
|
66
60
|
const loaderContext = this
|
|
67
61
|
const stringifyRequest = r => loaderUtils.stringifyRequest(loaderContext, r)
|
|
68
62
|
const isProduction = this.minimize || process.env.NODE_ENV === 'production'
|
|
69
|
-
|
|
70
63
|
const filePath = resourcePath
|
|
71
|
-
|
|
72
|
-
const moduleId = 'm' + mpx.pathHash(filePath)
|
|
64
|
+
const moduleId = ctorType === 'app' ? MPX_APP_MODULE_ID : 'm' + mpx.pathHash(filePath)
|
|
73
65
|
|
|
74
66
|
const parts = parseComponent(content, {
|
|
75
67
|
filePath,
|
|
76
68
|
needMap: this.sourceMap,
|
|
77
69
|
mode,
|
|
78
|
-
defs,
|
|
79
70
|
env
|
|
80
71
|
})
|
|
81
72
|
|
|
@@ -84,16 +75,11 @@ module.exports = function (content) {
|
|
|
84
75
|
|
|
85
76
|
async.waterfall([
|
|
86
77
|
(callback) => {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (err) return callback(err)
|
|
91
|
-
json.content = result
|
|
92
|
-
callback()
|
|
93
|
-
})
|
|
94
|
-
} else {
|
|
78
|
+
getJSONContent(parts.json || {}, loaderContext, (err, content) => {
|
|
79
|
+
if (err) return callback(err)
|
|
80
|
+
if (parts.json) parts.json.content = content
|
|
95
81
|
callback()
|
|
96
|
-
}
|
|
82
|
+
})
|
|
97
83
|
},
|
|
98
84
|
(callback) => {
|
|
99
85
|
// web输出模式下没有任何inject,可以通过cache直接返回,由于读取src json可能会新增模块依赖,需要在之后返回缓存内容
|
|
@@ -126,8 +112,8 @@ module.exports = function (content) {
|
|
|
126
112
|
|
|
127
113
|
// 处理mode为web时输出vue格式文件
|
|
128
114
|
if (mode === 'web') {
|
|
129
|
-
if (ctorType === 'app' && !queryObj.
|
|
130
|
-
const request = addQuery(this.resource, {
|
|
115
|
+
if (ctorType === 'app' && !queryObj.isApp) {
|
|
116
|
+
const request = addQuery(this.resource, { isApp: true })
|
|
131
117
|
output += `
|
|
132
118
|
import App from ${stringifyRequest(request)}
|
|
133
119
|
import Vue from 'vue'
|
|
@@ -148,20 +134,15 @@ module.exports = function (content) {
|
|
|
148
134
|
async.parallel([
|
|
149
135
|
(callback) => {
|
|
150
136
|
processTemplate(parts.template, {
|
|
137
|
+
loaderContext,
|
|
151
138
|
hasScoped,
|
|
152
139
|
hasComment,
|
|
153
140
|
isNative,
|
|
154
|
-
mode,
|
|
155
141
|
srcMode,
|
|
156
|
-
defs,
|
|
157
|
-
loaderContext,
|
|
158
142
|
moduleId,
|
|
159
143
|
ctorType,
|
|
160
144
|
usingComponents,
|
|
161
|
-
componentGenerics
|
|
162
|
-
decodeHTMLText: mpx.decodeHTMLText,
|
|
163
|
-
externalClasses: mpx.externalClasses,
|
|
164
|
-
checkUsingComponents: mpx.checkUsingComponents
|
|
145
|
+
componentGenerics
|
|
165
146
|
}, callback)
|
|
166
147
|
},
|
|
167
148
|
(callback) => {
|
|
@@ -173,16 +154,9 @@ module.exports = function (content) {
|
|
|
173
154
|
},
|
|
174
155
|
(callback) => {
|
|
175
156
|
processJSON(parts.json, {
|
|
176
|
-
mode,
|
|
177
|
-
env,
|
|
178
|
-
defs,
|
|
179
|
-
resolveMode,
|
|
180
157
|
loaderContext,
|
|
181
158
|
pagesMap,
|
|
182
|
-
|
|
183
|
-
pathHash: mpx.pathHash,
|
|
184
|
-
componentsMap,
|
|
185
|
-
projectRoot
|
|
159
|
+
componentsMap
|
|
186
160
|
}, callback)
|
|
187
161
|
}
|
|
188
162
|
], (err, res) => {
|
|
@@ -198,23 +172,20 @@ module.exports = function (content) {
|
|
|
198
172
|
}
|
|
199
173
|
|
|
200
174
|
processScript(parts.script, {
|
|
175
|
+
loaderContext,
|
|
201
176
|
ctorType,
|
|
202
177
|
srcMode,
|
|
203
|
-
loaderContext,
|
|
204
178
|
isProduction,
|
|
205
|
-
i18n,
|
|
206
179
|
componentGenerics,
|
|
207
|
-
projectRoot,
|
|
208
180
|
jsonConfig: jsonRes.jsonObj,
|
|
209
|
-
|
|
181
|
+
outputPath: queryObj.outputPath || '',
|
|
210
182
|
tabBarMap: jsonRes.tabBarMap,
|
|
211
183
|
tabBarStr: jsonRes.tabBarStr,
|
|
212
184
|
builtInComponentsMap: templateRes.builtInComponentsMap,
|
|
213
185
|
genericsInfo: templateRes.genericsInfo,
|
|
214
186
|
wxsModuleMap: templateRes.wxsModuleMap,
|
|
215
187
|
localComponentsMap: jsonRes.localComponentsMap,
|
|
216
|
-
localPagesMap: jsonRes.localPagesMap
|
|
217
|
-
forceDisableBuiltInLoader: mpx.forceDisableBuiltInLoader
|
|
188
|
+
localPagesMap: jsonRes.localPagesMap
|
|
218
189
|
}, callback)
|
|
219
190
|
}
|
|
220
191
|
], (err, scriptRes) => {
|
|
@@ -225,6 +196,19 @@ module.exports = function (content) {
|
|
|
225
196
|
})
|
|
226
197
|
}
|
|
227
198
|
|
|
199
|
+
const moduleGraph = this._compilation.moduleGraph
|
|
200
|
+
|
|
201
|
+
const issuer = moduleGraph.getIssuer(this._module)
|
|
202
|
+
|
|
203
|
+
if (issuer) {
|
|
204
|
+
return callback(new Error(`Current ${ctorType} [${this.resourcePath}] is issued by [${issuer.resource}], which is not allowed!`))
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (ctorType === 'app') {
|
|
208
|
+
const appName = getEntryName(this)
|
|
209
|
+
this._module.addPresentationalDependency(new AppEntryDependency(resourcePath, appName))
|
|
210
|
+
}
|
|
211
|
+
|
|
228
212
|
const {
|
|
229
213
|
getRequire
|
|
230
214
|
} = createHelpers(loaderContext)
|
|
@@ -234,14 +218,21 @@ module.exports = function (content) {
|
|
|
234
218
|
if (!isProduction) {
|
|
235
219
|
output += `global.currentResource = ${JSON.stringify(filePath)}\n`
|
|
236
220
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
221
|
+
// 为app或独立分包页面注入i18n
|
|
222
|
+
if (i18n && (ctorType === 'app' || (ctorType === 'page' && isIndependent))) {
|
|
240
223
|
const i18nWxsPath = normalize.lib('runtime/i18n.wxs')
|
|
241
224
|
const i18nWxsLoaderPath = normalize.lib('wxs/i18n-loader.js')
|
|
242
225
|
const i18nWxsRequest = i18nWxsLoaderPath + '!' + i18nWxsPath
|
|
226
|
+
const i18nMethodsVar = 'i18nMethods'
|
|
227
|
+
this._module.addDependency(new CommonJsVariableDependency(i18nWxsRequest, i18nMethodsVar))
|
|
243
228
|
|
|
244
|
-
output += `global.
|
|
229
|
+
output += `if (!global.i18n) {
|
|
230
|
+
global.i18n = ${JSON.stringify({
|
|
231
|
+
locale: i18n.locale,
|
|
232
|
+
version: 0
|
|
233
|
+
})}
|
|
234
|
+
global.i18nMethods = ${i18nMethodsVar}
|
|
235
|
+
}\n`
|
|
245
236
|
}
|
|
246
237
|
// 注入构造函数
|
|
247
238
|
let ctor = 'App'
|
|
@@ -259,6 +250,7 @@ module.exports = function (content) {
|
|
|
259
250
|
output += `global.currentCtorType = ${JSON.stringify(ctor.replace(/^./, (match) => {
|
|
260
251
|
return match.toLowerCase()
|
|
261
252
|
}))}\n`
|
|
253
|
+
output += `global.currentResourceType = '${ctorType}'\n`
|
|
262
254
|
|
|
263
255
|
// template
|
|
264
256
|
output += '/* template */\n'
|
|
@@ -291,9 +283,10 @@ module.exports = function (content) {
|
|
|
291
283
|
}
|
|
292
284
|
// require style
|
|
293
285
|
if (style.src) {
|
|
294
|
-
// style src会被特殊处理为全局复用样式,不添加resourcePath,添加isStatic及
|
|
286
|
+
// style src会被特殊处理为全局复用样式,不添加resourcePath,添加isStatic及issuerFile
|
|
295
287
|
extraOptions.isStatic = true
|
|
296
|
-
|
|
288
|
+
const issuerResource = addQuery(this.resource, { type: 'styles' }, true)
|
|
289
|
+
extraOptions.issuerFile = mpx.getExtractedFile(issuerResource)
|
|
297
290
|
}
|
|
298
291
|
output += getRequire('styles', style, extraOptions, i) + '\n'
|
|
299
292
|
})
|
|
@@ -310,28 +303,17 @@ module.exports = function (content) {
|
|
|
310
303
|
// script
|
|
311
304
|
output += '/* script */\n'
|
|
312
305
|
let scriptSrcMode = srcMode
|
|
313
|
-
|
|
306
|
+
// 给予script默认值, 确保生成js request以自动补全js
|
|
307
|
+
const script = parts.script || {}
|
|
314
308
|
if (script) {
|
|
315
309
|
scriptSrcMode = script.mode || scriptSrcMode
|
|
316
310
|
if (scriptSrcMode) output += `global.currentSrcMode = ${JSON.stringify(scriptSrcMode)}\n`
|
|
317
|
-
|
|
311
|
+
// 传递ctorType以补全js内容
|
|
312
|
+
const extraOptions = {
|
|
313
|
+
ctorType
|
|
314
|
+
}
|
|
318
315
|
if (script.src) extraOptions.resourcePath = resourcePath
|
|
319
316
|
output += getRequire('script', script, extraOptions) + '\n'
|
|
320
|
-
} else {
|
|
321
|
-
switch (ctorType) {
|
|
322
|
-
case 'app':
|
|
323
|
-
output += 'import {createApp} from "@mpxjs/core"\n' +
|
|
324
|
-
'createApp({})\n'
|
|
325
|
-
break
|
|
326
|
-
case 'page':
|
|
327
|
-
output += 'import {createPage} from "@mpxjs/core"\n' +
|
|
328
|
-
'createPage({})\n'
|
|
329
|
-
break
|
|
330
|
-
case 'component':
|
|
331
|
-
output += 'import {createComponent} from "@mpxjs/core"\n' +
|
|
332
|
-
'createComponent({})\n'
|
|
333
|
-
}
|
|
334
|
-
output += '\n'
|
|
335
317
|
}
|
|
336
318
|
callback(null, output)
|
|
337
319
|
}
|
package/lib/native-loader.js
CHANGED
|
@@ -3,10 +3,11 @@ const JSON5 = require('json5')
|
|
|
3
3
|
const parseRequest = require('./utils/parse-request')
|
|
4
4
|
const config = require('./config')
|
|
5
5
|
const createHelpers = require('./helpers')
|
|
6
|
-
const
|
|
6
|
+
const getJSONContent = require('./utils/get-json-content')
|
|
7
7
|
const async = require('async')
|
|
8
8
|
const matchCondition = require('./utils/match-condition')
|
|
9
9
|
const fixUsingComponent = require('./utils/fix-using-component')
|
|
10
|
+
const { JSON_JS_EXT } = require('./utils/const')
|
|
10
11
|
|
|
11
12
|
module.exports = function (content) {
|
|
12
13
|
this.cacheable()
|
|
@@ -23,7 +24,6 @@ module.exports = function (content) {
|
|
|
23
24
|
const moduleId = 'm' + mpx.pathHash(filePath)
|
|
24
25
|
const { resourcePath, queryObj } = parseRequest(this.resource)
|
|
25
26
|
const mode = mpx.mode
|
|
26
|
-
const defs = mpx.defs
|
|
27
27
|
const globalSrcMode = mpx.srcMode
|
|
28
28
|
const localSrcMode = queryObj.mode
|
|
29
29
|
const packageName = queryObj.packageRoot || mpx.currentPackageRoot || 'main'
|
|
@@ -33,12 +33,10 @@ module.exports = function (content) {
|
|
|
33
33
|
const resourceName = path.join(parsed.dir, parsed.name)
|
|
34
34
|
const isApp = !(pagesMap[resourcePath] || componentsMap[resourcePath])
|
|
35
35
|
const srcMode = localSrcMode || globalSrcMode
|
|
36
|
-
const fs = this._compiler.inputFileSystem
|
|
37
36
|
const typeExtMap = config[srcMode].typeExtMap
|
|
38
37
|
const typeResourceMap = {}
|
|
39
38
|
const autoScope = matchCondition(resourcePath, mpx.autoScopeRules)
|
|
40
39
|
|
|
41
|
-
const EXT_MPX_JSON = '.json.js'
|
|
42
40
|
const CSS_LANG_EXT_MAP = {
|
|
43
41
|
less: '.less',
|
|
44
42
|
stylus: '.styl',
|
|
@@ -46,36 +44,14 @@ module.exports = function (content) {
|
|
|
46
44
|
scss: '.scss'
|
|
47
45
|
}
|
|
48
46
|
|
|
49
|
-
let
|
|
47
|
+
let useJSONJS = false
|
|
50
48
|
let cssLang = ''
|
|
51
49
|
const hasScoped = (queryObj.scoped || autoScope) && mode === 'ali'
|
|
52
50
|
const hasComment = false
|
|
53
51
|
const isNative = true
|
|
54
52
|
|
|
55
|
-
const tryEvalMPXJSON = (callback) => {
|
|
56
|
-
const { rawResourcePath } = parseRequest(typeResourceMap['json'])
|
|
57
|
-
const _src = rawResourcePath
|
|
58
|
-
this.addDependency(_src)
|
|
59
|
-
fs.readFile(_src, (err, raw) => {
|
|
60
|
-
if (err) {
|
|
61
|
-
callback(err)
|
|
62
|
-
} else {
|
|
63
|
-
try {
|
|
64
|
-
const source = raw.toString('utf-8')
|
|
65
|
-
const text = mpxJSON.compileMPXJSONText({ source, defs, filePath: _src })
|
|
66
|
-
callback(null, text)
|
|
67
|
-
} catch (e) {
|
|
68
|
-
callback(e)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
})
|
|
72
|
-
}
|
|
73
|
-
|
|
74
53
|
const checkFileExists = (extName, callback) => {
|
|
75
|
-
this.resolve(parsed.dir, resourceName + extName,
|
|
76
|
-
err = null
|
|
77
|
-
callback(err, result)
|
|
78
|
-
})
|
|
54
|
+
this.resolve(parsed.dir, resourceName + extName, callback)
|
|
79
55
|
}
|
|
80
56
|
|
|
81
57
|
function checkCSSLangFiles (callback) {
|
|
@@ -89,7 +65,7 @@ module.exports = function (content) {
|
|
|
89
65
|
if (!err && result) {
|
|
90
66
|
results[i] = result
|
|
91
67
|
}
|
|
92
|
-
callback(
|
|
68
|
+
callback()
|
|
93
69
|
})
|
|
94
70
|
}, function (err) {
|
|
95
71
|
for (let i = 0; i < langs.length; i++) {
|
|
@@ -103,14 +79,13 @@ module.exports = function (content) {
|
|
|
103
79
|
})
|
|
104
80
|
}
|
|
105
81
|
|
|
106
|
-
function
|
|
107
|
-
|
|
108
|
-
checkFileExists(EXT_MPX_JSON, (err, result) => {
|
|
82
|
+
function checkJSONJSFile (callback) {
|
|
83
|
+
checkFileExists(JSON_JS_EXT, (err, result) => {
|
|
109
84
|
if (!err && result) {
|
|
110
85
|
typeResourceMap.json = result
|
|
111
|
-
|
|
86
|
+
useJSONJS = true
|
|
112
87
|
}
|
|
113
|
-
callback(
|
|
88
|
+
callback()
|
|
114
89
|
})
|
|
115
90
|
}
|
|
116
91
|
|
|
@@ -119,55 +94,42 @@ module.exports = function (content) {
|
|
|
119
94
|
(callback) => {
|
|
120
95
|
async.parallel([
|
|
121
96
|
checkCSSLangFiles,
|
|
122
|
-
|
|
97
|
+
checkJSONJSFile
|
|
123
98
|
], (err) => {
|
|
124
99
|
callback(err)
|
|
125
100
|
})
|
|
126
101
|
},
|
|
127
102
|
(callback) => {
|
|
128
103
|
async.forEachOf(typeExtMap, (ext, key, callback) => {
|
|
129
|
-
// 检测到
|
|
130
|
-
if (
|
|
104
|
+
// 检测到jsonjs或cssLang时跳过对应类型文件检测
|
|
105
|
+
if (typeResourceMap[key]) {
|
|
131
106
|
return callback()
|
|
132
107
|
}
|
|
133
108
|
checkFileExists(ext, (err, result) => {
|
|
134
109
|
if (!err && result) {
|
|
135
110
|
typeResourceMap[key] = result
|
|
136
111
|
}
|
|
137
|
-
callback(
|
|
112
|
+
callback()
|
|
138
113
|
})
|
|
139
114
|
}, callback)
|
|
140
115
|
},
|
|
141
116
|
(callback) => {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
if (typeResourceMap['json']) {
|
|
147
|
-
// eslint-disable-next-line handle-callback-err
|
|
148
|
-
const { rawResourcePath } = parseRequest(typeResourceMap['json'])
|
|
149
|
-
fs.readFile(rawResourcePath, (err, raw) => {
|
|
150
|
-
if (err) {
|
|
151
|
-
callback(err)
|
|
152
|
-
} else {
|
|
153
|
-
callback(null, raw.toString('utf-8'))
|
|
154
|
-
}
|
|
155
|
-
})
|
|
156
|
-
} else {
|
|
157
|
-
callback(null, '{}')
|
|
158
|
-
}
|
|
159
|
-
}
|
|
117
|
+
getJSONContent({
|
|
118
|
+
src: typeResourceMap.json,
|
|
119
|
+
useJSONJS
|
|
120
|
+
}, this, callback)
|
|
160
121
|
}, (content, callback) => {
|
|
161
|
-
let
|
|
122
|
+
let json
|
|
162
123
|
try {
|
|
163
|
-
|
|
164
|
-
if (ret.usingComponents) {
|
|
165
|
-
fixUsingComponent(ret.usingComponents, mode)
|
|
166
|
-
usingComponents = usingComponents.concat(Object.keys(ret.usingComponents))
|
|
167
|
-
}
|
|
124
|
+
json = JSON5.parse(content)
|
|
168
125
|
} catch (e) {
|
|
126
|
+
return callback(e)
|
|
127
|
+
}
|
|
128
|
+
let usingComponents = Object.keys(mpx.usingComponents)
|
|
129
|
+
if (json.usingComponents) {
|
|
130
|
+
fixUsingComponent(json.usingComponents, mode)
|
|
131
|
+
usingComponents = usingComponents.concat(Object.keys(json.usingComponents))
|
|
169
132
|
}
|
|
170
|
-
|
|
171
133
|
const {
|
|
172
134
|
getRequire
|
|
173
135
|
} = createHelpers(loaderContext)
|
|
@@ -179,8 +141,6 @@ module.exports = function (content) {
|
|
|
179
141
|
resourcePath
|
|
180
142
|
})
|
|
181
143
|
|
|
182
|
-
if (type !== 'script') this.addDependency(src)
|
|
183
|
-
|
|
184
144
|
switch (type) {
|
|
185
145
|
case 'template':
|
|
186
146
|
if (isApp) return ''
|
|
@@ -199,6 +159,9 @@ module.exports = function (content) {
|
|
|
199
159
|
scoped: hasScoped
|
|
200
160
|
})
|
|
201
161
|
break
|
|
162
|
+
case 'json':
|
|
163
|
+
if (useJSONJS) part.useJSONJS = true
|
|
164
|
+
break
|
|
202
165
|
}
|
|
203
166
|
return getRequire(type, part, extraOptions)
|
|
204
167
|
}
|
package/lib/parser.js
CHANGED
|
@@ -6,7 +6,7 @@ const SourceMapGenerator = require('source-map').SourceMapGenerator
|
|
|
6
6
|
const splitRE = /\r?\n/g
|
|
7
7
|
const emptyRE = /^(?:\/\/)?\s*$/
|
|
8
8
|
|
|
9
|
-
module.exports = (content, { filePath, needMap, mode,
|
|
9
|
+
module.exports = (content, { filePath, needMap, mode, env }) => {
|
|
10
10
|
// 缓存需要mode隔离,不同mode经过区块条件编译parseComponent得到的内容并不一致
|
|
11
11
|
const cacheKey = hash(filePath + content + mode + env)
|
|
12
12
|
|
|
@@ -14,7 +14,6 @@ module.exports = (content, { filePath, needMap, mode, defs, env }) => {
|
|
|
14
14
|
if (output) return JSON.parse(output)
|
|
15
15
|
output = compiler.parseComponent(content, {
|
|
16
16
|
mode,
|
|
17
|
-
defs,
|
|
18
17
|
filePath,
|
|
19
18
|
pad: 'line',
|
|
20
19
|
env
|
|
@@ -73,7 +73,12 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
73
73
|
swan: deletePath()
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
|
-
test: 'onReachBottomDistance
|
|
76
|
+
test: 'onReachBottomDistance',
|
|
77
|
+
qq: deletePath(),
|
|
78
|
+
jd: deletePath()
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
test: 'disableScroll',
|
|
77
82
|
ali: deletePath(),
|
|
78
83
|
qq: deletePath(),
|
|
79
84
|
jd: deletePath()
|
|
@@ -84,7 +89,7 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
84
89
|
swan: deletePath()
|
|
85
90
|
},
|
|
86
91
|
{
|
|
87
|
-
test: 'navigationBarTextStyle|navigationStyle|
|
|
92
|
+
test: 'navigationBarTextStyle|navigationStyle|backgroundTextStyle',
|
|
88
93
|
ali: deletePath()
|
|
89
94
|
},
|
|
90
95
|
{
|
|
@@ -79,7 +79,7 @@ module.exports = function ({ print }) {
|
|
|
79
79
|
if (isMustache(value)) {
|
|
80
80
|
// 如果是个变量,报warning
|
|
81
81
|
baiduValueLog({ name, value })
|
|
82
|
-
} else if (supportList.indexOf(value) === -1) {
|
|
82
|
+
} else if (value && supportList.indexOf(value) === -1) {
|
|
83
83
|
baiduValueLogError({ name, value })
|
|
84
84
|
}
|
|
85
85
|
},
|
|
@@ -91,7 +91,7 @@ module.exports = function ({ print }) {
|
|
|
91
91
|
if (isMustache(value)) {
|
|
92
92
|
// 如果是个变量,报warning
|
|
93
93
|
qqValueLog({ name, value })
|
|
94
|
-
} else if (supportList.indexOf(value) === -1) {
|
|
94
|
+
} else if (value && supportList.indexOf(value) === -1) {
|
|
95
95
|
qqValueLogError({ name, value })
|
|
96
96
|
}
|
|
97
97
|
},
|
|
@@ -103,7 +103,7 @@ module.exports = function ({ print }) {
|
|
|
103
103
|
ttValueLog({ name, value })
|
|
104
104
|
} else {
|
|
105
105
|
const supportList = ['share', 'getPhoneNumber', 'contact']
|
|
106
|
-
if (supportList.indexOf(value) === -1) {
|
|
106
|
+
if (value && supportList.indexOf(value) === -1) {
|
|
107
107
|
ttValueLogError({ name, value })
|
|
108
108
|
}
|
|
109
109
|
}
|
|
@@ -44,7 +44,7 @@ module.exports = function ({ print }) {
|
|
|
44
44
|
// 如果是个变量,报warning~
|
|
45
45
|
aliPropLog(attr)
|
|
46
46
|
} else {
|
|
47
|
-
let supportedList = ['navigate', 'redirect', 'switchTab', 'navigateBack', 'reLaunch']
|
|
47
|
+
let supportedList = ['navigate', 'redirect', 'switchTab', 'navigateBack', 'reLaunch', 'exit']
|
|
48
48
|
if (supportedList.indexOf(attr.value) === -1) {
|
|
49
49
|
aliValueLogError(attr)
|
|
50
50
|
}
|
package/lib/record-loader.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const parseRequest = require('./utils/parse-request')
|
|
2
|
-
const
|
|
2
|
+
const RecordResourceMapDependency = require('./dependencies/RecordResourceMapDependency')
|
|
3
3
|
|
|
4
4
|
module.exports = function (source) {
|
|
5
5
|
const mpx = this.getMpx()
|
|
6
6
|
const { resourcePath, queryObj } = parseRequest(this.resource)
|
|
7
7
|
const file = mpx.getExtractedFile(this.resource)
|
|
8
8
|
const packageRoot = queryObj.packageRoot || ''
|
|
9
|
-
this._module.addPresentationalDependency(new
|
|
9
|
+
this._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, 'staticResource', file, packageRoot))
|
|
10
10
|
return source
|
|
11
11
|
}
|
|
@@ -3,6 +3,7 @@ const stringifyQuery = require('../utils/stringify-query')
|
|
|
3
3
|
const parseQuery = require('loader-utils').parseQuery
|
|
4
4
|
const addInfix = require('../utils/add-infix')
|
|
5
5
|
const matchCondition = require('../utils/match-condition')
|
|
6
|
+
const { JSON_JS_EXT } = require('../utils/const')
|
|
6
7
|
|
|
7
8
|
module.exports = class AddEnvPlugin {
|
|
8
9
|
constructor (source, env, fileConditionRules, target) {
|
|
@@ -24,8 +25,8 @@ module.exports = class AddEnvPlugin {
|
|
|
24
25
|
}
|
|
25
26
|
const resourcePath = request.path
|
|
26
27
|
let extname = ''
|
|
27
|
-
if (resourcePath.endsWith(
|
|
28
|
-
extname =
|
|
28
|
+
if (resourcePath.endsWith(JSON_JS_EXT)) {
|
|
29
|
+
extname = JSON_JS_EXT
|
|
29
30
|
} else {
|
|
30
31
|
extname = path.extname(resourcePath)
|
|
31
32
|
}
|
|
@@ -3,6 +3,7 @@ const stringifyQuery = require('../utils/stringify-query')
|
|
|
3
3
|
const parseQuery = require('loader-utils').parseQuery
|
|
4
4
|
const matchCondition = require('../utils/match-condition')
|
|
5
5
|
const addInfix = require('../utils/add-infix')
|
|
6
|
+
const { JSON_JS_EXT } = require('../utils/const')
|
|
6
7
|
|
|
7
8
|
module.exports = class AddModePlugin {
|
|
8
9
|
constructor (source, mode, fileConditionRules, target) {
|
|
@@ -24,8 +25,8 @@ module.exports = class AddModePlugin {
|
|
|
24
25
|
}
|
|
25
26
|
const resourcePath = request.path
|
|
26
27
|
let extname = ''
|
|
27
|
-
if (resourcePath.endsWith(
|
|
28
|
-
extname =
|
|
28
|
+
if (resourcePath.endsWith(JSON_JS_EXT)) {
|
|
29
|
+
extname = JSON_JS_EXT
|
|
29
30
|
} else {
|
|
30
31
|
extname = path.extname(resourcePath)
|
|
31
32
|
}
|
package/lib/runtime/base.styl
CHANGED
|
@@ -120,3 +120,8 @@ 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
|
+
}
|