Why
在更新 React 至 16.6.*后,使用 react-css-modules 的项目会出现以下 Warning
|
|
主要是因为在 react-cssmodules 中,重写了 this.props,详见issues
我们访问 react-css-modules 的项目,发现官方推荐了 babel-plugin-react-css-modules 作为替代品,其有以下优势:
- 将处理过程交给 babel 而不是 runtime, 提升 runtime 性能
- 不用频繁的调用 cssmodules 高阶组件
- 统一处理 options 等
替换过程
官方案例很简单,但是我们替换的过程中还是遇到了挺多的问题。主要包含以下几个步骤:
1. 安装 babel-plugin-react-css-modules
不赘述
2. 升级 babel 7
升级 babel 为@babel@7.1.6
对应的 plugin 也需要进行升级, 官方有介绍相应的替换
|
|
3. 格式化 stylus 文件
我们需要对 stylus 进行统一的格式化处理,防止 babel 对语法校验出错,由于文件较多,我们使用 stylus-supremacy 进行处理,使用 node 写一个批处理文件:
|
|
4. 配置 css-loaders
|
|
5. 配置 babel-plugin-react-css-modules
generateScopedName 需要与 cssloader 处理的结果一致,否则将会失效。
同时,styl 文件需要 sugarss 进行处理,记得安装
|
|
6. 运行
删除之前的 react-css-modules
问题
- 同时处理多个文件时报错
在文件中引用多个文件,会报错
|
|
解决方案: 添加配置: exclude: “.css\$”