npm run eject命令做什么?我确实理解其他命令的功能,比如启动、构建、测试。但不知道什么是弹出。


Create-react-app封装了它内部使用的所有NPM模块,这样你的包。Json将是非常干净和简单的,你不必担心它。

然而,如果你想开始做更复杂的事情,并安装可能与create-react-app在底层使用的模块交互的模块,这些新模块需要知道哪些是可用的,哪些是不可用的,这意味着你需要让create-react-app对它们进行反抽象。

从本质上讲,这就是react-scripts eject所做的。它将不再隐藏它在引擎盖下安装的东西,而是将这些东西弹出到项目的包中。Json给所有人看。


npm run eject

注意:这是一个单向操作。一旦弹射出去,就回不去了!

如果您对构建工具和配置选择不满意,可以随时弹出。此命令将从项目中删除单个构建依赖项。

相反,它会复制所有的配置文件和传递依赖项(Webpack, Babel, ESLint等)到你的项目中,这样你就可以完全控制它们。除了eject之外的所有命令仍然可以工作,但它们将指向复制的脚本,因此您可以对它们进行调整。现在你只能靠自己了。

你不需要使用eject。精选的特性集适用于小型和中型部署,您不必非得使用此特性。然而,我们明白,如果你不能自定义它,当你准备好了,这个工具就不会有用。

链接到文档


驱逐的替代方案

弹出使您可以自定义任何东西,但从那时起,您必须自己维护配置和脚本。如果你有很多类似的项目,这可能会令人生畏。在这种情况下,我们建议使用fork react-scripts和你需要的任何其他包,而不是弹出。本文将深入探讨如何做到这一点。你可以在这个问题上找到更多的讨论。


有一些包可以在不弹出的情况下进行自定义,就像react脚本和自定义之间的中间件一样:

https://github.com/arackaf/customize-cra https://github.com/harrysolovay/rescripts https://github.com/gsoft-inc/craco


eject:是一个高级操作,它允许你在Create-React-App(react-scripts)下自定义配置。

在做弹出之前,你需要了解后果:这是一个单向操作!

我鼓励你做eject的唯一原因是:学习构建过程(create-react-app)是如何工作的。

在eject之前还需要做一件事,就是将项目提交给git。如果您的当前项目还没有添加到git中。NPM运行弹出或纱线弹出将失败。


React-scripts基本上将所有配置和样板包封装在一个依赖项中,因此您不必从头开始配置整个项目。但是,在某些情况下,您可能希望覆盖这些配置以进行构建自定义或其他更具体的内容。因此,它提供了弹出功能,以便您可以控制这些配置。包括lint,捆绑,代码分割等。