@mpxjs/webpack-plugin 2.6.114-alpha.4 → 2.6.114-alpha.7
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/{dependency → dependencies}/AddEntryDependency.js +0 -0
- package/lib/dependencies/AppEntryDependency.js +58 -0
- package/lib/dependencies/CommonJsAsyncDependency.js +51 -0
- package/lib/dependencies/CommonJsVariableDependency.js +81 -0
- package/lib/dependencies/DynamicEntryDependency.js +171 -0
- package/lib/dependencies/FlagPluginDependency.js +24 -0
- package/lib/dependencies/InjectDependency.js +43 -0
- package/lib/dependencies/RecordGlobalComponentsDependency.js +50 -0
- package/lib/dependencies/RecordIndependentDependency.js +44 -0
- package/lib/dependencies/RecordResourceMapDependency.js +62 -0
- package/lib/dependencies/RemoveEntryDependency.js +40 -0
- package/lib/{dependency → dependencies}/ReplaceDependency.js +19 -2
- package/lib/dependencies/ResolveDependency.js +88 -0
- package/lib/extractor.js +82 -178
- package/lib/file-loader.js +7 -19
- package/lib/helpers.js +39 -334
- package/lib/independent-loader.js +52 -0
- package/lib/index.js +864 -541
- package/lib/json-compiler/helper.js +156 -0
- package/lib/json-compiler/index.js +242 -451
- package/lib/json-compiler/plugin.js +150 -0
- package/lib/json-compiler/{theme-loader.js → theme.js} +5 -3
- package/lib/loader.js +137 -240
- package/lib/native-loader.js +71 -133
- package/lib/parser.js +1 -2
- package/lib/partial-compile/index.js +35 -0
- package/lib/platform/json/wx/index.js +1 -1
- package/lib/platform/template/normalize-component-rules.js +2 -3
- package/lib/platform/template/wx/index.js +30 -4
- package/lib/record-loader.js +11 -0
- package/lib/{path-loader.js → resolve-loader.js} +0 -0
- package/lib/resolver/AddEnvPlugin.js +4 -3
- package/lib/resolver/AddModePlugin.js +4 -3
- package/lib/resolver/FixDescriptionInfoPlugin.js +28 -0
- package/lib/resolver/PackageEntryPlugin.js +23 -36
- package/lib/runtime/base.styl +5 -0
- package/lib/runtime/components/tenon/tenon-button.vue +1 -1
- package/lib/runtime/components/tenon/tenon-image.vue +1 -1
- package/lib/runtime/components/tenon/tenon-input.vue +1 -1
- package/lib/runtime/components/tenon/tenon-switch.vue +1 -1
- package/lib/runtime/components/tenon/tenon-text-area.vue +1 -1
- package/lib/runtime/components/tenon/tenon-text.vue +1 -1
- package/lib/runtime/components/web/mpx-image.vue +20 -5
- package/lib/runtime/components/web/mpx-movable-view.vue +6 -2
- package/lib/runtime/components/web/mpx-swiper.vue +18 -3
- package/lib/runtime/i18n.wxs +31 -11
- package/lib/runtime/optionProcessor.js +48 -3
- package/lib/selector.js +29 -10
- package/lib/style-compiler/index.js +15 -23
- package/lib/style-compiler/load-postcss-config.js +3 -1
- package/lib/style-compiler/plugins/conditional-strip.js +68 -65
- package/lib/style-compiler/plugins/rpx.js +43 -37
- package/lib/style-compiler/plugins/scope-id.js +79 -72
- package/lib/style-compiler/plugins/trans-special.js +25 -18
- package/lib/style-compiler/plugins/trim.js +13 -7
- package/lib/style-compiler/plugins/vw.js +22 -16
- package/lib/template-compiler/compiler.js +95 -197
- package/lib/template-compiler/index.js +52 -139
- package/lib/template-compiler/trans-dynamic-class-expr.js +18 -13
- package/lib/tenon/index.js +1 -3
- package/lib/tenon/processScript.js +52 -40
- package/lib/url-loader.js +11 -29
- package/lib/utils/add-query.js +1 -1
- package/lib/utils/const.js +10 -0
- package/lib/utils/emit-file.js +10 -0
- package/lib/utils/eval-json-js.js +31 -0
- package/lib/utils/get-entry-name.js +13 -0
- package/lib/utils/get-json-content.js +42 -0
- package/lib/utils/is-url-request.js +10 -1
- package/lib/utils/match-condition.js +4 -1
- package/lib/utils/normalize.js +4 -15
- package/lib/utils/parse-request.js +3 -3
- package/lib/utils/resolve.js +13 -0
- package/lib/utils/set.js +47 -0
- package/lib/utils/stringify-loaders-resource.js +25 -0
- package/lib/utils/stringify-query.js +4 -0
- package/lib/web/processJSON.js +113 -144
- package/lib/web/processScript.js +47 -34
- package/lib/web/processTemplate.js +57 -40
- package/lib/wxml/{wxml-loader.js → loader.js} +21 -62
- package/lib/wxs/WxsModuleIdsPlugin.js +29 -0
- package/lib/wxs/WxsParserPlugin.js +2 -2
- package/lib/wxs/WxsPlugin.js +4 -8
- package/lib/wxs/WxsTemplatePlugin.js +46 -92
- package/lib/wxs/{wxs-i18n-loader.js → i18n-loader.js} +5 -4
- package/lib/wxs/loader.js +142 -0
- package/lib/wxs/{wxs-pre-loader.js → pre-loader.js} +20 -5
- package/lib/wxss/loader.js +31 -43
- package/lib/wxss/localsLoader.js +1 -5
- package/lib/wxss/processCss.js +107 -103
- package/package.json +18 -20
- package/lib/built-in-loader.js +0 -49
- package/lib/content-loader.js +0 -13
- package/lib/dependency/ChildCompileDependency.js +0 -24
- package/lib/dependency/InjectDependency.js +0 -26
- package/lib/dependency/RemovedModuleDependency.js +0 -23
- package/lib/dependency/ResolveDependency.js +0 -53
- package/lib/plugin-loader.js +0 -287
- package/lib/staticConfig.js +0 -4
- package/lib/utils/get-main-compilation.js +0 -6
- package/lib/utils/read-json-for-src.js +0 -34
- package/lib/utils/try-require.js +0 -16
- package/lib/wxs/wxs-loader.js +0 -117
- package/lib/wxss/getImportPrefix.js +0 -30
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const isUrlRequestRaw = require('loader-utils').isUrlRequest
|
|
2
2
|
const tagRE = /\{\{((?:.|\n|\r)+?)\}\}(?!})/
|
|
3
3
|
|
|
4
|
-
module.exports = function isUrlRequest (url, root) {
|
|
4
|
+
module.exports = function isUrlRequest (url, root, externals) {
|
|
5
5
|
// 对于非字符串或空字符串url直接返回false
|
|
6
6
|
if (!url || typeof url !== 'string') return false
|
|
7
7
|
// 对于@开头且后续字符串为合法标识符的情况也返回false,识别为theme变量
|
|
@@ -9,5 +9,14 @@ module.exports = function isUrlRequest (url, root) {
|
|
|
9
9
|
if (/^.+:\/\//.test(url)) return false
|
|
10
10
|
// 对于url中存在Mustache插值的情况也返回false
|
|
11
11
|
if (tagRE.test(url)) return false
|
|
12
|
+
// url存在于externals中也返回false
|
|
13
|
+
if (externals && externals.some((external) => {
|
|
14
|
+
if (typeof external === 'string') {
|
|
15
|
+
return external === url
|
|
16
|
+
} else if (external instanceof RegExp) {
|
|
17
|
+
return external.test(url)
|
|
18
|
+
}
|
|
19
|
+
return false
|
|
20
|
+
})) return false
|
|
12
21
|
return isUrlRequestRaw(url, root)
|
|
13
22
|
}
|
package/lib/utils/normalize.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const path = require('path')
|
|
1
|
+
// const path = require('path')
|
|
3
2
|
|
|
4
|
-
exports.lib = file => path.resolve(__dirname, '../', file)
|
|
5
|
-
|
|
6
|
-
exports.
|
|
7
|
-
if (
|
|
8
|
-
fs.existsSync(path.resolve(__dirname, '../../node_modules', dep))
|
|
9
|
-
) {
|
|
10
|
-
// npm 2 or npm linked
|
|
11
|
-
return '@mpxjs/webpack-plugin/node_modules/' + dep
|
|
12
|
-
} else {
|
|
13
|
-
// npm 3
|
|
14
|
-
return dep
|
|
15
|
-
}
|
|
16
|
-
}
|
|
3
|
+
// exports.lib = file => path.resolve(__dirname, '../', file)
|
|
4
|
+
// support npm link debug
|
|
5
|
+
exports.lib = file => '@mpxjs/webpack-plugin/lib/' + file
|
|
@@ -4,7 +4,7 @@ const path = require('path')
|
|
|
4
4
|
|
|
5
5
|
function genQueryObj (result) {
|
|
6
6
|
// 避免外部修改queryObj影响缓存
|
|
7
|
-
result.queryObj = parseQuery(result.resourceQuery)
|
|
7
|
+
result.queryObj = parseQuery(result.resourceQuery || '?')
|
|
8
8
|
return result
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -16,13 +16,13 @@ module.exports = function parseRequest (request) {
|
|
|
16
16
|
let resource = elements.pop()
|
|
17
17
|
let loaderString = elements.join('!')
|
|
18
18
|
let resourcePath = resource
|
|
19
|
-
let resourceQuery = '
|
|
19
|
+
let resourceQuery = ''
|
|
20
20
|
const queryIndex = resource.indexOf('?')
|
|
21
21
|
if (queryIndex >= 0) {
|
|
22
22
|
resourcePath = resource.slice(0, queryIndex)
|
|
23
23
|
resourceQuery = resource.slice(queryIndex)
|
|
24
24
|
}
|
|
25
|
-
const queryObj = parseQuery(resourceQuery)
|
|
25
|
+
const queryObj = parseQuery(resourceQuery || '?')
|
|
26
26
|
const rawResourcePath = resourcePath
|
|
27
27
|
if (queryObj.resourcePath) {
|
|
28
28
|
resourcePath = queryObj.resourcePath
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const parseRequest = require('./parse-request')
|
|
2
|
+
const { RESOLVE_IGNORED_ERR } = require('./const')
|
|
3
|
+
|
|
4
|
+
// todo 提供不记录dependency的resolve方法,非必要的情况下不记录dependency,提升缓存利用率
|
|
5
|
+
module.exports = (context, request, loaderContext, callback) => {
|
|
6
|
+
const { queryObj } = parseRequest(request)
|
|
7
|
+
context = queryObj.context || context
|
|
8
|
+
return loaderContext.resolve(context, request, (err, resource, info) => {
|
|
9
|
+
if (err) return callback(err)
|
|
10
|
+
if (resource === false) return callback(RESOLVE_IGNORED_ERR)
|
|
11
|
+
callback(null, resource, info)
|
|
12
|
+
})
|
|
13
|
+
}
|
package/lib/utils/set.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
every (set, fn) {
|
|
3
|
+
for (const item of set) {
|
|
4
|
+
if (!fn(item)) return false
|
|
5
|
+
}
|
|
6
|
+
return true
|
|
7
|
+
},
|
|
8
|
+
has (set, fn) {
|
|
9
|
+
for (const item of set) {
|
|
10
|
+
if (fn(item)) return true
|
|
11
|
+
}
|
|
12
|
+
return false
|
|
13
|
+
},
|
|
14
|
+
map (set, fn) {
|
|
15
|
+
const result = new Set()
|
|
16
|
+
set.forEach((item) => {
|
|
17
|
+
result.add(fn(item))
|
|
18
|
+
})
|
|
19
|
+
return result
|
|
20
|
+
},
|
|
21
|
+
filter (set, fn) {
|
|
22
|
+
const result = new Set()
|
|
23
|
+
set.forEach((item) => {
|
|
24
|
+
if (fn(item)) {
|
|
25
|
+
result.add(item)
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
return result
|
|
29
|
+
},
|
|
30
|
+
concat (setA, setB) {
|
|
31
|
+
const result = new Set()
|
|
32
|
+
setA.forEach((item) => {
|
|
33
|
+
result.add(item)
|
|
34
|
+
})
|
|
35
|
+
setB.forEach((item) => {
|
|
36
|
+
result.add(item)
|
|
37
|
+
})
|
|
38
|
+
return result
|
|
39
|
+
},
|
|
40
|
+
mapToArr (set, fn) {
|
|
41
|
+
const result = []
|
|
42
|
+
set.forEach((item) => {
|
|
43
|
+
result.push(fn(item))
|
|
44
|
+
})
|
|
45
|
+
return result
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const loaderToIdent = data => {
|
|
2
|
+
if (!data.options) {
|
|
3
|
+
return data.loader
|
|
4
|
+
}
|
|
5
|
+
if (typeof data.options === 'string') {
|
|
6
|
+
return data.loader + '?' + data.options
|
|
7
|
+
}
|
|
8
|
+
if (typeof data.options !== 'object') {
|
|
9
|
+
throw new Error('loader options must be string or object')
|
|
10
|
+
}
|
|
11
|
+
if (data.ident) {
|
|
12
|
+
return data.loader + '??' + data.ident
|
|
13
|
+
}
|
|
14
|
+
return data.loader + '?' + JSON.stringify(data.options)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const stringifyLoadersAndResource = (loaders, resource) => {
|
|
18
|
+
let str = ''
|
|
19
|
+
for (const loader of loaders) {
|
|
20
|
+
str += loaderToIdent(loader) + '!'
|
|
21
|
+
}
|
|
22
|
+
return str + resource
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = stringifyLoadersAndResource
|
package/lib/web/processJSON.js
CHANGED
|
@@ -6,28 +6,30 @@ const parseRequest = require('../utils/parse-request')
|
|
|
6
6
|
const toPosix = require('../utils/to-posix')
|
|
7
7
|
const addQuery = require('../utils/add-query')
|
|
8
8
|
const parseComponent = require('../parser')
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const getJSONContent = require('../utils/get-json-content')
|
|
10
|
+
const resolve = require('../utils/resolve')
|
|
11
|
+
const createJSONHelper = require('../json-compiler/helper')
|
|
12
|
+
const { RESOLVE_IGNORED_ERR } = require('../utils/const')
|
|
13
|
+
const RecordResourceMapDependency = require('../dependencies/RecordResourceMapDependency')
|
|
11
14
|
|
|
12
|
-
module.exports = function (json,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const resolveMode = options.resolveMode
|
|
18
|
-
const pagesMap = options.pagesMap
|
|
19
|
-
const componentsMap = options.componentsMap
|
|
20
|
-
const pagesEntryMap = options.pagesEntryMap
|
|
21
|
-
const projectRoot = options.projectRoot
|
|
22
|
-
const pathHash = options.pathHash
|
|
15
|
+
module.exports = function (json, {
|
|
16
|
+
loaderContext,
|
|
17
|
+
pagesMap,
|
|
18
|
+
componentsMap
|
|
19
|
+
}, rawCallback) {
|
|
23
20
|
const localPagesMap = {}
|
|
24
21
|
const localComponentsMap = {}
|
|
25
|
-
const buildInfo = loaderContext._module.buildInfo
|
|
26
|
-
|
|
27
22
|
let output = '/* json */\n'
|
|
28
23
|
let jsonObj = {}
|
|
29
24
|
let tabBarMap
|
|
30
25
|
let tabBarStr
|
|
26
|
+
const mpx = loaderContext.getMpx()
|
|
27
|
+
const {
|
|
28
|
+
mode,
|
|
29
|
+
env,
|
|
30
|
+
projectRoot
|
|
31
|
+
} = mpx
|
|
32
|
+
|
|
31
33
|
const context = loaderContext.context
|
|
32
34
|
|
|
33
35
|
const emitWarning = (msg) => {
|
|
@@ -37,13 +39,31 @@ module.exports = function (json, options, rawCallback) {
|
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
const emitError = (msg) => {
|
|
40
|
-
|
|
41
|
-
new Error('[json compiler][' +
|
|
42
|
+
loaderContext.emitError(
|
|
43
|
+
new Error('[json compiler][' + loaderContext.resource + ']: ' + msg)
|
|
42
44
|
)
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
const stringifyRequest = r => loaderUtils.stringifyRequest(loaderContext, r)
|
|
46
48
|
|
|
49
|
+
const {
|
|
50
|
+
isUrlRequest,
|
|
51
|
+
urlToRequest,
|
|
52
|
+
processPage,
|
|
53
|
+
processComponent
|
|
54
|
+
} = createJSONHelper({
|
|
55
|
+
loaderContext,
|
|
56
|
+
emitWarning,
|
|
57
|
+
emitError,
|
|
58
|
+
customGetDynamicEntry (resource, type, outputPath, packageRoot) {
|
|
59
|
+
return {
|
|
60
|
+
resource,
|
|
61
|
+
outputPath: toPosix(path.join(packageRoot, outputPath)),
|
|
62
|
+
packageRoot
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
|
|
47
67
|
const callback = (err) => {
|
|
48
68
|
return rawCallback(err, {
|
|
49
69
|
output,
|
|
@@ -67,12 +87,6 @@ module.exports = function (json, options, rawCallback) {
|
|
|
67
87
|
|
|
68
88
|
const fs = loaderContext._compiler.inputFileSystem
|
|
69
89
|
|
|
70
|
-
const resolve = (context, request, callback) => {
|
|
71
|
-
const { queryObj } = parseRequest(request)
|
|
72
|
-
context = queryObj.context || context
|
|
73
|
-
return loaderContext.resolve(context, request, callback)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
90
|
const defaultTabbar = {
|
|
77
91
|
borderStyle: 'black',
|
|
78
92
|
position: 'bottom',
|
|
@@ -90,7 +104,7 @@ module.exports = function (json, options, rawCallback) {
|
|
|
90
104
|
tabBarStr = JSON.stringify(tabBar)
|
|
91
105
|
tabBarStr = tabBarStr.replace(/"(iconPath|selectedIconPath)":"([^"]+)"/g, function (matched, $1, $2) {
|
|
92
106
|
if (isUrlRequest($2, projectRoot)) {
|
|
93
|
-
return `"${$1}":require(${stringifyRequest(
|
|
107
|
+
return `"${$1}":require(${stringifyRequest(urlToRequest($2, projectRoot))})`
|
|
94
108
|
}
|
|
95
109
|
return matched
|
|
96
110
|
})
|
|
@@ -100,45 +114,37 @@ module.exports = function (json, options, rawCallback) {
|
|
|
100
114
|
|
|
101
115
|
const processPackages = (packages, context, callback) => {
|
|
102
116
|
if (packages) {
|
|
103
|
-
async.
|
|
104
|
-
const
|
|
105
|
-
const queryObj = parsed.queryObj
|
|
106
|
-
// readFile无法处理query
|
|
107
|
-
packagePath = parsed.resourcePath
|
|
117
|
+
async.each(packages, (packagePath, callback) => {
|
|
118
|
+
const { queryObj } = parseRequest(packagePath)
|
|
108
119
|
async.waterfall([
|
|
109
120
|
(callback) => {
|
|
110
|
-
resolve(context, packagePath, (err, result) => {
|
|
111
|
-
callback(err
|
|
121
|
+
resolve(context, packagePath, loaderContext, (err, result) => {
|
|
122
|
+
if (err) return callback(err)
|
|
123
|
+
const { rawResourcePath } = parseRequest(result)
|
|
124
|
+
callback(err, rawResourcePath)
|
|
112
125
|
})
|
|
113
126
|
},
|
|
114
127
|
(result, callback) => {
|
|
115
|
-
loaderContext.addDependency(result)
|
|
116
128
|
fs.readFile(result, (err, content) => {
|
|
117
129
|
if (err) return callback(err)
|
|
118
130
|
callback(err, result, content.toString('utf-8'))
|
|
119
131
|
})
|
|
120
132
|
},
|
|
121
133
|
(result, content, callback) => {
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
if (extName === '.mpx' || extName === '.vue') {
|
|
134
|
+
const extName = path.extname(result)
|
|
135
|
+
if (extName === '.mpx') {
|
|
125
136
|
const parts = parseComponent(content, {
|
|
126
|
-
filePath,
|
|
137
|
+
filePath: result,
|
|
127
138
|
needMap: loaderContext.sourceMap,
|
|
128
139
|
mode,
|
|
129
|
-
defs,
|
|
130
140
|
env
|
|
131
141
|
})
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
callback(null, result, content)
|
|
138
|
-
})
|
|
139
|
-
}
|
|
142
|
+
getJSONContent(parts.json || {}, loaderContext, (err, content) => {
|
|
143
|
+
callback(err, result, content)
|
|
144
|
+
})
|
|
145
|
+
} else {
|
|
146
|
+
callback(null, result, content)
|
|
140
147
|
}
|
|
141
|
-
callback(null, result, content)
|
|
142
148
|
},
|
|
143
149
|
(result, content, callback) => {
|
|
144
150
|
try {
|
|
@@ -159,12 +165,17 @@ module.exports = function (json, options, rawCallback) {
|
|
|
159
165
|
pages: content.pages,
|
|
160
166
|
...queryObj
|
|
161
167
|
}
|
|
168
|
+
|
|
169
|
+
if (content.plugins) {
|
|
170
|
+
subPackage.plugins = content.plugins
|
|
171
|
+
}
|
|
172
|
+
|
|
162
173
|
processSelfQueue.push((callback) => {
|
|
163
174
|
processSubPackage(subPackage, context, callback)
|
|
164
175
|
})
|
|
165
176
|
} else {
|
|
166
177
|
processSelfQueue.push((callback) => {
|
|
167
|
-
processPages(content.pages,
|
|
178
|
+
processPages(content.pages, context, '', callback)
|
|
168
179
|
})
|
|
169
180
|
}
|
|
170
181
|
}
|
|
@@ -179,77 +190,40 @@ module.exports = function (json, options, rawCallback) {
|
|
|
179
190
|
callback()
|
|
180
191
|
}
|
|
181
192
|
}
|
|
182
|
-
],
|
|
193
|
+
], (err) => {
|
|
194
|
+
callback(err === RESOLVE_IGNORED_ERR ? null : err)
|
|
195
|
+
})
|
|
183
196
|
}, callback)
|
|
184
197
|
} else {
|
|
185
198
|
callback()
|
|
186
199
|
}
|
|
187
200
|
}
|
|
188
201
|
|
|
189
|
-
const
|
|
190
|
-
const baseName = path.basename(resourcePath, ext)
|
|
191
|
-
return path.join('pages', baseName + pathHash(resourcePath), baseName)
|
|
192
|
-
}
|
|
202
|
+
const pageKeySet = new Set()
|
|
193
203
|
|
|
194
|
-
const processPages = (pages,
|
|
204
|
+
const processPages = (pages, context, tarRoot = '', callback) => {
|
|
195
205
|
if (pages) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
page = page.src
|
|
202
|
-
}
|
|
203
|
-
if (!isUrlRequest(page, projectRoot)) return callback()
|
|
204
|
-
if (resolveMode === 'native') {
|
|
205
|
-
page = loaderUtils.urlToRequest(page, projectRoot)
|
|
206
|
-
}
|
|
207
|
-
resolve(context, page, (err, resource) => {
|
|
208
|
-
if (err) return callback(err)
|
|
206
|
+
async.each(pages, (page, callback) => {
|
|
207
|
+
processPage(page, context, tarRoot, (err, { resource, outputPath } = {}, { isFirst, key } = {}) => {
|
|
208
|
+
if (err) return callback(err === RESOLVE_IGNORED_ERR ? null : err)
|
|
209
|
+
if (pageKeySet.has(key)) return callback()
|
|
210
|
+
pageKeySet.add(key)
|
|
209
211
|
const { resourcePath, queryObj } = parseRequest(resource)
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
for (let key in pagesMap) {
|
|
217
|
-
if (pagesMap[key] === pageName && key !== resourcePath) {
|
|
218
|
-
emitError(`Current page [${resourcePath}] registers a conflict page path [${pageName}] with existed page [${key}], which is not allowed, please rename it!`)
|
|
219
|
-
return callback()
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
} else {
|
|
223
|
-
const relative = path.relative(context, resourcePath)
|
|
224
|
-
if (/^\./.test(relative)) {
|
|
225
|
-
// 如果当前page不存在于context中,对其进行重命名
|
|
226
|
-
pageName = toPosix(path.join(tarRoot, getPageName(resourcePath, ext)))
|
|
227
|
-
emitWarning(`Current page [${resourcePath}] is not in current pages directory [${context}], the page path will be replaced with [${pageName}], use ?resolve to get the page path and navigate to it!`)
|
|
228
|
-
} else {
|
|
229
|
-
pageName = toPosix(path.join(tarRoot, /^(.*?)(\.[^.]*)?$/.exec(relative)[1]))
|
|
230
|
-
// 如果当前page与已有page存在命名冲突,也进行重命名
|
|
231
|
-
for (let key in pagesMap) {
|
|
232
|
-
// 此处引入pagesEntryMap确保相同entry下路由路径重复注册才报错,不同entry下的路由路径重复则无影响
|
|
233
|
-
if (pagesMap[key] === pageName && key !== resourcePath && pagesEntryMap[key] === loaderContext.resourcePath) {
|
|
234
|
-
const pageNameRaw = pageName
|
|
235
|
-
pageName = toPosix(path.join(tarRoot, getPageName(resourcePath, ext)))
|
|
236
|
-
emitWarning(`Current page [${resourcePath}] is registered with a conflict page path [${pageNameRaw}] which is already existed in system, the page path will be replaced with [${pageName}], use ?resolve to get the page path and navigate to it!`)
|
|
237
|
-
break
|
|
238
|
-
}
|
|
239
|
-
}
|
|
212
|
+
if (localPagesMap[outputPath]) {
|
|
213
|
+
const { resourcePath: oldResourcePath } = parseRequest(localPagesMap[outputPath].resource)
|
|
214
|
+
if (oldResourcePath !== resourcePath) {
|
|
215
|
+
const oldOutputPath = outputPath
|
|
216
|
+
outputPath = mpx.getOutputPath(resourcePath, 'page', { conflictPath: outputPath })
|
|
217
|
+
emitWarning(new Error(`Current page [${resourcePath}] is registered with a conflict outputPath [${oldOutputPath}] which is already existed in system, will be renamed with [${outputPath}], use ?resolve to get the real outputPath!`))
|
|
240
218
|
}
|
|
241
219
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
localPagesMap[pageName] = {
|
|
250
|
-
resource: addQuery(resource, { page: true }),
|
|
251
|
-
async: tarRoot || queryObj.async,
|
|
252
|
-
isFirst: queryObj.isFirst
|
|
220
|
+
|
|
221
|
+
pagesMap[resourcePath] = outputPath
|
|
222
|
+
loaderContext._module && loaderContext._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, 'page', outputPath))
|
|
223
|
+
localPagesMap[outputPath] = {
|
|
224
|
+
resource: addQuery(resource, { isPage: true }),
|
|
225
|
+
async: queryObj.async || tarRoot,
|
|
226
|
+
isFirst
|
|
253
227
|
}
|
|
254
228
|
callback()
|
|
255
229
|
})
|
|
@@ -261,10 +235,15 @@ module.exports = function (json, options, rawCallback) {
|
|
|
261
235
|
|
|
262
236
|
const processSubPackage = (subPackage, context, callback) => {
|
|
263
237
|
if (subPackage) {
|
|
238
|
+
if (typeof subPackage.root === 'string' && subPackage.root.startsWith('.')) {
|
|
239
|
+
emitError(`Current subpackage root [${subPackage.root}] is not allow starts with '.'`)
|
|
240
|
+
return callback()
|
|
241
|
+
}
|
|
264
242
|
let tarRoot = subPackage.tarRoot || subPackage.root || ''
|
|
265
243
|
let srcRoot = subPackage.srcRoot || subPackage.root || ''
|
|
266
244
|
if (!tarRoot) return callback()
|
|
267
|
-
|
|
245
|
+
context = path.join(context, srcRoot)
|
|
246
|
+
processPages(subPackage.pages, context, tarRoot, callback)
|
|
268
247
|
} else {
|
|
269
248
|
callback()
|
|
270
249
|
}
|
|
@@ -272,7 +251,7 @@ module.exports = function (json, options, rawCallback) {
|
|
|
272
251
|
|
|
273
252
|
const processSubPackages = (subPackages, context, callback) => {
|
|
274
253
|
if (subPackages) {
|
|
275
|
-
async.
|
|
254
|
+
async.each(subPackages, (subPackage, callback) => {
|
|
276
255
|
processSubPackage(subPackage, context, callback)
|
|
277
256
|
}, callback)
|
|
278
257
|
} else {
|
|
@@ -282,48 +261,37 @@ module.exports = function (json, options, rawCallback) {
|
|
|
282
261
|
|
|
283
262
|
const processComponents = (components, context, callback) => {
|
|
284
263
|
if (components) {
|
|
285
|
-
async.
|
|
286
|
-
processComponent(component,
|
|
264
|
+
async.eachOf(components, (component, name, callback) => {
|
|
265
|
+
processComponent(component, context, {}, (err, { resource, outputPath } = {}) => {
|
|
266
|
+
if (err === RESOLVE_IGNORED_ERR) {
|
|
267
|
+
return callback()
|
|
268
|
+
}
|
|
269
|
+
const { resourcePath, queryObj } = parseRequest(resource)
|
|
270
|
+
componentsMap[resourcePath] = outputPath
|
|
271
|
+
loaderContext._module && loaderContext._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, 'component', outputPath))
|
|
272
|
+
localComponentsMap[name] = {
|
|
273
|
+
resource: addQuery(resource, {
|
|
274
|
+
isComponent: true,
|
|
275
|
+
outputPath
|
|
276
|
+
}),
|
|
277
|
+
async: queryObj.async
|
|
278
|
+
}
|
|
279
|
+
callback()
|
|
280
|
+
})
|
|
287
281
|
}, callback)
|
|
288
282
|
} else {
|
|
289
283
|
callback()
|
|
290
284
|
}
|
|
291
285
|
}
|
|
292
286
|
|
|
293
|
-
const processComponent = (component, name, context, callback) => {
|
|
294
|
-
if (!isUrlRequest(component, projectRoot)) return callback()
|
|
295
|
-
|
|
296
|
-
if (resolveMode === 'native') {
|
|
297
|
-
component = loaderUtils.urlToRequest(component, projectRoot)
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
resolve(context, component, (err, resource) => {
|
|
301
|
-
if (err) return callback(err)
|
|
302
|
-
const { resourcePath, queryObj } = parseRequest(resource)
|
|
303
|
-
const parsed = path.parse(resourcePath)
|
|
304
|
-
const componentId = parsed.name + pathHash(resourcePath)
|
|
305
|
-
|
|
306
|
-
buildInfo.packageName = 'main'
|
|
307
|
-
buildInfo.componentsMap = buildInfo.componentsMap || {}
|
|
308
|
-
buildInfo.componentsMap[resourcePath] = componentsMap[resourcePath] = componentId
|
|
309
|
-
|
|
310
|
-
localComponentsMap[name] = {
|
|
311
|
-
resource: addQuery(resource, { component: true, componentId }),
|
|
312
|
-
async: queryObj.async
|
|
313
|
-
}
|
|
314
|
-
callback()
|
|
315
|
-
})
|
|
316
|
-
}
|
|
317
|
-
|
|
318
287
|
const processGenerics = (generics, context, callback) => {
|
|
319
288
|
if (generics) {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}, callback)
|
|
289
|
+
const genericsComponents = {}
|
|
290
|
+
Object.keys(generics).forEach((name) => {
|
|
291
|
+
const generic = generics[name]
|
|
292
|
+
if (generic.default) genericsComponents[`${name}default`] = generic.default
|
|
293
|
+
})
|
|
294
|
+
processComponents(genericsComponents, context, callback)
|
|
327
295
|
} else {
|
|
328
296
|
callback()
|
|
329
297
|
}
|
|
@@ -331,6 +299,7 @@ module.exports = function (json, options, rawCallback) {
|
|
|
331
299
|
|
|
332
300
|
async.parallel([
|
|
333
301
|
(callback) => {
|
|
302
|
+
// 添加首页标识
|
|
334
303
|
if (jsonObj.pages && jsonObj.pages[0]) {
|
|
335
304
|
if (typeof jsonObj.pages[0] !== 'string') {
|
|
336
305
|
jsonObj.pages[0].src = addQuery(jsonObj.pages[0].src, { isFirst: true })
|
|
@@ -338,7 +307,7 @@ module.exports = function (json, options, rawCallback) {
|
|
|
338
307
|
jsonObj.pages[0] = addQuery(jsonObj.pages[0], { isFirst: true })
|
|
339
308
|
}
|
|
340
309
|
}
|
|
341
|
-
processPages(jsonObj.pages,
|
|
310
|
+
processPages(jsonObj.pages, context, '', callback)
|
|
342
311
|
},
|
|
343
312
|
(callback) => {
|
|
344
313
|
processComponents(jsonObj.usingComponents, context, callback)
|