当前位置: 首页 > java >正文

扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析

扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析

  • 什么是 yarn eject?
  • React 项目执行 yarn eject 后的 package.json 变化详解
    • 1. 脚本部分 Scripts 被替换
    • 2. 新增构建依赖 dependencies(部分)
    • 3. 新增 Babel 配置
    • 4. 新增 Jest 测试配置
  • package.json 参数解析

什么是 yarn eject?

yarn eject 是 Create React App(简称 CRA)提供的一条命令,用于将项目从“封装模式”转为“完全可配置模式”。
执行后,CRA 默认隐藏的构建配置(如 Webpack、Babel、ESLint 等)会被暴露到项目中。

React 项目执行 yarn eject 后的 package.json 变化详解

执行 yarn eject 后,package.json 发生了 显著变化,主要体现在以下几个方面:

1. 脚本部分 Scripts 被替换

原来:

"scripts": {"start": "react-scripts start","build": "react-scripts build","test": "react-scripts test","eject": "react-scripts eject"
}

变为:

"scripts": {"start": "node scripts/start.js","build": "node scripts/build.js","test": "node scripts/test.js"
}

说明:

  • 原本使用 react-scripts 封装的命令,变成指向项目本地 scripts 目录的脚本文件,方便自定义。
  • eject 脚本被移除(只能执行一次)。

2. 新增构建依赖 dependencies(部分)

分类示例包名用途简述
🛠 构建工具webpack, webpack-dev-server代码打包与本地开发服务器
🎨 样式处理css-loader, style-loader, postcss-loader, sass-loader加载与优化 CSS/SASS
🔌 插件支持html-webpack-plugin, mini-css-extract-plugin自动生成 HTML,抽离样式文件
🧹 代码检查eslint, eslint-webpack-plugin代码规范校验
🔬 测试工具jest, babel-jest, jest-watch-typeahead前端测试框架
🧩 Babel 相关@babel/core, babel-loader, babel-preset-react-appJavaScript 转译工具
🌐 浏览器兼容browserslist, postcss-preset-env, postcss-normalize保证旧浏览器兼容性
🔁 热更新支持react-refresh, @pmmmwh/react-refresh-webpack-plugin实现组件级热更新
🧰 辅助工具dotenv, fs-extra, prompts环境变量、文件管理与命令行交互

3. 新增 Babel 配置

"babel": {"presets": ["react-app"]
}

说明:

  • Babel 是一个将新语法“转换”为旧浏览器支持的工具。
  • CRA 默认配置通过 "react-app" preset 进行转译,现在你可以手动修改它。

4. 新增 Jest 测试配置

"jest": {"roots": ["<rootDir>/src"],"setupFiles": ["react-app-polyfill/jsdom"],"testMatch": ["<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],...
}

说明:

  • Jest 是用于编写自动化测试的框架。
  • CRA 原本封装了它,现在变得可手动管理。
  • 包括匹配哪些测试文件、如何转译、如何映射模块名、哪些插件参与等。

package.json 参数解析

{"dependencies": {// Babel 是 JavaScript 的编译器,这里是其核心包,用于将高级语法转换为浏览器能识别的代码"@babel/core": "^7.16.0",// 热更新插件,配合 React Fast Refresh 实现页面不刷新快速预览改动"@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",// 用于将 SVG 文件作为 React 组件导入的 Webpack 插件"@svgr/webpack": "^5.5.0",// Babel-Jest 是用于将代码转译后再交给 Jest 测试的工具"babel-jest": "^27.4.2",// Babel 加载器,Webpack 会用它来处理代码转译"babel-loader": "^8.2.3",// 支持将图片等资源命名导入,便于统一管理资源路径"babel-plugin-named-asset-import": "^0.3.8",// React 官方推荐的 Babel 配置集合,用于兼容性、性能和插件预设"babel-preset-react-app": "^10.0.1",// 一个用于处理 JSON 的库,CRA 内部构建配置用到"bfj": "^7.0.2",// 配置浏览器兼容性用的库,与 "browserslist" 字段配合使用"browserslist": "^4.18.1",// 将类名或路径转为小驼峰格式,如 `hello-world` → `helloWorld`"camelcase": "^6.2.1",// Webpack 插件,检测路径大小写是否一致(Windows/macOS 下不敏感,Linux 下敏感)"case-sensitive-paths-webpack-plugin": "^2.4.0",// 用于加载 `.css` 文件,并处理 @import 等语法"css-loader": "^6.5.1",// CSS 最小化压缩工具,提高生产环境性能"css-minimizer-webpack-plugin": "^3.2.0",// 读取 `.env` 文件中的变量,常用于环境配置"dotenv": "^10.0.0",// 扩展 dotenv 功能,支持嵌套变量(例如 A=${B})"dotenv-expand": "^5.1.0",// ESlint 静态语法检查器,辅助开发时发现代码问题"eslint": "^8.3.0",// React 脚手架使用的 ESlint 规则集合"eslint-config-react-app": "^7.0.1",// Webpack 插件,集成 ESlint 代码检查到构建流程中"eslint-webpack-plugin": "^3.1.1",// 文件加载器,用于加载图像、字体等资源"file-loader": "^6.2.0",// 提供增强的文件系统操作,例如复制文件等"fs-extra": "^10.0.0",// 自动生成 HTML 页面并注入构建后的 JS 脚本"html-webpack-plugin": "^5.5.0",// 用于模拟样式模块,通常用于测试时处理 CSS 模块导入"identity-obj-proxy": "^3.0.0",// JavaScript 测试框架(Facebook 开发),用于单元测试"jest": "^27.4.3",// Jest 用来解析模块路径的工具"jest-resolve": "^27.4.2",// Jest 插件,测试时支持模糊文件名/函数名搜索"jest-watch-typeahead": "^1.0.0",// 分离 CSS 文件,生成独立的 .css 文件"mini-css-extract-plugin": "^2.4.5",// 用于处理 CSS,如加前缀等优化"postcss": "^8.4.4",// 修复 Flexbox 在部分浏览器中的兼容性问题"postcss-flexbugs-fixes": "^5.0.2",// 将 CSS 交给 PostCSS 处理的 Webpack 加载器"postcss-loader": "^6.2.1",// 标准化浏览器默认样式(normalize.css),保持一致性"postcss-normalize": "^10.0.1",// PostCSS 插件集合,包括现代 CSS 特性转换"postcss-preset-env": "^7.0.1",// 命令行交互库,用于生成配置文件(如 eject 时的交互)"prompts": "^2.4.2",// 浏览器端刷新库,支持热更新(Fast Refresh)"react-refresh": "^0.11.0",// Node 模块路径解析工具,用于找出模块真正所在路径"resolve": "^1.20.0",// 解决 source map 问题(调试时映射原始文件)"resolve-url-loader": "^4.0.0",// SCSS 编译工具,用于处理 `.scss` 文件"sass-loader": "^12.3.0",// 语义化版本处理工具,用于判断包版本是否兼容"semver": "^7.3.5",// Webpack 加载 source map 的加载器,用于调试支持"source-map-loader": "^3.0.0",// 动态将 CSS 注入页面 `<style>` 标签中"style-loader": "^3.3.1",// Tailwind CSS 工具类 CSS 框架(新增时可能需要配置 PostCSS)"tailwindcss": "^3.0.2",// JS 最小化压缩工具,压缩代码用于生产环境"terser-webpack-plugin": "^5.2.5",// Web Vitals 指标收集工具,用于衡量页面体验(如 LCP、FID)"web-vitals": "^2.1.4",// Webpack 是打包工具,React 项目的核心构建工具"webpack": "^5.64.4",// 开发服务器,支持热重载、自动刷新等功能"webpack-dev-server": "^4.6.0",// 生成构建产物清单文件(manifest.json),用于资源管理"webpack-manifest-plugin": "^4.0.2",// Workbox 是 Google 推出的 PWA 工具包,支持离线缓存"workbox-webpack-plugin": "^6.4.1"},"scripts": {// 启动开发服务器,默认地址是 http://localhost:3000"start": "node scripts/start.js",// 构建生产环境代码,会输出到 build/ 目录"build": "node scripts/build.js",// 启动测试框架 Jest,运行项目中所有测试文件"test": "node scripts/test.js"},"jest": {// Jest 配置项,用于指定测试目录、文件匹配规则、使用的转译器等// roots:测试文件所在根目录// setupFiles:在测试前执行的初始化脚本// transform:指定使用 Babel 或 CSS 等转换器处理对应文件类型// moduleNameMapper:模块映射,用于 mock 样式文件等// watchPlugins:支持模糊搜索测试用例的插件// resetMocks:自动重置 mock 数据,确保测试之间不干扰},"babel": {// Babel 配置,使用 react-app 预设,包括 ES6+ 和 JSX 支持}
}
http://www.xdnf.cn/news/5597.html

相关文章:

  • 25、Tailwind:魔法速记术——React 19 样式新思路
  • LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)
  • STC15W408AS计数器
  • 【C++11】异常
  • 配置集群-日志聚集操作
  • 三大告警方案解析:从日志监控到流处理的演进之路
  • 长度最小的子数组(leetcode)
  • C++ 与 Go、Rust、C#:基于实践场景的语言特性对比
  • 风车OVF镜像:解放AI开发限制的Ubuntu精简系统
  • 【vue】全局组件及组件模块抽离
  • Maven 项目中将本地依赖库打包到最终的 JAR 中
  • 如何使用主机名在 CMD 中查找 IP 地址?
  • leetcode 18. 四数之和
  • 力扣 旋转图像
  • 横向移动(上)
  • zorin系统详解
  • 牛客周赛 Round 92(再现京津冀蓝桥杯???)
  • C++23 中的 views::stride:让范围操作更灵活
  • 「华为」人形机器人赛道投资首秀!
  • STM32核心机制解析:重映射、时间片与系统定时器实战——从理论到呼吸灯开发
  • fiddler 配置ios手机代理调试
  • 保持Word中插入图片的清晰度
  • ✅ TensorRT Python 安装精简流程(适用于 Ubuntu 20.04+)
  • CVPR2025 | Prompt-CAM: 让视觉 Transformer 可解释以进行细粒度分析
  • 如何应对网站被爬虫和采集?综合防护策略与实用方案
  • 5.12第四次作业
  • spring常用注解
  • 从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?
  • 【C++贪心】P11044 [蓝桥杯 2024 省 Java B] 食堂|普及
  • 华为FAT AP配置 真机