【发布时间】:2018-11-07 07:17:56
【问题描述】:
我有以下my-file.css:
.a [data-smth] { ... }
.b .c.d { ... }
.e { ... }
#f { ... }
我想在 Node.js 中执行以下操作(伪代码):
let css = readFile('my-file.css')
let prefixedCss = prefixClasses(css, 'prfx-')
writeFile(prefixedCss, 'my-prefixed-file.css')
以my-prefixed-file.css结束:
.prfx-a [data-smth] { ... }
.prfx-b .prfx-c.prfx-d { ... }
.prfx-e { ... }
#f { ... }
我找到了这些 npm 模块:
https://github.com/vic/prefix-css(多年未更新,有问题)
https://pegjs.org/(需要大量低级 AST 配置)
但我想知道是否有更好/更安全的解决方案已经过测试/成为标准做法?
注意: 以上文件内容只是一个示例。我正在寻找一种方法来实现我完全不知道其内容的文件。所以我正在寻找一个“通用”的解决方案。
非常欢迎任何帮助,并在此先感谢您! :-)
【问题讨论】:
-
看起来一个简单的正则表达式替换就可以解决这个问题,您是否遇到了任何特定的障碍?
-
不确定 CSS 字符串上的简单 RegEx 是否是安全解决方案,因为我正在寻找通用解决方案(请参阅编辑后的 OP)。我担心
replace .XXX with .prfx-XXX之类的东西可能会影响文件中出现的.XXX不一定是类 CSS 选择器,但可能是 [attribute] 值或contentCSS 属性的值或其他。跨度> -
上下文选择器不够用?喜欢
.prfx .a { ... }?您希望像#d .a[href⁼https] > .icon-link { ... }这样的复合选择器会发生什么? -
不,恐怕它必须是文件中每个 CSS 选择器中使用的每个类名的前缀