12k
All articles

React 脚本是什么?开发者指南

React scripts 驱动每个 Create React App 项目,介绍各命令的作用、Webpack 与 Babel 的角色,以及何时 eject 或切换工具。

OpenReplay Team
OpenReplay Team
React 脚本是什么?开发者指南

如果你曾经使用 Create React App (CRA) 创建过 React 应用,那么你就使用过 react-scripts。但这些脚本在幕后到底做了什么?在本指南中,我们将详细解析 react-scripts 是什么,每个脚本的功能,以及何时你可能需要自定义或替换它。

要点

  • react-scripts 是驱动 Create React App 项目的引擎
  • 它处理所有构建、开发和测试配置,让你不必亲自处理
  • 如果你需要更多控制权,可以选择弹出(eject)、覆盖或替换它

react-scripts 是什么?

react-scripts 是随 Create React App (CRA) 一起提供的 NPM 包。它包含运行、构建、测试和检查 React 应用所需的配置和脚本。与其自己编写和维护 Webpack、Babel 或 ESLint 配置文件,CRA 依靠 react-scripts 在底层处理这些复杂性。

当你使用 CRA 创建新的 React 应用时:

npx create-react-app my-app

CRA 会安装 react-scripts 并在你的 package.json 中设置默认脚本:

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

这些命令做什么?

npm start

  • 使用 Webpack Dev Server 运行开发服务器
  • 启用热模块替换 (HMR)
  • 使用 Babel 和环境变量(来自 .env
  • 在默认浏览器中打开你的应用

npm run build

  • 为生产环境编译你的应用
  • 压缩 JavaScript 和 CSS
  • build/ 目录中生成静态文件
  • 优化性能(树摇(tree-shaking)、压缩)

npm test

  • 使用 Jest 运行测试
  • 默认监视文件变化
  • 支持覆盖率报告和模拟测试

npm run eject

  • 将所有配置和依赖复制到你的项目中
  • 提供对 Webpack、Babel、ESLint 等的完全控制
  • 不可逆 — 没有”撤销”选项

react-scripts 在 CRA 中的位置?

Create React App 搭建项目结构。但是 react-scripts 负责运行应用、构建包,并处理所有繁重的工作。

没有 react-scripts 的 CRA 将无法工作,除非你手动替换每个底层配置 — 这正是你执行 eject 时发生的事情。

何时覆盖或替换 react-scripts

有时,这种抽象会有限制。你可能需要:

  • 自定义 Webpack 加载器或别名
  • 使用不同的 Babel 插件
  • 更改 ESLint 行为

你有三个选择:

1. 弹出(Eject)

npm run eject
  • 完全控制,但复杂且不可逆

2. 不弹出而覆盖

  • 使用如下库:
    • craco (Create React App Configuration Override)
    • react-app-rewired
  • 这些工具包装了 react-scripts 并允许你注入自定义配置

3. 完全替换

  • 如果 CRA 不再满足你的需求,考虑:
    • Vite
    • Next.js
    • Parcel

常见错误及修复方法

'react-scripts' is not recognized as a command

  • 通常由缺少 node_modules 导致
  • 修复:
rm -rf node_modules
rm package-lock.json
npm install

包更新后构建失败

  • 检查你的 react-scripts 版本是否与 React 版本匹配
  • 避免在不查看更新日志的情况下手动升级 react-scripts

Create React App 和 react-scripts 是否仍然相关?

是的 — 对于初学者、学习项目和快速原型,CRA + react-scripts 提供了一种零配置的方式来构建 React 应用。但对于更大的应用,现代替代品如 Vite 和 Next.js 更快、更灵活,也更面向未来。

结论

react-scripts 是每个基于 CRA 的 React 应用的动力源。它处理打包、测试、代码检查等,而不暴露复杂的工具。如果你刚刚开始,这是一个专注于学习 React 本身的好方法。随着应用的增长,你可以选择覆盖或超越它。

常见问题

react-scripts 实际上做什么?

它为 CRA 应用处理所有幕后工具,如 Webpack、Babel、ESLint 和 Jest。

我可以移除 react-scripts 吗?

只有在弹出或替换后才能移除。如果没有替代就移除,你的 CRA 应用将无法运行。

在2025年使用 CRA 和 react-scripts 安全吗?

对于小型应用和学习来说是安全的。对于生产应用,现代工具如 Vite 或 Next.js 可能更适合。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers

We use cookies to improve your experience. By using our site, you accept cookies.