扩展: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.mzph.cn/web/79597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java实战]Spring Boot 整合 Redis(十八)

[Java实战]Spring Boot 整合 Redis&#xff08;十八&#xff09; 在现代的分布式应用开发中&#xff0c;Redis 作为一种高性能的键值存储数据库&#xff0c;被广泛用于缓存、消息队列、排行榜等多种场景。Spring Boot 提供了强大的支持&#xff0c;使得整合 Redis 变得非常简单…

【氮化镓】GaN在不同电子能量损失的SHI辐射下的损伤

该文的主要发现和结论如下: GaN的再结晶特性 :GaN在离子撞击区域具有较高的再结晶倾向,这导致其形成永久损伤的阈值较高。在所有研究的电子能量损失 regime 下,GaN都表现出这种倾向,但在电子能量损失增加时,其效率会降低,尤其是在材料发生解离并形成N₂气泡时。 能量损失…

R语言实战第5章(1)

第一部分&#xff1a;数学、统计和字符处理函数 数学和统计函数&#xff1a;R提供了丰富的数学和统计函数&#xff0c;用于执行各种计算和分析。这些函数可以帮助用户快速完成复杂的数学运算、统计分析等任务&#xff0c;例如计算均值、方差、相关系数、进行假设检验等。字符处…

k8s术语之Horizontal Pod Autoscaling

应用的资源使用率通常都有高峰和低谷的时候&#xff0c;如何削峰填谷&#xff0c;提高整体的整体资源利用率&#xff0c;让service中的Pod个数自动调整呢&#xff1f;Horizontal Pod Autoscaling:使pod水平自动缩放。这个Object也是最能体现kubernetes之于传统运维价值的地方&a…

Linux复习笔记(三) 网络服务配置(web)

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 二、网络服务配置 2.3 web服务配置 2.3.1通信基础&#xff1a;HTTP协议与C/S架构&#xff08;了解&#xff09; ​​HTTP协议的核心作用​​ Web服务基于HTTP/HTTPS协议实现客户端&#xff…

9.1.领域驱动设计

目录 一、领域驱动设计核心哲学 战略设计与战术设计的分野 • 战略设计&#xff1a;限界上下文&#xff08;Bounded Context&#xff09;与上下文映射&#xff08;Context Mapping&#xff09; • 战术设计&#xff1a;实体、值对象、聚合根、领域服务的构建原则 统一语言&am…

CSS Layer 详解

CSS Layer 详解 前言 最近在整理CSS知识体系时&#xff0c;发现Layer这个特性特别有意思。它就像是给样式规则提供了一个专属的「VIP通道」&#xff0c;让我们能更优雅地解决样式冲突问题。今天我就用最通俗的语言&#xff0c;带大家全面了解这个CSS新特性。 什么是CSS Laye…

【Dv3Admin】工具视图配置文件解析

在开发后台管理系统时,处理复杂的 CRUD 操作是常见的需求。Django Rest Framework(DRF)通过 ModelViewSet 提供了基础的增删改查功能,但在实际应用中,往往需要扩展更多的功能,如批量操作、权限控制、查询优化等。dvadmin/utils/viewset.py 模块通过继承并扩展 ModelViewS…

‌云原生CAE软件

‌云原生CAE软件‌是一种在设计和实现时就充分考虑了云环境特点的软件&#xff0c;能够充分利用云资源&#xff0c;实现高效、可扩展和灵活的仿真分析。 定义和特点 云原生CAE软件是一种在云端构建和运行的CAE&#xff08;Computer Aided Engineering&#xff0c;计算机辅助工…

若依定制pdf生成实战

一、介绍 使用 Java Apache POI 将文字渲染到 Word 模板是一种常见的文档自动化技术&#xff0c;广泛应用于批量生成或定制 Word 文档的场景。使用aspose可以将word转成pdf从而达到定制化pdf的目的。 参考文档&#xff1a;java实现Word转Pdf&#xff08;Windows、Linux通用&a…

Redis再次开源!reids8.0.0一键安装脚本分享

准备工作 1. 下载 Redis 8 安装包 # Redis 8.0.0 示例&#xff08;请替换为实际版本&#xff09; http://download.redis.io/releases/redis-8.0.0.tar.gz一、脚本内容&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*-import os import time import shutil import s…

stm32之BKP备份寄存器和RTC时钟

目录 1.时间戳1.1 Unix时间戳1.2 UTC/GMT1.3 时间戳转换**1.** time_t time(time_t*)**2.** struct tm* gmtime(const time_t*)**3.** struct tm* localtime(const time_t*)**4.** time_t mktime(struct tm*)**5.** char* ctime(const time_t*)**6.** char* asctime(const stru…

Android学习总结之算法篇八(二叉树和数组)

路径总和 import java.util.ArrayList; import java.util.List;// 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;// 构造函数&#xff0c;用于初始化节点值TreeNode(int x) {val x;} }public class PathSumProblems {// 路径总和 I&#xff1a;判…

Scala和Spark的介绍

Scala 1. Slaca的发展过程 由洛桑联邦理工学院的马丁 奥德斯在 2001 年基于 Funnel 的工作开始设计&#xff0c;设计初衷是想集成面向对象编程和函数式编程的各种特性。 Scala 是一种纯粹的面向对象的语言&#xff0c;每个值都是对象。 Scala 也是一种函数式语言&#xff0…

配置Hadoop集群环境-使用脚本命令实现集群文件同步

在 Hadoop 集群环境中&#xff0c;确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案&#xff0c;支持批量同步文件到所有节点&#xff1a; 1. 前提条件 所有节点已配置 SSH 免密登录主节点&#xff08;NameNode&#xff09;能通过主机…

Redis能保证数据不丢失吗之RDB

有了AOF为什么还需要RDB? 上一篇我们介绍了Redis AOF持久化策略。Redis能保证数据不丢失吗之AOF AOF虽然能实现持久化,但由于AOF恢复数据的时候是一条一条命令重新执行的,但数据量大的时候,Redis数据恢复的时间就会很久,这会导致Redis在重启的时候,有一大段时间的不可用…

AI浪潮下的艺术突围战:对话《名人百科数据库》执行主编刘鑫炜

当AI生成的画作在国际赛事中摘冠&#xff0c;当算法推荐主导艺术传播路径&#xff0c;技术革命正以前所未有的速度重塑艺术生态。我们独家专访深耕艺术推广领域的刘鑫炜主编&#xff0c;探讨当代艺术家在智能时代的生存法则。 图为《名人百科数据库》执行主编刘鑫炜 技术重构创…

Python 实现失败重试功能的几种方法

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 方法 1:手动 `while` 循环 + 异常捕获方法 2:使用 `tenacity` 库(推荐)方法 3:使用 `retrying` 库(旧版,已停止维护)方法 4:`requests` 自带重试(适用于 HTTP 请求)方法 5:自定义装饰器(灵活控制)方法…

2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型&#xff0c;721原理&#xff0c;721利用要注意什么&am…

Unity动画系统使用整理 --- Playable

​​Playable API​​ 是一个强大的工具&#xff0c;用于更灵活地控制动画、音频、脚本等时间轴内容的播放和混合。它提供了比传统 Animator 更底层、更可控的方式管理时间轴行为&#xff0c;尤其适合复杂动画逻辑或动态内容组合的场景。 优点&#xff1a; 1.Playables API 支…