我想用来babel-plugin-react-css-modules
创建唯一的类名,所以我做了一个PoC:我弹出create-ract-app,然后babel-plugin-react-css-modules
在package.json中添加插件:
"babel": {
"presets": [
"react-app"
],
"plugins": [
"babel-plugin-react-css-modules"
]
},
当我启动应用程序时,我看到正确设置了HTML中的类,但是在<style>
标记中它是常规.App
名称:
我想念什么吗?我认为设置起来应该很容易,并且犯了一些我看不到的愚蠢错误。预先感谢您的每一个回答。
编辑:App.js代码:
import React from 'react';
import './App.css';
function App() {
return (
<div styleName="App">
Test app
</div>
);
}
export default App;
兰特(Rant):我反对create-react-app
(CRA)的众多原因之一是因为定制方面的灵活性可能不够灵活。如果您希望包含功能,建议您创建自己的webpack配置。为什么?您将更加熟悉Webpack,如何配置它,如何在其限制范围内工作以及如何根据需要添加/更改/调整程序包。
也就是说,CRA预先配置了全局和本地(模块)CSS导入,并且与babel-plugin-react-css-modules
(BPRCM)冲突。CRA希望.css
文件不是module.css
正常的全局导入。同时,BPRCM希望.css
文件是本地导入。不仅冲突,而且localIdentName
s不匹配。默认情况下,CRA会在App.module.css
哪里module.css
指定它是调制导入,如:import { App } from "./App.module.css";
。作为这样它分配localIdentNames如[file/folder]_[local]_[hash]
所提到这里,这里和喷出内config/webpack.config.js
(线432-456 -它利用了react-dev-utils/getCSSModuleLocalIdent
包)。
为了解决这些冲突,您需要建立一个localIdentName
(默认情况下,BPCRM使用以下方法generateScopedName
:[path] ___ [name] __ [local] ___ [hash:base64:5](表中的第4个选项),所以我'将在下面的示例中使用它),然后您需要在其webpack.config.js
下方添加BPRCM,babel-loader
因为CRA不会查找babel配置,然后您必须删除CSS模块导入规则,最后,您需要向其全局CSS规则添加一些选项,以使其成为本地规则并利用localIdentName
。
这是一个工作示例:https : //github.com/mattcarlotta/cra-css-modules
要利用上面的仓库:
~/Desktop
并克隆仓库:git clone [email protected]:mattcarlotta/cra-css-modules.git
cra-css-modules
文件夹并输入yarn install
或npm install
yarn start
或npm start
运行示例我改变了什么:
babel-loader
规则中。classNames
,以styleName
在App.js文件。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句