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'