@mpxjs/webpack-plugin 2.7.0-alpha.0 → 2.7.0-alpha.2

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 (108) hide show
  1. package/README.md +1 -1
  2. package/lib/config.js +14 -0
  3. package/lib/dependencies/AddEntryDependency.js +24 -0
  4. package/lib/dependencies/AppEntryDependency.js +2 -0
  5. package/lib/dependencies/CommonJsAsyncDependency.js +51 -0
  6. package/lib/dependencies/CommonJsVariableDependency.js +13 -6
  7. package/lib/dependencies/DynamicEntryDependency.js +85 -41
  8. package/lib/dependencies/FlagPluginDependency.js +1 -0
  9. package/lib/dependencies/RecordIndependentDependency.js +44 -0
  10. package/lib/dependencies/RecordResourceMapDependency.js +62 -0
  11. package/lib/dependencies/RemoveEntryDependency.js +40 -0
  12. package/lib/dependencies/ResolveDependency.js +11 -6
  13. package/lib/extractor.js +17 -7
  14. package/lib/file-loader.js +2 -2
  15. package/lib/helpers.js +6 -12
  16. package/lib/independent-loader.js +52 -0
  17. package/lib/index.js +595 -304
  18. package/lib/json-compiler/helper.js +36 -32
  19. package/lib/json-compiler/index.js +119 -66
  20. package/lib/json-compiler/plugin.js +23 -7
  21. package/lib/loader.js +135 -90
  22. package/lib/native-loader.js +37 -69
  23. package/lib/parser.js +1 -2
  24. package/lib/partial-compile/index.js +35 -0
  25. package/lib/platform/json/wx/index.js +8 -3
  26. package/lib/platform/template/normalize-component-rules.js +2 -3
  27. package/lib/platform/template/wx/component-config/button.js +17 -5
  28. package/lib/platform/template/wx/component-config/image.js +4 -0
  29. package/lib/platform/template/wx/component-config/input.js +4 -0
  30. package/lib/platform/template/wx/component-config/navigator.js +1 -1
  31. package/lib/platform/template/wx/component-config/rich-text.js +4 -0
  32. package/lib/platform/template/wx/component-config/scroll-view.js +4 -0
  33. package/lib/platform/template/wx/component-config/switch.js +4 -0
  34. package/lib/platform/template/wx/component-config/text.js +4 -0
  35. package/lib/platform/template/wx/component-config/textarea.js +5 -0
  36. package/lib/platform/template/wx/component-config/view.js +4 -0
  37. package/lib/platform/template/wx/index.js +149 -3
  38. package/lib/record-loader.js +2 -2
  39. package/lib/resolve-loader.js +4 -1
  40. package/lib/resolver/AddEnvPlugin.js +4 -3
  41. package/lib/resolver/AddModePlugin.js +4 -3
  42. package/lib/resolver/FixDescriptionInfoPlugin.js +28 -0
  43. package/lib/resolver/PackageEntryPlugin.js +23 -36
  44. package/lib/runtime/base.styl +5 -0
  45. package/lib/runtime/components/tenon/getInnerListeners.js +317 -0
  46. package/lib/runtime/components/tenon/tenon-button.vue +305 -0
  47. package/lib/runtime/components/tenon/tenon-image.vue +61 -0
  48. package/lib/runtime/components/tenon/tenon-input.vue +99 -0
  49. package/lib/runtime/components/tenon/tenon-rich-text.vue +21 -0
  50. package/lib/runtime/components/tenon/tenon-scroll-view.vue +124 -0
  51. package/lib/runtime/components/tenon/tenon-switch.vue +91 -0
  52. package/lib/runtime/components/tenon/tenon-text-area.vue +64 -0
  53. package/lib/runtime/components/tenon/tenon-text.vue +64 -0
  54. package/lib/runtime/components/tenon/tenon-view.vue +93 -0
  55. package/lib/runtime/components/tenon/util.js +44 -0
  56. package/lib/runtime/components/web/getInnerListeners.js +51 -45
  57. package/lib/runtime/components/web/mpx-image.vue +20 -5
  58. package/lib/runtime/components/web/mpx-keep-alive.vue +4 -1
  59. package/lib/runtime/components/web/mpx-movable-view.vue +6 -2
  60. package/lib/runtime/components/web/mpx-swiper.vue +37 -8
  61. package/lib/runtime/components/web/mpx-tab-bar-container.vue +2 -2
  62. package/lib/runtime/components/web/mpx-textarea.vue +1 -1
  63. package/lib/runtime/i18n.wxs +28 -8
  64. package/lib/runtime/optionProcessor.js +50 -20
  65. package/lib/runtime/optionProcessor.tenon.js +386 -0
  66. package/lib/runtime/stringify.wxs +6 -4
  67. package/lib/selector.js +23 -5
  68. package/lib/style-compiler/index.js +12 -13
  69. package/lib/style-compiler/load-postcss-config.js +3 -1
  70. package/lib/style-compiler/plugins/conditional-strip.js +68 -65
  71. package/lib/style-compiler/plugins/hm.js +20 -0
  72. package/lib/style-compiler/plugins/rpx.js +43 -37
  73. package/lib/style-compiler/plugins/scope-id.js +79 -72
  74. package/lib/style-compiler/plugins/trans-special.js +25 -18
  75. package/lib/style-compiler/plugins/trim.js +13 -7
  76. package/lib/style-compiler/plugins/vw.js +19 -12
  77. package/lib/template-compiler/bind-this.js +4 -4
  78. package/lib/template-compiler/compiler.js +172 -62
  79. package/lib/template-compiler/index.js +8 -9
  80. package/lib/template-compiler/trans-dynamic-class-expr.js +32 -22
  81. package/lib/tenon/index.js +105 -0
  82. package/lib/tenon/processJSON.js +356 -0
  83. package/lib/tenon/processScript.js +261 -0
  84. package/lib/tenon/processStyles.js +21 -0
  85. package/lib/tenon/processTemplate.js +133 -0
  86. package/lib/utils/const.js +6 -1
  87. package/lib/utils/eval-json-js.js +31 -0
  88. package/lib/utils/get-entry-name.js +3 -3
  89. package/lib/utils/get-json-content.js +42 -0
  90. package/lib/utils/get-relative-path.js +25 -0
  91. package/lib/utils/match-condition.js +4 -1
  92. package/lib/utils/normalize.js +4 -2
  93. package/lib/utils/resolve.js +13 -0
  94. package/lib/web/processJSON.js +113 -144
  95. package/lib/web/processScript.js +45 -38
  96. package/lib/web/processTemplate.js +56 -41
  97. package/lib/wxml/loader.js +1 -6
  98. package/lib/wxs/WxsModuleIdsPlugin.js +11 -14
  99. package/lib/wxs/i18n-loader.js +5 -4
  100. package/lib/wxs/loader.js +87 -56
  101. package/lib/wxs/pre-loader.js +30 -10
  102. package/lib/wxss/loader.js +3 -3
  103. package/lib/wxss/processCss.js +135 -131
  104. package/package.json +23 -17
  105. package/lib/built-in-loader.js +0 -49
  106. package/lib/dependencies/RecordStaticResourceDependency.js +0 -47
  107. package/lib/utils/get-main-compilation.js +0 -6
  108. package/lib/utils/read-json-for-src.js +0 -34
@@ -1,5 +1,3 @@
1
- const postcss = require('postcss')
2
-
3
1
  /**
4
2
  * 按平台条件编译CSS,用法如下:
5
3
  * @type {postcss.Plugin<any>}
@@ -44,7 +42,7 @@ const postcss = require('postcss')
44
42
  // @mpx-endif
45
43
  // */
46
44
  // `
47
- module.exports = postcss.plugin('conditional-strip', (options = {}) => {
45
+ module.exports = (options = {}) => {
48
46
  const { defs } = options
49
47
 
50
48
  const defKeys = Object.keys(defs)
@@ -91,71 +89,76 @@ module.exports = postcss.plugin('conditional-strip', (options = {}) => {
91
89
  return parseCondition(/@mpx-elif[^(]*?\(([\s\S]*)\)/, content)
92
90
  }
93
91
 
94
- return function (root, result) {
95
- const condsStacks = []
96
- const currentConds = []
97
- let curDepth = -1
92
+ return {
93
+ postcssPlugin: 'conditional-strip',
94
+ Once (root) {
95
+ const condsStacks = []
96
+ const currentConds = []
97
+ let curDepth = -1
98
98
 
99
- root.walk(node => {
100
- let isKeyword = false
101
- if (node.type === 'comment') {
102
- const { text } = node
103
- if (isIfStart(text)) {
104
- isKeyword = true
105
- const cond = parseIf(text)
106
- curDepth++
107
- const parentCond = currentConds[curDepth - 1]
108
- if (parentCond && parentCond.shouldRemove) {
109
- cond.shouldRemove = true
110
- }
111
- cond.children.push(node)
112
- condsStacks.push({
113
- if: cond
114
- })
115
- currentConds[curDepth] = cond
116
- } else if (isElseIf(text)) {
117
- isKeyword = true
118
- const cond = parseElseIf(text)
119
- const parentCond = currentConds[curDepth - 1]
120
- if (parentCond && parentCond.shouldRemove) {
121
- cond.shouldRemove = true
122
- }
123
- cond.children.push(node)
124
- condsStacks[curDepth].elif = cond
125
- currentConds[curDepth] = cond
126
- } else if (isElse(text)) {
127
- isKeyword = true
128
- const curConds = condsStacks[curDepth]
129
- const cond = {
130
- shouldRemove: !(curConds.if.shouldRemove && (!curConds.elif || curConds.elif.shouldRemove)),
131
- children: [node]
132
- }
133
- const parentCond = currentConds[curDepth - 1]
134
- if (parentCond && parentCond.shouldRemove) {
135
- cond.shouldRemove = true
136
- }
137
- condsStacks[curDepth].else = cond
138
- currentConds[curDepth] = cond
139
- } else if (isEndIf(text)) {
140
- isKeyword = true
141
- const curConds = condsStacks.pop()
142
- Object.keys(curConds).forEach(k => {
143
- curConds[k].children.forEach(node => {
144
- node.remove()
99
+ root.walk(node => {
100
+ let isKeyword = false
101
+ if (node.type === 'comment') {
102
+ const { text } = node
103
+ if (isIfStart(text)) {
104
+ isKeyword = true
105
+ const cond = parseIf(text)
106
+ curDepth++
107
+ const parentCond = currentConds[curDepth - 1]
108
+ if (parentCond && parentCond.shouldRemove) {
109
+ cond.shouldRemove = true
110
+ }
111
+ cond.children.push(node)
112
+ condsStacks.push({
113
+ if: cond
145
114
  })
146
- })
147
- currentConds.pop()
148
- curDepth--
149
- node.remove()
115
+ currentConds[curDepth] = cond
116
+ } else if (isElseIf(text)) {
117
+ isKeyword = true
118
+ const cond = parseElseIf(text)
119
+ const parentCond = currentConds[curDepth - 1]
120
+ if (parentCond && parentCond.shouldRemove) {
121
+ cond.shouldRemove = true
122
+ }
123
+ cond.children.push(node)
124
+ condsStacks[curDepth].elif = cond
125
+ currentConds[curDepth] = cond
126
+ } else if (isElse(text)) {
127
+ isKeyword = true
128
+ const curConds = condsStacks[curDepth]
129
+ const cond = {
130
+ shouldRemove: !(curConds.if.shouldRemove && (!curConds.elif || curConds.elif.shouldRemove)),
131
+ children: [node]
132
+ }
133
+ const parentCond = currentConds[curDepth - 1]
134
+ if (parentCond && parentCond.shouldRemove) {
135
+ cond.shouldRemove = true
136
+ }
137
+ condsStacks[curDepth].else = cond
138
+ currentConds[curDepth] = cond
139
+ } else if (isEndIf(text)) {
140
+ isKeyword = true
141
+ const curConds = condsStacks.pop()
142
+ Object.keys(curConds).forEach(k => {
143
+ curConds[k].children.forEach(node => {
144
+ node.remove()
145
+ })
146
+ })
147
+ currentConds.pop()
148
+ curDepth--
149
+ node.remove()
150
+ }
150
151
  }
151
- }
152
152
 
153
- if (!isKeyword) {
154
- const curCond = currentConds[curDepth]
155
- if (curCond && curCond.shouldRemove) {
156
- curCond.children.push(node)
153
+ if (!isKeyword) {
154
+ const curCond = currentConds[curDepth]
155
+ if (curCond && curCond.shouldRemove) {
156
+ curCond.children.push(node)
157
+ }
157
158
  }
158
- }
159
- })
159
+ })
160
+ }
160
161
  }
161
- })
162
+ }
163
+
164
+ module.exports.postcss = true
@@ -0,0 +1,20 @@
1
+ const postcss = require('postcss')
2
+ const rpxRegExp = /\b(\d+(\.\d+)?)rpx\b/
3
+ const rpxRegExpG = /\b(\d+(\.\d+)?)rpx\b/g
4
+
5
+ module.exports = postcss.plugin('hm', (options = {}) => root => {
6
+ function transHm (declaration) {
7
+ if (rpxRegExp.test(declaration.value)) {
8
+ declaration.value = declaration.value.replace(rpxRegExpG, function (match, $1) {
9
+ if ($1 === '0') return $1
10
+ return `${$1}hm`
11
+ })
12
+ }
13
+ }
14
+
15
+ root.walkRules(rule => {
16
+ rule.walkDecls(declaration => {
17
+ transHm(declaration)
18
+ })
19
+ })
20
+ })
@@ -1,45 +1,51 @@
1
- const postcss = require('postcss')
2
1
  const pxRegExp = /\b(\d+(\.\d+)?)px\b/
3
2
  const pxRegExpG = /\b(\d+(\.\d+)?)px\b/g
3
+ // rpx
4
+ module.exports = (options = {}) => {
5
+ return {
6
+ postcssPlugin: 'rpx',
7
+ Once (root) {
8
+ const mode = options.mode || 'only'
9
+ const defaultIgnoreComment = mode === 'all' ? 'use px' : 'use rpx'
10
+ const baseWidth = 750
11
+ const designWidth = options.designWidth || 750
12
+ const ratio = +(baseWidth / designWidth).toFixed(2)
13
+ function isIgnoreComment (node) {
14
+ let result = node && node.type === 'comment' && node.text.trim() === (options.comment || defaultIgnoreComment)
15
+ if (result) {
16
+ node.remove()
17
+ }
18
+ return result
19
+ }
4
20
 
5
- module.exports = postcss.plugin('rpx', (options = {}) => root => {
6
- const mode = options.mode || 'only'
7
- const defaultIgnoreComment = mode === 'all' ? 'use px' : 'use rpx'
8
- const baseWidth = 750
9
- const designWidth = options.designWidth || 750
10
- const ratio = +(baseWidth / designWidth).toFixed(2)
11
- function isIgnoreComment (node) {
12
- let result = node && node.type === 'comment' && node.text.trim() === (options.comment || defaultIgnoreComment)
13
- if (result) {
14
- node.remove()
15
- }
16
- return result
17
- }
21
+ function transRpx (declaration) {
22
+ if (pxRegExp.test(declaration.value)) {
23
+ declaration.value = declaration.value.replace(pxRegExpG, function (match, $1) {
24
+ if ($1 === '0') return $1
25
+ return `${$1 * ratio}rpx`
26
+ })
27
+ }
28
+ }
18
29
 
19
- function transRpx (declaration) {
20
- if (pxRegExp.test(declaration.value)) {
21
- declaration.value = declaration.value.replace(pxRegExpG, function (match, $1) {
22
- if ($1 === '0') return $1
23
- return `${$1 * ratio}rpx`
30
+ root.walkRules(rule => {
31
+ let ignore = false
32
+ if (isIgnoreComment(rule.prev()) || isIgnoreComment(rule.last)) {
33
+ ignore = true
34
+ }
35
+ rule.walkDecls(declaration => {
36
+ if (ignore || isIgnoreComment(declaration.prev())) {
37
+ if (mode === 'only') {
38
+ transRpx(declaration)
39
+ }
40
+ } else {
41
+ if (mode === 'all') {
42
+ transRpx(declaration)
43
+ }
44
+ }
45
+ })
24
46
  })
25
47
  }
26
48
  }
49
+ }
27
50
 
28
- root.walkRules(rule => {
29
- let ignore = false
30
- if (isIgnoreComment(rule.prev()) || isIgnoreComment(rule.last)) {
31
- ignore = true
32
- }
33
- rule.walkDecls(declaration => {
34
- if (ignore || isIgnoreComment(declaration.prev())) {
35
- if (mode === 'only') {
36
- transRpx(declaration)
37
- }
38
- } else {
39
- if (mode === 'all') {
40
- transRpx(declaration)
41
- }
42
- }
43
- })
44
- })
45
- })
51
+ module.exports.postcss = true
@@ -1,81 +1,88 @@
1
- const postcss = require('postcss')
2
1
  const selectorParser = require('postcss-selector-parser')
2
+ // scope-id
3
3
 
4
- module.exports = postcss.plugin('scope-id', ({ id }) => root => {
5
- const keyframes = Object.create(null)
4
+ module.exports = ({ id }) => {
5
+ return {
6
+ postcssPlugin: 'scope-id',
7
+ Once: (root) => {
8
+ const keyframes = Object.create(null)
6
9
 
7
- root.each(function rewriteSelector (node) {
8
- if (!node.selector) {
9
- // handle media queries
10
- if (node.type === 'atrule') {
11
- if (node.name === 'media' || node.name === 'supports') {
12
- node.each(rewriteSelector)
13
- } else if (/-?keyframes$/.test(node.name)) {
14
- // register keyframes
15
- keyframes[node.params] = node.params = node.params + '-' + id
16
- }
17
- }
18
- return
19
- }
20
- node.selector = selectorParser(selectors => {
21
- selectors.each(selector => {
22
- let node = null
23
- selector.each(n => {
24
- // ">>>" combinator
25
- if (n.type === 'combinator' && n.value === '>>>') {
26
- n.value = ' '
27
- n.spaces.before = n.spaces.after = ''
28
- return false
29
- }
30
- // /deep/ alias for >>>, since >>> doesn't work in SASS
31
- if (n.type === 'tag' && n.value === '/deep/') {
32
- const prev = n.prev()
33
- if (prev && prev.type === 'combinator' && prev.value === ' ') {
34
- prev.remove()
10
+ root.each(function rewriteSelector (node) {
11
+ if (!node.selector) {
12
+ // handle media queries
13
+ if (node.type === 'atrule') {
14
+ if (node.name === 'media' || node.name === 'supports') {
15
+ node.each(rewriteSelector)
16
+ } else if (/-?keyframes$/.test(node.name)) {
17
+ // register keyframes
18
+ keyframes[node.params] = node.params = node.params + '-' + id
35
19
  }
36
- n.remove()
37
- return false
38
20
  }
39
- if (n.type !== 'pseudo' && n.type !== 'combinator') {
40
- node = n
41
- }
42
- })
43
- // 对于page selector不添加scope id
44
- if (node && node.type === 'tag' && node.value === 'page') return
45
- selector.insertAfter(node, selectorParser.className({
46
- value: id
47
- }))
21
+ return
22
+ }
23
+ node.selector = selectorParser(selectors => {
24
+ selectors.each(selector => {
25
+ let node = null
26
+ selector.each(n => {
27
+ // ">>>" combinator
28
+ if (n.type === 'combinator' && n.value === '>>>') {
29
+ n.value = ' '
30
+ n.spaces.before = n.spaces.after = ''
31
+ return false
32
+ }
33
+ // /deep/ alias for >>>, since >>> doesn't work in SASS
34
+ if (n.type === 'tag' && n.value === '/deep/') {
35
+ const prev = n.prev()
36
+ if (prev && prev.type === 'combinator' && prev.value === ' ') {
37
+ prev.remove()
38
+ }
39
+ n.remove()
40
+ return false
41
+ }
42
+ if (n.type !== 'pseudo' && n.type !== 'combinator') {
43
+ node = n
44
+ }
45
+ })
46
+ // 对于page selector不添加scope id
47
+ if (node && node.type === 'tag' && node.value === 'page') return
48
+ selector.insertAfter(node, selectorParser.className({
49
+ value: id
50
+ }))
51
+ })
52
+ }).processSync(node.selector)
48
53
  })
49
- }).process(node.selector).result
50
- })
51
54
 
52
- // If keyframes are found in this <style>, find and rewrite animation names
53
- // in declarations.
54
- // Caveat: this only works for keyframes and animation rules in the same
55
- // <style> element.
56
- if (Object.keys(keyframes).length) {
57
- root.walkDecls(decl => {
58
- // individual animation-name declaration
59
- if (/-?animation-name$/.test(decl.prop)) {
60
- decl.value = decl.value.split(',')
61
- .map(v => keyframes[v.trim()] || v.trim())
62
- .join(',')
63
- }
64
- // shorthand
65
- if (/-?animation$/.test(decl.prop)) {
66
- decl.value = decl.value.split(',')
67
- .map(v => {
68
- const vals = v.trim().split(/\s+/)
69
- const i = vals.findIndex(val => keyframes[val])
70
- if (i !== -1) {
71
- vals.splice(i, 1, keyframes[vals[i]])
72
- return vals.join(' ')
73
- } else {
74
- return v
75
- }
76
- })
77
- .join(',')
55
+ // If keyframes are found in this <style>, find and rewrite animation names
56
+ // in declarations.
57
+ // Caveat: this only works for keyframes and animation rules in the same
58
+ // <style> element.
59
+ if (Object.keys(keyframes).length) {
60
+ root.walkDecls(decl => {
61
+ // individual animation-name declaration
62
+ if (/-?animation-name$/.test(decl.prop)) {
63
+ decl.value = decl.value.split(',')
64
+ .map(v => keyframes[v.trim()] || v.trim())
65
+ .join(',')
66
+ }
67
+ // shorthand
68
+ if (/-?animation$/.test(decl.prop)) {
69
+ decl.value = decl.value.split(',')
70
+ .map(v => {
71
+ const vals = v.trim().split(/\s+/)
72
+ const i = vals.findIndex(val => keyframes[val])
73
+ if (i !== -1) {
74
+ vals.splice(i, 1, keyframes[vals[i]])
75
+ return vals.join(' ')
76
+ } else {
77
+ return v
78
+ }
79
+ })
80
+ .join(',')
81
+ }
82
+ })
78
83
  }
79
- })
84
+ }
80
85
  }
81
- })
86
+ }
87
+
88
+ module.exports.postcss = true
@@ -1,21 +1,28 @@
1
- const postcss = require('postcss')
2
1
  const selectorParser = require('postcss-selector-parser')
2
+ // trans-special
3
3
 
4
- module.exports = postcss.plugin('trans-special', ({ id }) => root => {
5
- root.each(function rewriteSelector (node) {
6
- if (!node.selector) return
7
- node.selector = selectorParser(selectors => {
8
- selectors.each(selector => {
9
- selector.each(n => {
10
- if (/^:host$/.test(n.value)) {
11
- const compoundSelectors = n.nodes
12
- n.replaceWith(selectorParser.className({
13
- value: 'host-' + id
14
- }))
15
- selector.insertAfter(n, compoundSelectors)
16
- }
17
- })
4
+ module.exports = ({ id }) => {
5
+ return {
6
+ postcssPlugin: 'trans-special',
7
+ Once: (root) => {
8
+ root.each(function rewriteSelector (node) {
9
+ if (!node.selector) return
10
+ node.selector = selectorParser(selectors => {
11
+ selectors.each(selector => {
12
+ selector.each(n => {
13
+ if (/^:host$/.test(n.value)) {
14
+ const compoundSelectors = n.nodes
15
+ n.replaceWith(selectorParser.className({
16
+ value: 'host-' + id
17
+ }))
18
+ selector.insertAfter(n, compoundSelectors)
19
+ }
20
+ })
21
+ })
22
+ }).processSync(node.selector)
18
23
  })
19
- }).process(node.selector).result
20
- })
21
- })
24
+ }
25
+ }
26
+ }
27
+
28
+ module.exports.postcss = true
@@ -1,9 +1,15 @@
1
- const postcss = require('postcss')
2
1
 
3
- module.exports = postcss.plugin('trim', opts => css => {
4
- css.walk(({ type, raws }) => {
5
- if (type === 'rule' || type === 'atrule') {
6
- raws.before = raws.after = '\n'
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
+ })
7
11
  }
8
- })
9
- })
12
+ }
13
+ }
14
+
15
+ module.exports.postcss = true
@@ -1,22 +1,29 @@
1
- const postcss = require('postcss')
2
1
  const rpxRegExp = /\b(\d+(\.\d+)?)rpx\b/
3
2
  const rpxRegExpG = /\b(\d+(\.\d+)?)rpx\b/g
4
3
 
5
- module.exports = postcss.plugin('vw', (options = {}) => root => {
6
- const rpx2vwRatio = +(100 / 750).toFixed(8)
4
+ module.exports = (options = {}) => {
5
+ return {
6
+ postcssPlugin: 'vw',
7
+ Once: (root) => {
8
+ const rpx2vwRatio = +(100 / 750).toFixed(8)
7
9
 
8
- function transVw (declaration) {
9
- if (rpxRegExp.test(declaration.value)) {
10
- declaration.value = declaration.value.replace(rpxRegExpG, function (match, $1) {
10
+ const transRpxFn = options.transRpxFn && typeof options.transRpxFn === 'function' ? options.transRpxFn : function (match, $1) {
11
11
  if ($1 === '0') return $1
12
12
  return `${$1 * rpx2vwRatio}vw`
13
+ }
14
+ function transVw (declaration) {
15
+ if (rpxRegExp.test(declaration.value)) {
16
+ declaration.value = declaration.value.replace(rpxRegExpG, transRpxFn)
17
+ }
18
+ }
19
+
20
+ root.walkRules(rule => {
21
+ rule.walkDecls(declaration => {
22
+ transVw(declaration)
23
+ })
13
24
  })
14
25
  }
15
26
  }
27
+ }
16
28
 
17
- root.walkRules(rule => {
18
- rule.walkDecls(declaration => {
19
- transVw(declaration)
20
- })
21
- })
22
- })
29
+ module.exports.postcss = true
@@ -1,7 +1,7 @@
1
- const babylon = require('babylon')
2
- const traverse = require('babel-traverse').default
3
- const t = require('babel-types')
4
- const generate = require('babel-generator').default
1
+ const babylon = require('@babel/parser')
2
+ const traverse = require('@babel/traverse').default
3
+ const t = require('@babel/types')
4
+ const generate = require('@babel/generator').default
5
5
 
6
6
  let names = 'Infinity,undefined,NaN,isFinite,isNaN,' +
7
7
  'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +