React默認腳手架新增Less支持
前言
通過React默認腳手架(create-react-app)創建出的項目默認是不支持less作為css預編譯工具的。
如需支持有兩種方式:
1、通過執行命令 yarn eject
將腳手架預先封閉的Webpack等配置工具的源文件暴露出來自行添加;
2、使用customize-cra、react-app-rewired對配置進行擴展。
因為官方之所以封閉部分配置肯定是有它原因的,這里我還是采取第二種方式。
執行步驟:
安裝 customize-cra、react-app-rewired依賴
yarn add customize-cra react-app-rewired --save-dev
安裝less依賴
yarn add less less-loader@5.0.0 --save-dev
注意這里的less-loader版本是5.0.0,不設置版本后續運行會報錯,參考最底下的github的issues
創建config-overrides文件
在項目的根目錄下創建名稱為config-overrides的文件。不需要加js后綴。如下圖:
再將下面代碼復制到文件內
const {
override,
addLessLoader,
} = require('customize-cra');
module.exports = override(
addLessLoader({
javascriptEnabled: true,
ModifyVars: {'@primary-color': '#1DA57A'},
sourceMap:true,
}),
)
更新package.json
還需要將package.json文件內scripts節點的start、build更新為下面的樣子
"start": "react-app-rewired start",
"build": "react-app-rewired build",
使用less
將腳手架內原有的css文件更改為less格式,在js或jsx內引入。
如less樣式代碼如下:
@h1Color: red;
.App {
text-align: center;
}
div {
h1 {
color: red;
}
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
js代碼如下:
import React from 'react';
import logo from './logo.svg';
import style from'./App.less';
function App() {
return (
<div>
<h1>Hello,Word</h1>
</div>)
}
export default App;
運行結果如下: