react18基础教程系列--安装环境及packagejson文件分析

一个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: 性能检测工具
json 复制代码
{
  "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"
    ]
  }
}

环境变量配置

如果需要自定义环境变量,必须加上前缀 REACT_APP_,否则不会生效。

json 复制代码
"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"
  },

可以看到REACT_APP_MODE有值,API_URL没有写入到本地环境变量中。

加上这个REACT_APP_就可以在项目中获取到了

代理服务的实现

  • 在src目录下面添加setupProxy.js文件,注意版本的问题,这里有坑,会导致页面不显示,低版本的处理方法可以去搜下别的教程,高版本 `"http-proxy-middleware": "^3.0.2"使用方法如下:
json 复制代码
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": "" }, //重写请求路径,下面有示例解释
    })
  );
};
js 复制代码
function App() {
  useEffect(() => {
    console.log(process.env);
    // 请求接口
    fetch("/api/v1/users")
      .then((res) => res.json())
      .then((res) => console.log(res));
  }, []);
  return (
    <div className="App">
      <h1>Hello World</h1>
      <p>当前的环境是:{process.env.NODE_ENV}</p>
      <p>当前的环境是:{process.env.REACT_APP_API_URL}</p>
    </div>
  );
}


这样就完成了,开发环境下的后端服务接口的联调配置。

参考文献

http-proxy-middleware最新使用教程

相关推荐
彭世瑜6 分钟前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4046 分钟前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish7 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five8 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序8 分钟前
vue3 封装request请求
java·前端·typescript·vue
临枫5419 分钟前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript
前端每日三省10 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
小刺猬_98511 分钟前
(超详细)数组方法 ——— splice( )
前端·javascript·typescript
渊兮兮12 分钟前
Vue3 + TypeScript +动画,实现动态登陆页面
前端·javascript·css·typescript·动画
鑫宝Code12 分钟前
【TS】TypeScript中的接口(Interface):对象类型的强大工具
前端·javascript·typescript