擴展: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.pswp.cn/web/79597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79597.shtml
英文地址,請注明出處:http://en.pswp.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 支…