@mpxjs/webpack-plugin 2.9.3 → 2.9.6
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/loader.js +0 -4
- package/lib/platform/index.js +9 -9
- package/lib/platform/template/wx/index.js +12 -4
- package/lib/runtime/components/web/mpx-movable-view.vue +1 -1
- package/lib/runtime/components/web/mpx-picker-view-column.vue +10 -2
- package/lib/runtime/components/web/mpx-picker.vue +9 -1
- package/lib/runtime/components/web/mpx-swiper.vue +2 -2
- package/lib/style-compiler/index.js +1 -2
- package/lib/utils/check-core-version-match.js +18 -14
- package/lib/web/processMainScript.js +49 -23
- package/lib/web/processScript.js +4 -4
- package/lib/web/script-helper.js +37 -33
- package/package.json +4 -3
- package/lib/style-compiler/plugins/trim.js +0 -15
package/lib/loader.js
CHANGED
|
@@ -222,10 +222,6 @@ module.exports = function (content) {
|
|
|
222
222
|
output += templateRes.output
|
|
223
223
|
output += stylesRes.output
|
|
224
224
|
output += jsonRes.output
|
|
225
|
-
if (ctorType === 'app' && jsonRes.jsonObj.window && jsonRes.jsonObj.window.navigationBarTitleText) {
|
|
226
|
-
mpx.appTitle = jsonRes.jsonObj.window.navigationBarTitleText
|
|
227
|
-
}
|
|
228
|
-
|
|
229
225
|
processScript(parts.script, {
|
|
230
226
|
loaderContext,
|
|
231
227
|
ctorType,
|
package/lib/platform/index.js
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
const runRules = require('./run-rules')
|
|
2
|
-
const specMap = {
|
|
3
|
-
template: {
|
|
4
|
-
wx: require('./template/wx')
|
|
5
|
-
},
|
|
6
|
-
json: {
|
|
7
|
-
wx: require('./json/wx')
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
2
|
|
|
11
3
|
module.exports = function getRulesRunner ({
|
|
12
4
|
type,
|
|
@@ -20,7 +12,15 @@ module.exports = function getRulesRunner ({
|
|
|
20
12
|
warn,
|
|
21
13
|
error
|
|
22
14
|
}) {
|
|
23
|
-
const
|
|
15
|
+
const specMap = {
|
|
16
|
+
template: {
|
|
17
|
+
wx: require('./template/wx')
|
|
18
|
+
},
|
|
19
|
+
json: {
|
|
20
|
+
wx: require('./json/wx')
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const spec = specMap[type]?.[srcMode]?.({ warn, error })
|
|
24
24
|
if (spec && spec.supportedModes.indexOf(mode) > -1) {
|
|
25
25
|
const normalizeTest = spec.normalizeTest
|
|
26
26
|
const mainRules = mainKey ? spec[mainKey] : spec
|
|
@@ -200,12 +200,20 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
200
200
|
},
|
|
201
201
|
{
|
|
202
202
|
// 样式类名绑定
|
|
203
|
-
test: /^wx:
|
|
204
|
-
web ({ value }) {
|
|
205
|
-
|
|
203
|
+
test: /^(class|wx:class)$/,
|
|
204
|
+
web ({ value }, { el }) {
|
|
205
|
+
if (el.isClassParsed) {
|
|
206
|
+
return false
|
|
207
|
+
}
|
|
208
|
+
const classBinding = []
|
|
209
|
+
el.isClassParsed = true
|
|
210
|
+
el.attrsList.filter(item => this.test.test(item.name)).forEach((item) => {
|
|
211
|
+
const parsed = parseMustacheWithContext(item.value)
|
|
212
|
+
classBinding.push(parsed.result)
|
|
213
|
+
})
|
|
206
214
|
return {
|
|
207
215
|
name: ':class',
|
|
208
|
-
value:
|
|
216
|
+
value: `[${classBinding}]`
|
|
209
217
|
}
|
|
210
218
|
}
|
|
211
219
|
},
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
this.refresh()
|
|
179
179
|
})
|
|
180
180
|
const elementToObserve = document.querySelector('.mpx-movable-scroll-content')
|
|
181
|
-
this.resizeObserver.observe(elementToObserve)
|
|
181
|
+
elementToObserve && this.resizeObserver.observe(elementToObserve)
|
|
182
182
|
}
|
|
183
183
|
},
|
|
184
184
|
refresh () {
|
|
@@ -15,7 +15,13 @@
|
|
|
15
15
|
export default {
|
|
16
16
|
name: 'mpx-picker-view-column',
|
|
17
17
|
props: {
|
|
18
|
-
value: Array
|
|
18
|
+
value: Array,
|
|
19
|
+
scrollOptions: {
|
|
20
|
+
type: Object,
|
|
21
|
+
default: () => {
|
|
22
|
+
return {}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
19
25
|
},
|
|
20
26
|
data() {
|
|
21
27
|
return {
|
|
@@ -64,7 +70,9 @@
|
|
|
64
70
|
rotate: -5,
|
|
65
71
|
wheelWrapperClass: 'wheel-scroll'
|
|
66
72
|
},
|
|
67
|
-
probeType: 3
|
|
73
|
+
probeType: 3,
|
|
74
|
+
bindToWrapper: true,
|
|
75
|
+
...this.scrollOptions
|
|
68
76
|
})
|
|
69
77
|
this.wheels[0].on('scrollStart', function () {
|
|
70
78
|
if (this.pickerView) {
|
|
@@ -138,6 +138,12 @@
|
|
|
138
138
|
fields: {
|
|
139
139
|
type: String,
|
|
140
140
|
default: 'day'
|
|
141
|
+
},
|
|
142
|
+
scrollOptions: {
|
|
143
|
+
type: Object,
|
|
144
|
+
default: () => {
|
|
145
|
+
return {}
|
|
146
|
+
}
|
|
141
147
|
}
|
|
142
148
|
},
|
|
143
149
|
data () {
|
|
@@ -311,7 +317,9 @@
|
|
|
311
317
|
wheelWrapperClass: 'wheel-scroll',
|
|
312
318
|
wheelItemClass: 'wheel-item'
|
|
313
319
|
},
|
|
314
|
-
probeType: 3
|
|
320
|
+
probeType: 3,
|
|
321
|
+
bindToWrapper: true,
|
|
322
|
+
...this.scrollOptions
|
|
315
323
|
})
|
|
316
324
|
if (this.mode === 'time' || this.mode === 'date') {
|
|
317
325
|
this.wheels[i].on('scrollStart', function (i) {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
default: () => {
|
|
48
48
|
return {}
|
|
49
49
|
}
|
|
50
|
-
}
|
|
50
|
+
}
|
|
51
51
|
},
|
|
52
52
|
data () {
|
|
53
53
|
return {
|
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
this.bs.scroller.hooks.on('beforeRefresh', () => {
|
|
213
213
|
this.initLayerComputed()
|
|
214
214
|
})
|
|
215
|
-
this.bs.on('
|
|
215
|
+
this.bs.on('slidePageChanged', (page) => {
|
|
216
216
|
this.currentIndex = this.vertical ? page.pageY : page.pageX
|
|
217
217
|
this.$emit('change', getCustomEvent('change', {
|
|
218
218
|
current: this.currentIndex,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const postcss = require('postcss')
|
|
2
2
|
const loadPostcssConfig = require('./load-postcss-config')
|
|
3
3
|
const { MPX_ROOT_VIEW, MPX_APP_MODULE_ID } = require('../utils/const')
|
|
4
|
-
const trim = require('./plugins/trim')
|
|
5
4
|
const rpx = require('./plugins/rpx')
|
|
6
5
|
const vw = require('./plugins/vw')
|
|
7
6
|
const pluginCondStrip = require('./plugins/conditional-strip')
|
|
@@ -30,7 +29,7 @@ module.exports = function (css, map) {
|
|
|
30
29
|
|
|
31
30
|
const inlineConfig = Object.assign({}, mpx.postcssInlineConfig, { defs })
|
|
32
31
|
loadPostcssConfig(this, inlineConfig).then(config => {
|
|
33
|
-
const plugins = [
|
|
32
|
+
const plugins = [] // init with trim plugin
|
|
34
33
|
const options = Object.assign(
|
|
35
34
|
{
|
|
36
35
|
to: this.resourcePath,
|
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
// @mpxjs/webpack-plugin 2.7.x -> @mpxjs/core 2.7.x
|
|
2
|
-
// @mpxjs/webpack-plugin 2.8.x -> @mpxjs/core 2.8.x
|
|
3
1
|
const coreVersion = require('@mpxjs/core/package.json').version
|
|
4
|
-
const
|
|
5
|
-
const
|
|
2
|
+
const utilsVersion = require('@mpxjs/utils/package.json').version
|
|
3
|
+
const corePath = require.resolve('@mpxjs/core')
|
|
4
|
+
const utilsPath = require.resolve('@mpxjs/utils')
|
|
5
|
+
const semverLt = require('semver/functions/lt')
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
const leastCoreVersion = '2.8.59'
|
|
8
|
+
const leastUtilsVersion = '2.8.59'
|
|
9
|
+
|
|
10
|
+
function compare (version, leastVersion, npmName, npmPath) {
|
|
11
|
+
if (semverLt(version, leastVersion)) {
|
|
12
|
+
throw new Error(
|
|
13
|
+
`${npmName} packages version mismatch:
|
|
14
|
+
-${npmName}@${version}(${npmPath})
|
|
15
|
+
This may cause things to work incorrectly, Make sure the usage version is greater than ${leastVersion}.
|
|
16
16
|
`
|
|
17
|
-
|
|
17
|
+
)
|
|
18
|
+
}
|
|
18
19
|
}
|
|
20
|
+
|
|
21
|
+
compare(coreVersion, leastCoreVersion, '@mpxjs/core', corePath)
|
|
22
|
+
compare(utilsVersion, leastUtilsVersion, '@mpxjs/utils', utilsPath)
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
const addQuery = require('../utils/add-query')
|
|
2
2
|
const normalize = require('../utils/normalize')
|
|
3
3
|
const optionProcessorPath = normalize.lib('runtime/optionProcessor')
|
|
4
|
-
const {
|
|
4
|
+
const {
|
|
5
|
+
buildComponentsMap,
|
|
6
|
+
buildPagesMap,
|
|
7
|
+
buildGlobalParams,
|
|
8
|
+
shallowStringify,
|
|
9
|
+
stringifyRequest,
|
|
10
|
+
buildI18n
|
|
11
|
+
} = require('./script-helper')
|
|
5
12
|
|
|
6
13
|
module.exports = function (script, {
|
|
7
14
|
loaderContext,
|
|
@@ -17,38 +24,57 @@ module.exports = function (script, {
|
|
|
17
24
|
localPagesMap,
|
|
18
25
|
resource
|
|
19
26
|
}, callback) {
|
|
20
|
-
const { i18n, webConfig } = loaderContext.getMpx()
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
const { i18n, webConfig, hasUnoCSS } = loaderContext.getMpx()
|
|
28
|
+
const { pagesMap, firstPage, globalTabBar } = buildPagesMap({
|
|
29
|
+
localPagesMap,
|
|
30
|
+
loaderContext,
|
|
31
|
+
tabBar,
|
|
32
|
+
tabBarMap,
|
|
33
|
+
tabBarStr,
|
|
34
|
+
jsonConfig
|
|
35
|
+
})
|
|
23
36
|
|
|
24
37
|
const componentsMap = buildComponentsMap({ localComponentsMap, loaderContext })
|
|
25
38
|
|
|
26
39
|
const scriptSrcMode = script ? script.mode || srcMode : srcMode
|
|
27
40
|
|
|
28
|
-
let output =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
let output = ' import \'@mpxjs/webpack-plugin/lib/runtime/base.styl\'\n'
|
|
42
|
+
// hasUnoCSS由@mpxjs/unocss-plugin注入
|
|
43
|
+
if (hasUnoCSS) {
|
|
44
|
+
output += ' import \'uno.css\'\n'
|
|
45
|
+
}
|
|
46
|
+
output += ` import Vue from 'vue'
|
|
47
|
+
import VueRouter from 'vue-router'
|
|
48
|
+
import Mpx from '@mpxjs/core'
|
|
49
|
+
import App from ${stringifyRequest(loaderContext, addQuery(resource, { isApp: true }))}
|
|
50
|
+
import { processAppOption, getComponent } from ${stringifyRequest(loaderContext, optionProcessorPath)}
|
|
51
|
+
Vue.use(VueRouter)\n`
|
|
36
52
|
|
|
37
53
|
if (i18n) {
|
|
38
54
|
output += buildI18n({ i18n, loaderContext })
|
|
39
55
|
}
|
|
40
56
|
|
|
41
|
-
output += buildGlobalParams({
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
57
|
+
output += buildGlobalParams({
|
|
58
|
+
moduleId,
|
|
59
|
+
scriptSrcMode,
|
|
60
|
+
loaderContext,
|
|
61
|
+
isProduction,
|
|
62
|
+
jsonConfig,
|
|
63
|
+
webConfig,
|
|
64
|
+
isMain: true,
|
|
65
|
+
globalTabBar
|
|
66
|
+
})
|
|
67
|
+
output += `
|
|
68
|
+
export default processAppOption({
|
|
69
|
+
App,
|
|
70
|
+
tabBarMap: ${JSON.stringify(tabBarMap)},
|
|
71
|
+
firstPage: ${JSON.stringify(firstPage)},
|
|
72
|
+
pagesMap: ${shallowStringify(pagesMap)},
|
|
73
|
+
componentsMap: ${shallowStringify(componentsMap)},
|
|
74
|
+
Vue,
|
|
75
|
+
VueRouter,
|
|
76
|
+
webConfig: ${JSON.stringify(webConfig)}
|
|
77
|
+
})\n`
|
|
52
78
|
|
|
53
79
|
callback(null, {
|
|
54
80
|
output
|
package/lib/web/processScript.js
CHANGED
|
@@ -75,7 +75,8 @@ module.exports = function (script, {
|
|
|
75
75
|
|
|
76
76
|
content += buildGlobalParams({ moduleId, scriptSrcMode, loaderContext, isProduction })
|
|
77
77
|
content += getRequireScript({ ctorType, script, loaderContext })
|
|
78
|
-
content += `
|
|
78
|
+
content += `
|
|
79
|
+
export default processComponentOption({
|
|
79
80
|
option: global.__mpxOptionsMap[${JSON.stringify(moduleId)}],
|
|
80
81
|
ctorType: ${JSON.stringify(ctorType)},
|
|
81
82
|
outputPath: ${JSON.stringify(outputPath)},
|
|
@@ -85,12 +86,11 @@ module.exports = function (script, {
|
|
|
85
86
|
componentGenerics: ${JSON.stringify(componentGenerics)},
|
|
86
87
|
genericsInfo: ${JSON.stringify(genericsInfo)},
|
|
87
88
|
mixin: getWxsMixin(wxsModules),
|
|
88
|
-
hasApp: ${hasApp}
|
|
89
|
-
|
|
89
|
+
hasApp: ${hasApp}
|
|
90
|
+
})\n`
|
|
90
91
|
return content
|
|
91
92
|
}
|
|
92
93
|
})
|
|
93
|
-
output += '\n'
|
|
94
94
|
|
|
95
95
|
callback(null, {
|
|
96
96
|
output
|
package/lib/web/script-helper.js
CHANGED
|
@@ -81,10 +81,11 @@ function buildPagesMap ({ localPagesMap, loaderContext, tabBar, tabBarMap, tabBa
|
|
|
81
81
|
})
|
|
82
82
|
}
|
|
83
83
|
if (tabBarStr && tabBarPagesMap) {
|
|
84
|
-
globalTabBar += `
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
globalTabBar += `
|
|
85
|
+
global.__tabBar = ${tabBarStr}
|
|
86
|
+
Vue.observable(global.__tabBar)
|
|
87
|
+
// @ts-ignore
|
|
88
|
+
global.__tabBarPagesMap = ${shallowStringify(tabBarPagesMap)}\n`
|
|
88
89
|
}
|
|
89
90
|
Object.keys(localPagesMap).forEach((pagePath) => {
|
|
90
91
|
const pageCfg = localPagesMap[pagePath]
|
|
@@ -125,29 +126,30 @@ function getRequireScript ({ ctorType, script, loaderContext }) {
|
|
|
125
126
|
function buildGlobalParams ({ moduleId, scriptSrcMode, loaderContext, isProduction, jsonConfig, webConfig, isMain, globalTabBar }) {
|
|
126
127
|
let content = ''
|
|
127
128
|
if (isMain) {
|
|
128
|
-
content += `
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const router = global.__mpxRouter
|
|
134
|
-
if(!router) return []
|
|
135
|
-
// @ts-ignore
|
|
136
|
-
return (router.lastStack || router.stack).map(item => {
|
|
137
|
-
let page
|
|
138
|
-
const vnode = item.vnode
|
|
139
|
-
if (vnode && vnode.componentInstance) {
|
|
140
|
-
page = vnode.tag.endsWith('mpx-tab-bar-container') ? vnode.componentInstance.$refs.tabBarPage : vnode.componentInstance
|
|
141
|
-
}
|
|
142
|
-
return page || { route: item.path.slice(1) }
|
|
143
|
-
})
|
|
129
|
+
content += `
|
|
130
|
+
global.getApp = function(){}
|
|
131
|
+
global.getCurrentPages = function () {
|
|
132
|
+
if (!(typeof window !== 'undefined')) {
|
|
133
|
+
console.error('[Mpx runtime error]: Dangerous API! global.getCurrentPages is running in non browser environment, It may cause some problems, please use this method with caution')
|
|
144
134
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
135
|
+
const router = global.__mpxRouter
|
|
136
|
+
if(!router) return []
|
|
137
|
+
// @ts-ignore
|
|
138
|
+
return (router.lastStack || router.stack).map(item => {
|
|
139
|
+
let page
|
|
140
|
+
const vnode = item.vnode
|
|
141
|
+
if (vnode && vnode.componentInstance) {
|
|
142
|
+
page = vnode.tag.endsWith('mpx-tab-bar-container') ? vnode.componentInstance.$refs.tabBarPage : vnode.componentInstance
|
|
143
|
+
}
|
|
144
|
+
return page || { route: item.path.slice(1) }
|
|
145
|
+
})
|
|
146
|
+
}
|
|
147
|
+
global.__networkTimeout = ${JSON.stringify(jsonConfig.networkTimeout)}
|
|
148
|
+
global.__mpxGenericsMap = {}
|
|
149
|
+
global.__mpxOptionsMap = {}
|
|
150
|
+
global.__style = ${JSON.stringify(jsonConfig.style || 'v1')}
|
|
151
|
+
global.__mpxPageConfig = ${JSON.stringify(jsonConfig.window)}
|
|
152
|
+
global.__mpxTransRpxFn = ${webConfig.transRpxFn}\n`
|
|
151
153
|
if (globalTabBar) {
|
|
152
154
|
content += globalTabBar
|
|
153
155
|
}
|
|
@@ -164,9 +166,10 @@ function buildGlobalParams ({ moduleId, scriptSrcMode, loaderContext, isProducti
|
|
|
164
166
|
function buildI18n ({ i18n, loaderContext }) {
|
|
165
167
|
let i18nContent = ''
|
|
166
168
|
const i18nObj = Object.assign({}, i18n)
|
|
167
|
-
i18nContent += `
|
|
168
|
-
|
|
169
|
-
|
|
169
|
+
i18nContent += `
|
|
170
|
+
import VueI18n from 'vue-i18n'
|
|
171
|
+
import { createI18n } from 'vue-i18n-bridge'
|
|
172
|
+
Vue.use(VueI18n , { bridge: true })\n`
|
|
170
173
|
const requestObj = {}
|
|
171
174
|
const i18nKeys = ['messages', 'dateTimeFormats', 'numberFormats']
|
|
172
175
|
i18nKeys.forEach((key) => {
|
|
@@ -179,10 +182,11 @@ function buildI18n ({ i18n, loaderContext }) {
|
|
|
179
182
|
Object.keys(requestObj).forEach((key) => {
|
|
180
183
|
i18nContent += ` i18nCfg.${key} = require(${requestObj[key]})\n`
|
|
181
184
|
})
|
|
182
|
-
i18nContent +=
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
i18nContent += `
|
|
186
|
+
i18nCfg.legacy = false
|
|
187
|
+
const i18n = createI18n(i18nCfg, VueI18n)
|
|
188
|
+
Vue.use(i18n)
|
|
189
|
+
Mpx.i18n = i18n\n`
|
|
186
190
|
return i18nContent
|
|
187
191
|
}
|
|
188
192
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpxjs/webpack-plugin",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.6",
|
|
4
4
|
"description": "mpx compile core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mpx"
|
|
@@ -54,11 +54,12 @@
|
|
|
54
54
|
"postcss-modules-values": "^4.0.0",
|
|
55
55
|
"postcss-selector-parser": "^6.0.8",
|
|
56
56
|
"postcss-value-parser": "^4.0.2",
|
|
57
|
+
"semver": "^7.5.4",
|
|
57
58
|
"source-list-map": "^2.0.0",
|
|
58
59
|
"video.js": "^8.6.0"
|
|
59
60
|
},
|
|
60
61
|
"peerDependencies": {
|
|
61
|
-
"webpack": "^5.
|
|
62
|
+
"webpack": "^5.75.0"
|
|
62
63
|
},
|
|
63
64
|
"publishConfig": {
|
|
64
65
|
"registry": "https://registry.npmjs.org",
|
|
@@ -82,5 +83,5 @@
|
|
|
82
83
|
"engines": {
|
|
83
84
|
"node": ">=14.14.0"
|
|
84
85
|
},
|
|
85
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "9034343edacc95da66b6e8ddb5c2f64a4be97231"
|
|
86
87
|
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
module.exports = (opts) => {
|
|
3
|
-
return {
|
|
4
|
-
postcssPlugin: 'trim',
|
|
5
|
-
Once: (root) => {
|
|
6
|
-
root.walk(({ type, raws }) => {
|
|
7
|
-
if (type === 'rule' || type === 'atrule') {
|
|
8
|
-
raws.before = raws.after = '\n'
|
|
9
|
-
}
|
|
10
|
-
})
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
module.exports.postcss = true
|