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

news2025/5/13 9:20:34

扩展: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.coloradmin.cn/o/2374547.html

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

相关文章

rust 全栈应用框架dioxus server

接上一篇文章dioxus全栈应用框架的基本使用&#xff0c;支持web、desktop、mobile等平台。 可以先查看上一篇文章rust 全栈应用框架dioxus&#x1f448; 既然是全栈框架&#xff0c;那肯定是得有后端服务的&#xff0c;之前创建的服务没有包含后端服务包&#xff0c;我们修改…

西安交大多校联训NOIP1模拟赛题解

西安交大多校联训NOIP1模拟赛题解 T1 秘境形式化题意思路代码&#xff08;丑陋&#xff09; T2 礼物形式化题意思路代码&#xff08;实现&#xff09; T3 小盒子的数论形式化题意思路代码&#xff08;分讨&#xff09; T4 猫猫贴贴(CF997E)形式化题意思路代码&#xff08;深奥&…

数据结构(三)——栈和队列

一、栈和队列的定义和特点 栈&#xff1a;受约束的线性表&#xff0c;只允许栈顶元素入栈和出栈 对栈来说&#xff0c;表尾端称为栈顶&#xff0c;表头端称为栈底&#xff0c;不含元素的空表称为空栈 先进后出&#xff0c;后进先出 队列&#xff1a;受约束的线性表&#xff0…

若依定制pdf生成实战

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

c++STL-vector的模拟实现

cSTL-vector的模拟实现 vector的模拟实现基本信息构造函数析构函数返回容量&#xff08;capacity&#xff09;返回元素个数&#xff08;size&#xff09;扩容&#xff08;reserve和resize&#xff09;访问&#xff08;[]&#xff09;迭代器&#xff08;**iterator**&#xff09…

在 Elasticsearch 中连接两个索引

作者&#xff1a;来自 Elastic Kofi Bartlett 解释如何使用 terms query 和 enrich processor 来连接 Elasticsearch 中的两个索引。 更多有关连接两个索引的查询&#xff0c;请参阅文章 “Elastic&#xff1a;开发者上手指南” 中的 “丰富数据及 lookup” 章节。 Elasticsea…

使用 Watt toolkit 加速 git clone

一、前言 Watt toolkit 工具是我经常用于加速 GitHub 网页和 Steam 游戏商店访问的工具&#xff0c;最近想加速 git clone&#xff0c;发现可以使用 Watt toolkit 工具的代理实现。 二、查看端口 我这里以 Ubuntu 为例&#xff0c;首先是需要将加速模式设置为 System&#xff1…

应急响应靶机——WhereIS?

用户名及密码&#xff1a;zgsf/zgsf 下载资源还有个解题.exe: 1、攻击者的两个ip地址 2、flag1和flag2 3、后门程序进程名称 4、攻击者的提权方式(输入程序名称即可) 之前的命令&#xff1a; 1、攻击者的两个ip地址 先获得root权限&#xff0c;查看一下历史命令记录&#x…

Docke容器下JAVA系统时间与Linux服务器时间不一致问题解决办法

本篇文章主要讲解&#xff0c;通过docker部署jar包运行环境后出现java系统内时间与服务器、个人电脑真实时间不一致的问题原因及解决办法。 作者&#xff1a;任聪聪 日期&#xff1a;2025年5月12日 问题现象&#xff1a; 说明&#xff1a;与实际时间不符&#xff0c;同时与服务…

【MCP】其他MCP服务((GitHub)

【MCP】其他MCP服务&#xff08;&#xff08;GitHub&#xff09; 1、其他MCP服务&#xff08;GitHub&#xff09; MCP广场&#xff1a;https://www.modelscope.cn/mcp 1、其他MCP服务&#xff08;GitHub&#xff09; 打开MCP广场 找到github服务 访问github生成令牌 先…

内存 -- Linux内核内存分配机制

内存可以怎么用&#xff1f; kmalloc&#xff1a;内核最常用&#xff0c;用于频繁使用的小内存申请 alloc_pages&#xff1a;以页框为单位申请&#xff0c;物理内存连续 vmalloc&#xff1a;虚拟地址连续的内存块&#xff0c;物理地址不连线 dma_alloc_coherent&#xff1a;常…

关于读写锁的一些理解

同一线程的两种情况&#xff1a; 读读&#xff1a; public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock new ReentrantReadWriteLock();Lock readLock lock.readLock();Lock writeLock lock.writeLock();readLock.lock();S…

C++修炼:模板进阶

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

android-ndk开发(10): use of undeclared identifier ‘pthread_getname_np‘

1. 报错描述 使用 pthread 获取线程名字&#xff0c; 用到 pthread_getname_np 函数。 交叉编译到 Android NDK 时链接报错 test_pthread.cpp:19:5: error: use of undeclared identifier pthread_getname_np19 | pthread_getname_np(thread_id, thread_name, sizeof(thr…

UI自动化测试框架:PO 模式+数据驱动

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成…

Java笔记4

第一章 static关键字 2.1 概述 以前我们定义过如下类&#xff1a; public class Student {// 成员变量public String name;public char sex; // 男 女public int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String a) {} }我们已经知道面向…

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

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试八 二百一十一、常见中间件解析漏洞利用方式 二百一十二、MySQL用户密码存储与加密 …

MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构

大家好&#xff0c;我是此林。 目录 1. 前言 2. minimind模型源码解读 1. MiniMind Config部分 1.1. 基础参数 1.2. MOE配置 2. MiniMind Model 部分 2.1. MiniMindForCausalLM: 用于语言建模任务 2.2. 主干模型 MiniMindModel 2.3. MiniMindBlock: 模型的基本构建块…

如何进行前端性能测试?--性能标准

如何进行前端性能测试&#xff1f;–性能标准 前端性能测试指标&#xff1a; 首次加载阶段 场景&#xff1a;用户首次访问网页&#xff0c;在页面还未完全呈现各种内容和功能时的体验。重要指标及原因 首次内容绘制&#xff08;FCP - First Contentful Paint&#xff09;​…

通信网络编程——JAVA

1.计算机网络 IP 定义与作用 &#xff1a;IP 地址是在网络中用于标识设备的数字标签&#xff0c;它允许网络中的设备之间相互定位和通信。每一个设备在特定网络环境下都有一个唯一的 IP 地址&#xff0c;以此来确定其在网络中的位置。 分类 &#xff1a;常见的 IP 地址分为 I…