扩展:React 项目执行 yarn eject 后的 config 目录结构详解
- 什么是 yarn eject?
- React 项目执行 yarn eject 后的 config 目录结构详解
- 📁 config 目录结构
- 各文件作用详解
- env.js
- getHttpsConfig.js
- modules.js
- paths.js
- webpack.config.js
- webpackDevServer.config.js
- jest/ 目录(可选)
- webpack/ 子目录:persistentCache/
- 总结
什么是 yarn eject?
yarn eject
是 Create React App(简称 CRA)提供的一条命令,用于将项目从“封装模式”转为“完全可配置模式”。
执行后,CRA 默认隐藏的构建配置(如 Webpack、Babel、ESLint 等)会被暴露到项目中。
React 项目执行 yarn eject 后的 config 目录结构详解
当我们在使用 create-react-app
创建的项目中执行 yarn eject
命令后,隐藏的 Webpack 配置将被暴露出来。此时会在项目根目录生成一个 config/
目录,其中包含构建、开发、测试所需的配置文件。
本文将结合项目中 config/
目录下的文件结构进行逐一说明:
📁 config 目录结构
config/
├── jest/
├── webpack/
│ └── persistentCache/
├── env.js
├── getHttpsConfig.js
├── modules.js
├── paths.js
├── webpack.config.js
├── webpackDevServer.config.js
各文件作用详解
env.js
- 用途:用于加载并配置环境变量,如
.env
,.env.production
,.env.development
等。 - 说明:通过
process.env.NODE_ENV
判断当前运行环境,并将环境变量注入到webpack
构建流程中。 - 常见用途:
- 设置 API 根路径
- 配置自定义变量如
REACT_APP_*
getHttpsConfig.js
- 用途:获取
HTTPS
相关配置。 - 说明:在本地开发时,如果你希望使用 HTTPS(比如使用自签名证书),这个文件会读取相应配置(如
.env
中的HTTPS=true
)。
modules.js
- 用途:Webpack 打包中用到的模块路径配置。
- 说明:用于配置模块解析规则,比如:
- 支持扩展文件后缀(如
.js
,.jsx
,.ts
,.tsx
) - 支持模块路径别名(alias)
- 支持扩展文件后缀(如
paths.js
- 用途:集中管理项目路径信息。
- 说明:提供构建过程中常用路径(如
src
,public
,build
等),可被其他配置文件引入使用,确保路径一致性。 - 示例路径:
appSrc
:源码路径(默认src/
)appBuild
:构建输出目录(默认build/
)
webpack.config.js
- 用途:Webpack 的主配置文件。
- 内容包含:
- Babel 加载器配置(JSX、ES6+ 转译)
- CSS / SASS / 图片等资源加载规则
- 插件配置(如
HtmlWebpackPlugin
,DefinePlugin
) - 分环境(开发、生产)配置分离
- 📌 此文件是整个构建的核心,若需自定义构建行为(如修改 Loader、Alias、优化策略),修改此处。
webpackDevServer.config.js
- 用途:用于配置
webpack-dev-server
(开发服务器)。 - 说明:
- 配置本地开发端口、热更新(HMR)、代理(proxy)、浏览器自动打开等行为。
- 可以实现跨域代理:例如
/api
请求代理到http://localhost:3001
jest/ 目录(可选)
- 用途:存放与 Jest 测试框架相关的自定义配置(如果有的话)。
- 常见配置:
setupTests.js
:测试前运行的初始化脚本- 覆盖默认 Jest 配置或扩展测试行为
webpack/ 子目录:persistentCache/
- 用途:用于配置 Webpack 持久缓存(Persistent Caching)
- 说明:从 Webpack 5 开始支持持久化缓存,大幅提升二次构建速度。
- 一般不需要手动修改,除非你对缓存策略有特殊需求。
总结
执行 yarn eject
后暴露的配置文件使你可以完全控制 React 项目的构建流程。虽然灵活性大大提升,但需要具备一定的 Webpack、Babel、Jest 等工具的使用基础,适合对默认行为不满足、有高级自定义需求的开发者。
如果你希望保持简单高效的开发体验,建议不要轻易执行 eject
,可以考虑使用 craco
或 react-app-rewired
等工具来定制配置。