@mpxjs/webpack-plugin 2.6.110 → 2.7.0-beta.10

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.
Files changed (72) hide show
  1. package/lib/dependencies/AppEntryDependency.js +56 -0
  2. package/lib/dependencies/CommonJsVariableDependency.js +69 -0
  3. package/lib/dependencies/DynamicEntryDependency.js +131 -0
  4. package/lib/dependencies/FlagPluginDependency.js +23 -0
  5. package/lib/dependencies/InjectDependency.js +43 -0
  6. package/lib/dependencies/RecordGlobalComponentsDependency.js +50 -0
  7. package/lib/dependencies/RecordResourceMapDependency.js +52 -0
  8. package/lib/dependencies/RemoveEntryDependency.js +40 -0
  9. package/lib/{dependency → dependencies}/ReplaceDependency.js +19 -2
  10. package/lib/dependencies/ResolveDependency.js +84 -0
  11. package/lib/extractor.js +73 -178
  12. package/lib/file-loader.js +7 -19
  13. package/lib/helpers.js +42 -330
  14. package/lib/index.js +497 -376
  15. package/lib/json-compiler/helper.js +148 -0
  16. package/lib/json-compiler/index.js +195 -439
  17. package/lib/json-compiler/plugin.js +150 -0
  18. package/lib/json-compiler/{theme-loader.js → theme.js} +5 -3
  19. package/lib/loader.js +107 -226
  20. package/lib/native-loader.js +65 -132
  21. package/lib/parser.js +1 -2
  22. package/lib/record-loader.js +11 -0
  23. package/lib/{path-loader.js → resolve-loader.js} +0 -0
  24. package/lib/resolver/AddEnvPlugin.js +3 -2
  25. package/lib/resolver/AddModePlugin.js +3 -2
  26. package/lib/runtime/base.styl +5 -0
  27. package/lib/runtime/i18n.wxs +3 -3
  28. package/lib/runtime/optionProcessor.js +3 -3
  29. package/lib/selector.js +9 -11
  30. package/lib/style-compiler/index.js +12 -19
  31. package/lib/template-compiler/compiler.js +21 -162
  32. package/lib/template-compiler/index.js +47 -136
  33. package/lib/url-loader.js +11 -29
  34. package/lib/utils/add-query.js +1 -1
  35. package/lib/utils/const.js +9 -0
  36. package/lib/utils/emit-file.js +10 -0
  37. package/lib/utils/eval-json-js.js +31 -0
  38. package/lib/utils/get-entry-name.js +13 -0
  39. package/lib/utils/get-json-content.js +41 -0
  40. package/lib/utils/is-url-request.js +10 -1
  41. package/lib/utils/normalize.js +0 -13
  42. package/lib/utils/parse-request.js +3 -3
  43. package/lib/utils/resolve.js +13 -0
  44. package/lib/utils/set.js +47 -0
  45. package/lib/utils/stringify-loaders-resource.js +25 -0
  46. package/lib/utils/stringify-query.js +4 -0
  47. package/lib/web/processJSON.js +113 -142
  48. package/lib/web/processScript.js +32 -26
  49. package/lib/web/processTemplate.js +57 -39
  50. package/lib/wxml/{wxml-loader.js → loader.js} +24 -60
  51. package/lib/wxs/WxsModuleIdsPlugin.js +32 -0
  52. package/lib/wxs/WxsParserPlugin.js +2 -2
  53. package/lib/wxs/WxsPlugin.js +4 -8
  54. package/lib/wxs/WxsTemplatePlugin.js +46 -92
  55. package/lib/wxs/{wxs-i18n-loader.js → i18n-loader.js} +1 -3
  56. package/lib/wxs/{wxs-loader.js → loader.js} +41 -50
  57. package/lib/wxs/{wxs-pre-loader.js → pre-loader.js} +3 -4
  58. package/lib/wxss/loader.js +31 -43
  59. package/lib/wxss/localsLoader.js +1 -5
  60. package/package.json +5 -9
  61. package/lib/built-in-loader.js +0 -49
  62. package/lib/content-loader.js +0 -13
  63. package/lib/dependency/ChildCompileDependency.js +0 -24
  64. package/lib/dependency/InjectDependency.js +0 -26
  65. package/lib/dependency/RemovedModuleDependency.js +0 -23
  66. package/lib/dependency/ResolveDependency.js +0 -49
  67. package/lib/plugin-loader.js +0 -287
  68. package/lib/staticConfig.js +0 -4
  69. package/lib/utils/get-main-compilation.js +0 -6
  70. package/lib/utils/read-json-for-src.js +0 -34
  71. package/lib/utils/try-require.js +0 -16
  72. package/lib/wxss/getImportPrefix.js +0 -30
@@ -1,39 +1,29 @@
1
1
  const path = require('path')
2
2
  const JSON5 = require('json5')
3
3
  const parseRequest = require('./utils/parse-request')
4
- const loaderUtils = require('loader-utils')
5
4
  const config = require('./config')
6
5
  const createHelpers = require('./helpers')
7
- const InjectDependency = require('./dependency/InjectDependency')
8
- const addQuery = require('./utils/add-query')
9
- const mpxJSON = require('./utils/mpx-json')
6
+ const getJSONContent = require('./utils/get-json-content')
10
7
  const async = require('async')
11
8
  const matchCondition = require('./utils/match-condition')
12
9
  const fixUsingComponent = require('./utils/fix-using-component')
13
- const getMainCompilation = require('./utils/get-main-compilation')
10
+ const { JSON_JS_EXT } = require('./utils/const')
14
11
 
15
12
  module.exports = function (content) {
16
13
  this.cacheable()
17
14
 
18
- const mainCompilation = getMainCompilation(this._compilation)
19
- const mpx = mainCompilation.__mpx__
15
+ const mpx = this.getMpx()
20
16
  if (!mpx) {
21
17
  return content
22
18
  }
23
19
 
24
20
  const nativeCallback = this.async()
25
-
26
21
  const loaderContext = this
27
22
  const isProduction = this.minimize || process.env.NODE_ENV === 'production'
28
- const options = Object.assign({}, mpx.loaderOptions, loaderUtils.getOptions(this))
29
-
30
23
  const filePath = this.resourcePath
31
-
32
24
  const moduleId = 'm' + mpx.pathHash(filePath)
33
25
  const { resourcePath, queryObj } = parseRequest(this.resource)
34
- const projectRoot = mpx.projectRoot
35
26
  const mode = mpx.mode
36
- const defs = mpx.defs
37
27
  const globalSrcMode = mpx.srcMode
38
28
  const localSrcMode = queryObj.mode
39
29
  const packageName = queryObj.packageRoot || mpx.currentPackageRoot || 'main'
@@ -41,14 +31,12 @@ module.exports = function (content) {
41
31
  const componentsMap = mpx.componentsMap[packageName]
42
32
  const parsed = path.parse(resourcePath)
43
33
  const resourceName = path.join(parsed.dir, parsed.name)
44
- const isApp = !pagesMap[resourcePath] && !componentsMap[resourcePath]
34
+ const isApp = !(pagesMap[resourcePath] || componentsMap[resourcePath])
45
35
  const srcMode = localSrcMode || globalSrcMode
46
- const fs = this._compiler.inputFileSystem
47
36
  const typeExtMap = config[srcMode].typeExtMap
48
37
  const typeResourceMap = {}
49
38
  const autoScope = matchCondition(resourcePath, mpx.autoScopeRules)
50
39
 
51
- const EXT_MPX_JSON = '.json.js'
52
40
  const CSS_LANG_EXT_MAP = {
53
41
  less: '.less',
54
42
  stylus: '.styl',
@@ -56,36 +44,14 @@ module.exports = function (content) {
56
44
  scss: '.scss'
57
45
  }
58
46
 
59
- let useMPXJSON = false
47
+ let useJSONJS = false
60
48
  let cssLang = ''
61
49
  const hasScoped = (queryObj.scoped || autoScope) && mode === 'ali'
62
50
  const hasComment = false
63
51
  const isNative = true
64
52
 
65
- const tryEvalMPXJSON = (callback) => {
66
- const { rawResourcePath } = parseRequest(typeResourceMap['json'])
67
- const _src = rawResourcePath
68
- this.addDependency(_src)
69
- fs.readFile(_src, (err, raw) => {
70
- if (err) {
71
- callback(err)
72
- } else {
73
- try {
74
- const source = raw.toString('utf-8')
75
- const text = mpxJSON.compileMPXJSONText({ source, defs, filePath: _src })
76
- callback(null, text)
77
- } catch (e) {
78
- callback(e)
79
- }
80
- }
81
- })
82
- }
83
-
84
53
  const checkFileExists = (extName, callback) => {
85
- this.resolve(parsed.dir, resourceName + extName, (err, result) => {
86
- err = null
87
- callback(err, result)
88
- })
54
+ this.resolve(parsed.dir, resourceName + extName, callback)
89
55
  }
90
56
 
91
57
  function checkCSSLangFiles (callback) {
@@ -99,7 +65,7 @@ module.exports = function (content) {
99
65
  if (!err && result) {
100
66
  results[i] = result
101
67
  }
102
- callback(err)
68
+ callback()
103
69
  })
104
70
  }, function (err) {
105
71
  for (let i = 0; i < langs.length; i++) {
@@ -113,14 +79,13 @@ module.exports = function (content) {
113
79
  })
114
80
  }
115
81
 
116
- function checkMPXJSONFile (callback) {
117
- // checkFileExists(EXT_MPX_JSON, (err, result) => {
118
- checkFileExists(EXT_MPX_JSON, (err, result) => {
82
+ function checkJSONJSFile (callback) {
83
+ checkFileExists(JSON_JS_EXT, (err, result) => {
119
84
  if (!err && result) {
120
85
  typeResourceMap.json = result
121
- useMPXJSON = true
86
+ useJSONJS = true
122
87
  }
123
- callback(err)
88
+ callback()
124
89
  })
125
90
  }
126
91
 
@@ -129,109 +94,88 @@ module.exports = function (content) {
129
94
  (callback) => {
130
95
  async.parallel([
131
96
  checkCSSLangFiles,
132
- checkMPXJSONFile
97
+ checkJSONJSFile
133
98
  ], (err) => {
134
99
  callback(err)
135
100
  })
136
101
  },
137
102
  (callback) => {
138
103
  async.forEachOf(typeExtMap, (ext, key, callback) => {
139
- // 检测到mpxJson或cssLang时跳过对应类型文件检测
140
- if ((key === 'json' && useMPXJSON) || (key === 'styles' && cssLang)) {
104
+ // 检测到jsonjs或cssLang时跳过对应类型文件检测
105
+ if (typeResourceMap[key]) {
141
106
  return callback()
142
107
  }
143
108
  checkFileExists(ext, (err, result) => {
144
109
  if (!err && result) {
145
110
  typeResourceMap[key] = result
146
111
  }
147
- callback(err)
112
+ callback()
148
113
  })
149
114
  }, callback)
150
115
  },
151
116
  (callback) => {
152
- // 对原生写法增强json写法,可以用js来写json,尝试找.json.js文件,找不到用回json的内容
153
- if (useMPXJSON) {
154
- tryEvalMPXJSON(callback)
155
- } else {
156
- if (typeResourceMap['json']) {
157
- // eslint-disable-next-line handle-callback-err
158
- const { rawResourcePath } = parseRequest(typeResourceMap['json'])
159
- fs.readFile(rawResourcePath, (err, raw) => {
160
- if (err) {
161
- callback(err)
162
- } else {
163
- callback(null, raw.toString('utf-8'))
164
- }
165
- })
166
- } else {
167
- callback(null, '{}')
168
- }
169
- }
117
+ getJSONContent({
118
+ src: typeResourceMap.json,
119
+ useJSONJS
120
+ }, this, callback)
170
121
  }, (content, callback) => {
171
- let usingComponents = [].concat(Object.keys(mpx.usingComponents))
122
+ let json
172
123
  try {
173
- let ret = JSON5.parse(content)
174
- if (ret.usingComponents) {
175
- fixUsingComponent(ret.usingComponents, mode)
176
- usingComponents = usingComponents.concat(Object.keys(ret.usingComponents))
177
- }
124
+ json = JSON5.parse(content)
178
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))
179
132
  }
180
133
  const {
181
- getRequireForSrc,
182
- getNamedExportsForSrc
183
- } = createHelpers({
184
- loaderContext,
185
- options,
186
- moduleId,
187
- hasScoped,
188
- hasComment,
189
- usingComponents,
190
- srcMode,
191
- isNative,
192
- projectRoot
193
- })
194
-
195
- const getRequire = (type) => {
196
- const localQuery = Object.assign({}, queryObj)
197
- let src = typeResourceMap[type]
198
- localQuery.resourcePath = resourcePath
199
- if (type !== 'script') {
200
- this.addDependency(src)
201
- }
202
- if (type === 'template' && isApp) {
203
- return ''
204
- }
205
- if (type === 'json' && !useMPXJSON) {
206
- localQuery.__component = true
207
- }
208
- src = addQuery(src, localQuery, true)
209
- const partsOpts = { src }
134
+ getRequire
135
+ } = createHelpers(loaderContext)
136
+
137
+ const getRequireByType = (type) => {
138
+ const src = typeResourceMap[type]
139
+ const part = { src }
140
+ const extraOptions = Object.assign({}, queryObj, {
141
+ resourcePath
142
+ })
210
143
 
211
- if (type === 'script') {
212
- return getNamedExportsForSrc(type, partsOpts)
144
+ switch (type) {
145
+ case 'template':
146
+ if (isApp) return ''
147
+ Object.assign(extraOptions, {
148
+ hasScoped,
149
+ hasComment,
150
+ isNative,
151
+ moduleId,
152
+ usingComponents
153
+ })
154
+ break
155
+ case 'styles':
156
+ if (cssLang) part.lang = cssLang
157
+ Object.assign(extraOptions, {
158
+ moduleId,
159
+ scoped: hasScoped
160
+ })
161
+ break
162
+ case 'json':
163
+ if (useJSONJS) part.useJSONJS = true
164
+ break
213
165
  }
214
- if (type === 'styles') {
215
- if (cssLang) {
216
- partsOpts.lang = cssLang
217
- }
218
- if (hasScoped) {
219
- return getRequireForSrc(type, partsOpts, 0, true)
220
- }
221
- }
222
- return getRequireForSrc(type, partsOpts)
166
+ return getRequire(type, part, extraOptions)
223
167
  }
224
168
 
225
169
  // 注入模块id及资源路径
226
- let globalInjectCode = `global.currentModuleId = ${JSON.stringify(moduleId)}\n`
170
+ let output = `global.currentModuleId = ${JSON.stringify(moduleId)}\n`
227
171
  if (!isProduction) {
228
- globalInjectCode += `global.currentResource = ${JSON.stringify(filePath)}\n`
172
+ output += `global.currentResource = ${JSON.stringify(filePath)}\n`
229
173
  }
230
174
 
231
175
  // 注入构造函数
232
176
  let ctor = 'App'
233
177
  if (pagesMap[resourcePath]) {
234
- if (mpx.forceUsePageCtor || mode === 'ali') {
178
+ if (mpx.forceUsePageCtor || mode === 'ali' || mode === 'swan') {
235
179
  ctor = 'Page'
236
180
  } else {
237
181
  ctor = 'Component'
@@ -239,28 +183,17 @@ module.exports = function (content) {
239
183
  } else if (componentsMap[resourcePath]) {
240
184
  ctor = 'Component'
241
185
  }
242
- globalInjectCode += `global.currentCtor = ${ctor}\n`
243
- globalInjectCode += `global.currentCtorType = ${JSON.stringify(ctor.replace(/^./, (match) => {
186
+ output += `global.currentCtor = ${ctor}\n`
187
+ output += `global.currentCtorType = ${JSON.stringify(ctor.replace(/^./, (match) => {
244
188
  return match.toLowerCase()
245
189
  }))}\n`
246
190
 
247
191
  if (srcMode) {
248
- globalInjectCode += `global.currentSrcMode = ${JSON.stringify(srcMode)}\n`
192
+ output += `global.currentSrcMode = ${JSON.stringify(srcMode)}\n`
249
193
  }
250
194
 
251
- if (!mpx.forceDisableInject) {
252
- const dep = new InjectDependency({
253
- content: globalInjectCode,
254
- index: -3
255
- })
256
- this._module.addDependency(dep)
257
- }
258
-
259
- // 触发webpack global var 注入
260
- let output = 'global.currentModuleId;\n'
261
-
262
195
  for (let type in typeResourceMap) {
263
- output += `/* ${type} */\n${getRequire(type)}\n\n`
196
+ output += `/* ${type} */\n${getRequireByType(type)}\n\n`
264
197
  }
265
198
 
266
199
  callback(null, output)
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, defs, env }) => {
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
@@ -0,0 +1,11 @@
1
+ const parseRequest = require('./utils/parse-request')
2
+ const RecordResourceMapDependency = require('./dependencies/RecordResourceMapDependency')
3
+
4
+ module.exports = function (source) {
5
+ const mpx = this.getMpx()
6
+ const { resourcePath, queryObj } = parseRequest(this.resource)
7
+ const file = mpx.getExtractedFile(this.resource)
8
+ const packageRoot = queryObj.packageRoot || ''
9
+ this._module.addPresentationalDependency(new RecordResourceMapDependency(resourcePath, 'staticResource', file, packageRoot))
10
+ return source
11
+ }
File without changes
@@ -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('.json.js')) {
28
- extname = '.json.js'
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('.json.js')) {
28
- extname = '.json.js'
28
+ if (resourcePath.endsWith(JSON_JS_EXT)) {
29
+ extname = JSON_JS_EXT
29
30
  } else {
30
31
  extname = path.extname(resourcePath)
31
32
  }
@@ -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
+ }
@@ -265,17 +265,17 @@ var dateTimeFormats = {}
265
265
  var numberFormats = {}
266
266
 
267
267
  function getMessages () {
268
- // __mpx_messages__会在编译时通过lib/wxs/wxs-i18n-loader注入
268
+ // __mpx_messages__会在编译时通过lib/wxs/i18n-loader注入
269
269
  return __mpx_messages__ || messages
270
270
  }
271
271
 
272
272
  function getDateTimeFormats () {
273
- // __mpx_datetime_formats__会在编译时通过lib/wxs/wxs-i18n-loader注入
273
+ // __mpx_datetime_formats__会在编译时通过lib/wxs/i18n-loader注入
274
274
  return __mpx_datetime_formats__ || dateTimeFormats
275
275
  }
276
276
 
277
277
  function getNumberFormats () {
278
- // __mpx_number_formats__会在编译时通过lib/wxs/wxs-i18n-loader注入
278
+ // __mpx_number_formats__会在编译时通过lib/wxs/i18n-loader注入
279
279
  return __mpx_number_formats__ || numberFormats
280
280
  }
281
281
 
@@ -4,7 +4,7 @@ export default function processOption (
4
4
  option,
5
5
  ctorType,
6
6
  firstPage,
7
- componentId,
7
+ outputPath,
8
8
  pageConfig,
9
9
  pagesMap,
10
10
  componentsMap,
@@ -339,8 +339,8 @@ registered in parent context!`)
339
339
  option.mixins = [mixin]
340
340
  }
341
341
 
342
- if (componentId) {
343
- option.componentPath = '/' + componentId
342
+ if (outputPath) {
343
+ option.componentPath = '/' + outputPath
344
344
  }
345
345
 
346
346
  return option
package/lib/selector.js CHANGED
@@ -1,31 +1,29 @@
1
1
  const parseComponent = require('./parser')
2
- const loaderUtils = require('loader-utils')
3
- const getMainCompilation = require('./utils/get-main-compilation')
2
+ const parseRequest = require('./utils/parse-request')
4
3
 
5
4
  module.exports = function (content) {
6
5
  this.cacheable()
7
- const mainCompilation = getMainCompilation(this._compilation)
8
- const mpx = mainCompilation.__mpx__
6
+ // todo 移除mpx访问依赖,支持thread-loader
7
+ const mpx = this.getMpx()
9
8
  if (!mpx) {
10
9
  return content
11
10
  }
11
+ const { queryObj } = parseRequest(this.resource)
12
+ const type = queryObj.type
13
+ const index = queryObj.index || 0
12
14
  const mode = mpx.mode
13
15
  const env = mpx.env
14
- const defs = mpx.defs
15
- const query = loaderUtils.getOptions(this) || {}
16
16
  const filePath = this.resourcePath
17
17
  const parts = parseComponent(content, {
18
18
  filePath,
19
19
  needMap: this.sourceMap,
20
20
  mode,
21
- defs,
22
21
  env
23
22
  })
24
- let part = parts[query.type] || {}
23
+ let part = parts[type]
25
24
  if (Array.isArray(part)) {
26
- part = part[query.index] || {
27
- content: ''
28
- }
25
+ part = part[index]
29
26
  }
27
+ part = part || { content: '' }
30
28
  this.callback(null, part.content, part.map)
31
29
  }
@@ -1,8 +1,6 @@
1
- const getMainCompilation = require('../utils/get-main-compilation')
2
1
  const postcss = require('postcss')
3
- const loaderUtils = require('loader-utils')
4
2
  const loadPostcssConfig = require('./load-postcss-config')
5
- const { MPX_ROOT_VIEW, MPX_APP_MODULE_ID } = require('../staticConfig')
3
+ const { MPX_ROOT_VIEW, MPX_APP_MODULE_ID } = require('../utils/const')
6
4
  const trim = require('./plugins/trim')
7
5
  const rpx = require('./plugins/rpx')
8
6
  const vw = require('./plugins/vw')
@@ -15,18 +13,14 @@ const parseRequest = require('../utils/parse-request')
15
13
  module.exports = function (css, map) {
16
14
  this.cacheable()
17
15
  const cb = this.async()
18
- const loaderOptions = loaderUtils.getOptions(this) || {}
19
- const mainCompilation = getMainCompilation(this._compilation)
20
- const mpx = mainCompilation.__mpx__
21
- const defs = mpx.defs
22
16
  const { resourcePath, queryObj } = parseRequest(this.resource)
23
- const packageName = queryObj.packageRoot || mpx.currentPackageRoot || 'main'
24
- const componentsMap = mpx.componentsMap[packageName]
25
- const pagesMap = mpx.pagesMap
26
- const isApp = (!componentsMap[resourcePath] && !pagesMap[resourcePath])
27
-
17
+ const id = queryObj.moduleId || queryObj.mid
18
+ const mpx = this.getMpx()
19
+ const appInfo = mpx.appInfo
20
+ const defs = mpx.defs
21
+ const mode = mpx.mode
22
+ const isApp = resourcePath === appInfo.resourcePath
28
23
  const transRpxRulesRaw = mpx.transRpxRules
29
-
30
24
  const transRpxRules = transRpxRulesRaw ? (Array.isArray(transRpxRulesRaw) ? transRpxRulesRaw : [transRpxRulesRaw]) : []
31
25
 
32
26
  const testResolveRange = (include = () => true, exclude) => {
@@ -45,13 +39,12 @@ module.exports = function (css, map) {
45
39
  config.options
46
40
  )
47
41
  // ali环境处理host选择器
48
- if (mpx.mode === 'ali') {
49
- plugins.push(transSpecial({ id: loaderOptions.moduleId || loaderOptions.mid }))
42
+ if (mode === 'ali') {
43
+ plugins.push(transSpecial({ id }))
50
44
  }
51
45
 
52
- if (loaderOptions.scoped) {
53
- const moduleId = loaderOptions.moduleId || loaderOptions.mid
54
- plugins.push(scopeId({ id: moduleId }))
46
+ if (queryObj.scoped) {
47
+ plugins.push(scopeId({ id }))
55
48
  }
56
49
 
57
50
  plugins.push(pluginCondStrip({
@@ -90,7 +83,7 @@ module.exports = function (css, map) {
90
83
  .process(css, options)
91
84
  .then(result => {
92
85
  // ali环境添加全局样式抹平root差异
93
- if (mpx.mode === 'ali' && isApp) {
86
+ if (mode === 'ali' && isApp) {
94
87
  result.css += `\n.${MPX_ROOT_VIEW} { display: initial }\n.${MPX_APP_MODULE_ID} { line-height: normal }`
95
88
  }
96
89
  if (result.messages) {