提交
This commit is contained in:
1 parent
80138c6388
commit
693e8a678e
682 files changed
+211375
-5306
No files matched your search
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* 从 vant/lib/index.css 生成 WXSS 兼容样式:去掉含 * / *= 的选择器规则。
|
||||
* 升级 vant 后执行:node scripts/gen-vant-mp-safe-css.js
|
||||
*/
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const root = path.join(__dirname, '..')
|
||||
const src = path.join(root, 'node_modules', 'vant', 'lib', 'index.css')
|
||||
const dest = path.join(root, 'styles', 'vant-mp-safe.css')
|
||||
|
||||
if (!fs.existsSync(src)) {
|
||||
console.error('[gen-vant-mp-safe-css] missing', src)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const text = fs.readFileSync(src, 'utf8')
|
||||
const out = []
|
||||
let i = 0
|
||||
const n = text.length
|
||||
let removed = 0
|
||||
let kept = 0
|
||||
|
||||
function isBadSelector(sel) {
|
||||
// universal selector `*` (not `*=` attr or content "*")
|
||||
if (/(^|[,)\s>+~])\*(?!=)/.test(sel)) return true
|
||||
if (sel.includes('*=')) return true
|
||||
return false
|
||||
}
|
||||
|
||||
while (i < n) {
|
||||
if (text.startsWith('/*', i)) {
|
||||
const j = text.indexOf('*/', i + 2)
|
||||
if (j < 0) break
|
||||
out.push(text.slice(i, j + 2))
|
||||
i = j + 2
|
||||
continue
|
||||
}
|
||||
if (/\s/.test(text[i])) {
|
||||
out.push(text[i])
|
||||
i += 1
|
||||
continue
|
||||
}
|
||||
if (text[i] === '@') {
|
||||
const brace = text.indexOf('{', i)
|
||||
const semi = text.indexOf(';', i)
|
||||
if (semi !== -1 && (brace === -1 || semi < brace)) {
|
||||
out.push(text.slice(i, semi + 1))
|
||||
i = semi + 1
|
||||
continue
|
||||
}
|
||||
if (brace < 0) {
|
||||
out.push(text.slice(i))
|
||||
break
|
||||
}
|
||||
let depth = 0
|
||||
let j = brace
|
||||
while (j < n) {
|
||||
if (text[j] === '{') depth += 1
|
||||
else if (text[j] === '}') {
|
||||
depth -= 1
|
||||
if (depth === 0) {
|
||||
j += 1
|
||||
break
|
||||
}
|
||||
}
|
||||
j += 1
|
||||
}
|
||||
const block = text.slice(i, j)
|
||||
if (isBadSelector(block)) removed += 1
|
||||
else {
|
||||
out.push(block)
|
||||
kept += 1
|
||||
}
|
||||
i = j
|
||||
continue
|
||||
}
|
||||
|
||||
const brace = text.indexOf('{', i)
|
||||
if (brace < 0) {
|
||||
out.push(text.slice(i))
|
||||
break
|
||||
}
|
||||
let depth = 0
|
||||
let j = brace
|
||||
while (j < n) {
|
||||
if (text[j] === '{') depth += 1
|
||||
else if (text[j] === '}') {
|
||||
depth -= 1
|
||||
if (depth === 0) {
|
||||
j += 1
|
||||
break
|
||||
}
|
||||
}
|
||||
j += 1
|
||||
}
|
||||
const sel = text.slice(i, brace)
|
||||
const rule = text.slice(i, j)
|
||||
if (isBadSelector(sel)) removed += 1
|
||||
else {
|
||||
out.push(rule)
|
||||
kept += 1
|
||||
}
|
||||
i = j
|
||||
}
|
||||
|
||||
const header =
|
||||
'/* auto-generated from vant/lib/index.css — WXSS-safe (no * / *= selectors). Do not edit. */\n'
|
||||
fs.writeFileSync(dest, header + out.join(''))
|
||||
console.log('[gen-vant-mp-safe-css] kept=%s removed=%s -> %s', kept, removed, dest)
|
||||
Reference in new issue
Block a user