Create React App如下簡稱爲CRAnode
npx create-react-app my-app
複製代碼
由於默認是用yarn安裝,因此建議後面也用yarn安裝依賴react
在package.json
中增長:webpack
"homepage": "."
複製代碼
eslint-config-airbnb
:yarn add eslint-config-airbnb -D
複製代碼
.eslintrc.json
文件: 其實直接在package.json中把eslintConfig下extends改爲airbnb也能夠,可是考慮到後面可能要自定義一些配置項,以及會增長ts和tsx配置,仍是加文件較好: .eslintrc.json
:{
"extends": [
"react-app",
"airbnb"
],
"rules": {
"react/jsx-filename-extension": 0
}
}
複製代碼
注意:須要安裝VSCode的ESLint插件,纔會在寫代碼時候校驗提示git
.env.development
文件:REACT_APP_API_URL=http://10.234.216.150:7300
複製代碼
.env.production
文件:REACT_APP_API_URL=http://abcefg.com
複製代碼
const baseUrl = process.env.REACT_APP_API_URL;
複製代碼
這樣,開發環境的baseUrl就是「http://10.234.216.150:7300」,生產環境的就是「abcefg.com」。web
注意:環境變量都必須以REACT_APP_爲前綴,不然會被忽略。npm
注意:若是想在開發環境自定義api變量,建議不要直接修改.env.development文件,這個文件是給團隊開發用的,請新增.env.development.local文件進行配置私用,這個文件也會自動被git忽略(CRA設置的),不用提交。其餘一些配置文件還有好多,我以爲暫時用不到的。json
有時候,光開發環境和生產環境配置還不夠,由於還有測試環境。就須要加一個staging配置,這個稍微有些複雜。api
env-cmd
包yarn add env-cmd
複製代碼
.env.staging
文件REACT_APP_API_URL=http://staging.abcdefg.com
複製代碼
{
scripts: {
"build:staging": "env-cmd .env.staging npm run build",
}
}
複製代碼
可是這樣打出來的包也是在build文件夾下面。 若是想打包到另一個文件夾下面,繼續看下面 4. 項目下新建buildStaging.js
文件:bash
const fs = require('fs-extra');
const childProcess = require('child_process');
const buildFolderExist = fs.existsSync('./build');
const buildStagingFolderExist = fs.existsSync('./buildstaging');
// 備份build文件夾
if (buildFolderExist) {
fs.renameSync('./build', './build-tttttemp');
}
// build staging環境
if (buildStagingFolderExist) fs.removeSync('./buildstaging');
childProcess.execSync('env-cmd .env.staging npm run build');
fs.renameSync('./build', './buildstaging');
// 還原build文件夾
if (buildFolderExist) {
fs.renameSync('./build-tttttemp', './build');
}
複製代碼
"build:staging": "node buildStaging.js",
複製代碼
這樣運行yarn run build:staging
時候就會自動打包測試環境到buildstaging
文件夾下 6. 最終scripts樣子:app
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-scripts eject",
"build:staging": "node buildStaging.js",
"build:all": "npm run build:staging && npm run build"
},
複製代碼
其中build:all
是同時打包生產環境和測試環境
通常都是經過alias配置的,可是CRA不支持,爲何去問做者。
{
"compilerOptions": {
"baseUrl": "src",
"jsx": "preserve"
}
}
複製代碼
這裏baseUrl設置,有兩個做用(我本身測試的)。
jsx的設置,是由於不設置的話,import一個jsx文件,沒法連接過去(cmd+左鍵)
不配的話,eslint會報錯找不到相關模塊(雖然能正常使用了)
// 關閉對mi,api,utils的import檢驗,其餘的必定要報錯,防止濫用
'import/no-unresolved': ['error', { ignore: ['mi', 'api', 'utils'] }],
複製代碼
這樣的話,只有引用mi、api、utils這三個模塊,eslint纔不會報錯。
注意:也能夠經過配置setting選項(eslint-plugin-import的配置),讓src下的全部模塊引用都不報錯,但不是我想要的,我不想讓項目人員濫用這個功能。
以前是經過 import { xxx } from '../../../mi'
這樣引用公共組件
如今只須要import { xxx } from 'mi'