一个React项目中,默认会安装:
react:React框架的核心
react-dom:React 视图渲染的核心「基于React构建WebApp(HTML页面)J—>react-native:构建和渲染App的
react-scripts: 脚手架为了让项目目录看起来干净一些,把webpack打包的规则及相关的插件/LOADER等都隐藏到了node_modules目录下,react-scripts就是脚手架中自己对打包命令的一种封装,基于它打包,会调用node_modules中的webpack等进行处理!!
web-vitals: 性能检测工具
{
"name": "r18app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start", // 开发环境
"build": "react-scripts build", //生产环境
"test": "react-scripts test", // 测试环境
"eject": "react-scripts eject" // 这个可以弹出隐藏的webapck配置文件,但是要小心,过程是不可逆的
},
"eslintConfig": { // eslint语法检测相关配置
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": { // 基于browserlist规范,设置浏览器的兼容情况
"production": [
">0.2%", // 使用率超0.2%的浏览器
"not dead", // 不考虑ie
"not op_mini all" // 不考虑欧朋浏览器
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
环境变量配置
如果需要自定义环境变量,必须加上前缀 REACTAPP,否则不会生效。
"scripts": {
"start": "cross-env PORT=8888 REACT_APP_MODE=DEV API_URL=http://www.baidu.com react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
1
2
3
4
5
6
可以看到REACT_APP_MODE有值,API_URL没有写入到本地环境变量中。
加上这个REACTAPP就可以在项目中获取到了
代理服务的实现
在src目录下面添加setupProxy.js文件,注意版本的问题,这里有坑,会导致页面不显示,低版本的处理方法可以去搜下别的教程,高版本 `“http-proxy-middleware”: "^3.0.2"使用方法如下:
const { createProxyMiddleware } = require("http-proxy-middleware"); //引入http-proxy-middleware,react脚手架已经安装
module.exports = function (app) {
app.use(
"/api",
createProxyMiddleware({
//遇见/api1前缀的请求,就会触发该代理配置
target: "http://localhost:3001", //请求转发给谁
changeOrigin: true, //控制服务器收到的请求头中Host的值
pathRewrite: { "^/api": "" }, //重写请求路径,下面有示例解释
})
);
};
1
2
3
4
5
6
7
8
9
10
11
12
function App() {
useEffect(() => {
console.log(process.env);
// 请求接口
fetch("/api/v1/users")
.then((res) => res.json())
.then((res) => console.log(res));
}, []);
return (
Hello World
当前的环境是:{process.env.NODE_ENV}
当前的环境是:{process.env.REACT_APP_API_URL}
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16