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

相关推荐
Aliex_git几秒前
Vue2 - Watch 侦听器源码理解
前端·javascript·vue.js·笔记·学习
你疯了抱抱我1 分钟前
【QQ】空间说说批量删除脚本(不用任何额外插件,打开F12控制台即可使用)
开发语言·前端·javascript
进击的野人7 分钟前
Vuex 详解:现代 Vue.js 应用的状态管理方案
前端·vue.js·前端框架
未知原色7 分钟前
前端工程师转型AI的优势与挑战
前端·人工智能
鹏北海7 分钟前
Single-SPA 学习总结
前端·javascript·微服务
想学后端的前端工程师12 分钟前
【CSS高级技巧与动画实战指南:打造炫酷的用户体验】
前端·css·ux
_码力全开_26 分钟前
第一章 html5 第一节 HTML5入门基础
前端·javascript·css·html·css3·html5
KLW7531 分钟前
vue 绑定动态样式
前端·javascript·vue.js
幼稚鬼_Blog41 分钟前
可拖拽悬浮按钮组件支持vue3/vue2
前端·javascript·html
前端小怪兽zmy1 小时前
Vue3实现纯前端语音输入成文字显示
前端·javascript·elementui