postcss强大的插件让我们在编写css的过程中获得了极大的便利,比如,我们可以方便的使用BEM语法来命名我们的组件。
<div class="CompName">
<h3 class="CompName-contain is-active">我是Title</h3>
<div class="CompName-contain">我是内容</div>
</div>
@component CompName {
height: 200px;
width: 200px;
margin: auto;
@descendent contain {
font-size: 16px;
font-weight: normal;
color: #333;
@when active {
color: #ff5d23;
}
}
}
/* 编译后 */
.CompName {
height: 200px;
width: 200px;
margin: auto;
}
.CompName-contain {
font-size: 16px;
font-weight: normal;
color: #333;
}
.CompName-contain.is-active {
color: #ff5d23;
}
这种语法的使用只需我们引入postcss-bem这个插件就可以的。但是在webpack4以上的版本中,却会导致编译报错:rule.moveTo is not a function
xx .moveTo is not a function
这是由于css源字符串解析成的抽象语法树已经废弃了该方法(参考一场由postcss-bem引发的血案)。所以不再能够使用moveto去操作抽象树中的节点。所以使用append方法来代替即可解决该问题。
newComponent.append(rule);
// rule.moveTo(newComponent);
为此,撸了一个npm包,可供后续开发人员调用。包地址:wlq-postcss-bem
由于第一次发布npm包,没有经验,很不规范,欢迎大家指正。github地址:wlq-postcss-bem。
欢迎大家交流使用。