如果在由
create-react-app
创建的项目中less
样式不生效,通常这是因为create-react-app
默认不支持less
,你需要进行一些配置来启用对less
的支持。发现通过
create-react-app
构建的react
应用不支持less
样式,所以这里提供了三种方法以作大家参考。方法一 推荐在刚构建的时候使用,如果你已经写了很多代码,你会发现需要删除很多文件才能成功!另外两种方法类似,个人推荐第三种方案!
1.方案
方法一:暴露webpack.config.js配置
1.安装less和less-loader
js
npm install less less-loader
或者如果使用yarn
:
js
yarn add less less-loader
2.通过 npm run eject
暴露配置
js
npm run eject
2.找到webpack.config.js
,添加如下内容:
js
//引入 less 文件的配置
const lessRegex = /.less$/;
const lessModuleRegex = /.module.less$/;
3.然后找到 webpack.config.js
文件中的 return --> module.rules.oneOf 部分,添加以下代码:
js
{
test: lessRegex,
exclude: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 4, // 用于决定css文件中读取到@import时被外层数组中哪个处理
sourceMap: isEnvProduction
? shouldUseSourceMap
: isEnvDevelopment,
modules: {
mode: 'icss',
},
},
'less-loader'
),
sideEffects: true, // 允许通过配置,标识代码是否有副作用
},
{
test: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 4,
sourceMap: isEnvProduction
? shouldUseSourceMap
: isEnvDevelopment,
modules: {
mode: 'local',
getLocalIdent: getCSSModuleLocalIdent,
}
},
'less-loader'
),
},
方法二:使用craco
(create-react-app
配置重写器)
-
安装
craco
和less
以及craco-less
插件:jsnpm install @craco/craco craco-less less
或者如果使用
yarn
:jsyarn add @craco/craco craco-less less
-
在项目根目录中创建一个
craco.config.js
文件,添加以下内容:jsconst CracoLessPlugin = require('craco-less'); module.exports = { plugins: [ { plugin: CracoLessPlugin, options: { lessLoaderOptions: { lessOptions: { modifyVars: { '@primary-color': '#1DA57A' }, // 可以在此修改默认的主题变量 javascriptEnabled: true, }, }, }, }, ], };
-
修改
package.json
中的脚本命令,使用craco
替代react-scripts
:js"scripts": { "start": "craco start", "build": "craco build", "test": "craco test", "eject": "react-scripts eject" }
-
现在,你可以在项目中使用
.less
文件,并像使用.css
文件一样导入它们。
方法三:使用customize-cra
和react-app-rewired
-
安装
react-app-rewired
和customize-cra
以及less-loader
:jsnpm install react-app-rewired customize-cra less-loader less
或者如果使用
yarn
:jsyarn add react-app-rewired customize-cra less-loader less
-
在项目根目录中创建一个
config-overrides.js
文件,添加以下内容:jsconst { override, addLessLoader } = require('customize-cra'); module.exports = override( addLessLoader({ lessOptions: { javascriptEnabled: true, }, }) );
-
修改
package.json
中的脚本命令,使用react-app-rewired
替代react-scripts
:js"scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test", "eject": "react-scripts eject" }
-
你现在应该可以在项目中使用
.less
文件了。
注意: 在使用这些工具时,请确保检查它们与create-react-app
的当前版本兼容性,因为随着新版本的发布,可能会有所变化。
2.总结
使用上述任一方法后,您的项目应该能够支持less
。记住,在你的组件中导入.less
文件时,要确保使用正确的路径。如果仍然无法生效,那你可以在下方留言,我们一起探讨探讨!