create-reat-app@2.x 的脚手架支持css,scss语法,要自行安装less,less-loader
npm i less less-loader -D这一步最好在 yarn eject 暴露webpack配置后操作,不然要先git commit 一下
create-react-app@2.x <项目名称> 时,已装好less,less-loader, 以引入.less 文件做测试,yarn start 启动服务,控制台有很大可能会报错,说node_modules 里的某个文件没找到之类的
楼主亲身体会,感觉懵逼,用 create-react-app 创建项目时,感觉经常会掉包,就是有些包没pull到,有的在node_modules里只是个空文件夹,里面没内容,多数发生在 @bable 这个文件目录下,缺少各种 plugin 开头的套件,尝试了 4 次 create-react-app创建项目,才能把demo跑起来,有可能是 create-react-app 时,网络不稳定导致频繁掉包
create-reat-app@2.x <项目> 创建完时,由于要用到 antd 这个UI库来来自定义主题颜色,并且此库是less的样式引入,所以我们要在项目webapck.config.js配置less
-
2.x 中将webpack.config.dev.js 与 webpack.config.prod.js进行了合并,只有一个webpack.config.js
-
yarn eject只能用一次,用完即止,多出一些文件在目录里,我们要在config文件夹下的webapck.config.js里配置 -
新加less匹配项 copy 一份跟
sassRegex,sassModuleRegex一样的声明即可: const lessRegex = /.less/ const lessModuleRegex = /.module.less$/ -
在sass的配置下新增less配置
-
{ test: lessRegex, exclude: lessModuleRegex, use: getStyleLoaders({ importLoaders: 2 }, 'less-loader'), }, { test: lessModuleRegex, use: getStyleLoaders( { importLoaders: 2, modules: true, getLocalIdent: getCSSModuleLocalIdent, }, 'less-loader' ), },
-
关掉服务,重新yarn start 在 App.js中导入less文件一切正常
配置antd组件库 需要自定义 antd 的主题色
-
yarn add babel-plugin-import -
在package.json中或者.babelrc中配置按需导入的组件库规则 -
"babel":"plugins": [ ["import", { "libraryName": "antd", "style": "css" }] ] -
完整是:"babel": { "presets": [ "react-app" ], "plugins": [ ["import", { "libraryName": "antd", "style": true }] ] } -
注意:如果需要修改主题默认配置的话(例如颜色)导入less文件这里应设置为
"style": true这就会引入.less文件,因为.css文件是由.less编译出来的, 如果只是用antd里的样式,没打算自定义就"style": css -
注意: 当你设为true时,你会发编译失败,页面中antd组件也会没有样式了,命令行抛出如下异常:
.bezierEasingMixin() Inline JavaScript is not enable. Is it set in your options? -
你要加上 options: { javascriptEnabled: true
// 解决上文报错}, -
解决上文报错:options: { sourceMap: isEnvProduction && shouldUseSourceMap,// 这段sourceMap以后不一定有每个版本不同javascriptEnabled: true// 解决上文报错}, -
完整是 ----在getStyleLoaders 中加:if (preProcessor) { if (preProcessor === 'less-loader') {// 为less-loader添加配置项,启动javascriptloaders.push({ loader: require.resolve(preProcessor), options: { sourceMap: isEnvProduction && shouldUseSourceMap, javascriptEnabled: true// 解决上文报错}, }); } else { loaders.push({ loader: require.resolve(preProcessor), options: { sourceMap: isEnvProduction && shouldUseSourceMap, }, }); } } -
修改主题颜色 在options加 ::modifyVars: {// 修稿主题颜色'primary-color': '#000000', }, -
完整是:if (preProcessor === "less-loader") { loaders.push({ loader: require.resolve(preProcessor), options: { sourceMap: isEnvProduction && shouldUseSourceMap, modifyVars: {// 修稿主题颜色'primary-color': '#000000', }, javascriptEnabled: true }, }); -
注意!!!!!:如果你在测试App.js文件中有引入import 'antd/dist/antd.css'记得要把他去掉,测试的时候,我忘拿了,浪费了我洗澡的时间,这样就修改了主题色了
结语
前端react QQ群:
788023830----React/Redux - 地下老英雄前端交流QQ群:
249620372----FRONT-END-JS前端(我们的宗旨是,为了加班,为了秃顶……,仰望大佬),希望小伙伴们加群一起学习