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最新使用教程

相关推荐
Csvn2 小时前
TypeScript 类型守卫的 4 个实战级别:从 `filter(Boolean)` 到自定义类型谓词
前端
云浪3 小时前
拆开 WAV,看见声音——JavaScript 二进制数组实战全解析
前端·javascript·ecmascript 6
_瑞3 小时前
深入理解灵动岛
前端·ios·app
想你依然心痛3 小时前
嵌入式日志系统:分级日志、环形缓冲区与远程输出——运行时调试、非侵入
android·前端·javascript
这是个栗子3 小时前
【Vue代码分析】 import.meta.env.DEV:现代前端工程中的环境变量
前端·javascript·vue.js·环境变量
像牛奶却不是牛奶3 小时前
记录几个前端实用小函数
前端·javascript
IDIOT___IDIOT4 小时前
Windows 解锁后 Chrome 弹出白屏的排查与修复
前端·chrome
tuddy7894644 小时前
前端应用的离线暂停更新策略:原理、实现与最佳实践
前端
hunterandroid4 小时前
多线程与线程池:从 Thread 到高效并发
前端
用户69371750013844 小时前
AI Agent 里的 Loop 到底是什么?
android·前端·后端