forked from jdf2e/nutui-react
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgenerate-css-for-rtl-comparison.js
More file actions
83 lines (76 loc) · 2.04 KB
/
generate-css-for-rtl-comparison.js
File metadata and controls
83 lines (76 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
* 通过 dist 目录下的 style/index.js 构建每个组件的 css 文件
* */
const path = require('path')
const fs = require('fs')
const postcss = require('postcss')
const sass = require('sass')
const rtl = require('postcss-rtlcss')
const config = require('../src/config.json')
const components = config.nav.reduce(
(prev, nav) => [...prev, ...nav.packages],
[]
)
console.log(components.length)
const mixin = fs
.readFileSync(path.join(__dirname, '../src/styles/mixins/text-ellipsis.scss'))
.toString()
const variables = fs.readFileSync(
path.join(__dirname, '../src/styles/variables.scss')
)
const pxToScalePxInComponentScss = require('./px-to-scale-px-in-component-scss.cjs')
function postcssRemoveRtl() {
return {
postcssPlugin: 'postcss-remove-rtl',
Once(root, postcss) {
// Transform CSS AST here
root.nodes.forEach((node, index) => {
if (node.type === 'rule') {
if (node.selector.indexOf('[dir=')> -1) {
console.log(node.selector, index)
node.remove()
}
}
})
},
}
}
components.forEach((component) => {
const componentName = component.name.toLowerCase()
if (componentName === 'icon') return
let content = fs
.readFileSync(
path.join(
__dirname,
`../src/packages/${componentName}/${componentName}.scss`
)
)
.toString()
content = pxToScalePxInComponentScss(content)
let to = path.join(
__dirname,
`../src/packages/${componentName}/${componentName}.rtl.css`
)
const matched = content.match(/@import.*?[;][\n\r]?/gi)
if (matched) {
matched.forEach((m) => {
if (m.indexOf('styles') > -1) {
content = content.replace(m, mixin)
} else {
content = content.replace(m, '')
}
})
}
const res = sass.compileString(variables + content)
postcss([
postcssRemoveRtl(),
rtl({
mode: 'override',
rtlPrefix: [`[dir="rtl"]`, `.nut-rtl`],
}),
])
.process(res.css, { to })
.then((result) => {
fs.writeFile(to, result.css, () => {})
})
})