ChatGPT解决这个技术问题 Extra ChatGPT

create-react-app webpack 配置和文件在哪里?

我使用 create-react-app 包创建了一个 ReactJS 项目,效果很好,但我找不到 webpack 文件和配置。

react-create-app 如何与 webpack 一起工作?使用 create-react-app 的默认安装中的 webpack 配置文件在哪里?我无法在我的项目文件夹中找到配置文件。

我还没有创建覆盖配置文件。我可以通过其他文章管理配置设置,但我想找到常规配置文件。


V
Vikram Thakur

如果您想查找 webpack 文件和配置,请转到您的 package.json 文件并查找脚本

https://i.stack.imgur.com/enyQL.png

你会发现 scripts 对象正在使用一个库 react-scripts

现在转到 node_modules 并查找 react-scripts 文件夹 react-script-in-node-modules

这个 react-scripts/scripts 和 react-scripts/config 文件夹包含所有的 webpack 配置。


我看到了,但我没有 react-scripts 目录
我刚刚使用 create-react-app 创建了一个应用程序,在我的情况下,node_modules 中有一个文件夹 react-scripts。你能分享你的 package.json
这个答案不再正确,NPM 现在是 flat 意味着所有模块都在根 node_modules 目录中
最常见的用例是自定义项目的 webpack 配置。但是如果它在 node_modules 中,它将在每个 npm 安装中被覆盖,不是吗?
k
klugjo

这些文件位于您的 node_modules/react-scripts 文件夹中:

网络包配置:

https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/config/webpack.config.js

启动脚本:

https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/scripts/start.js

构建脚本:

https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/scripts/build.js

测试脚本:

https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/scripts/test.js

等等 ...

现在,CRA 的目的不是担心这些。

documentation

您无需安装或配置 Webpack 或 Babel 等工具。它们是预先配置和隐藏的,因此您可以专注于代码。

如果您想访问配置文件,您需要通过运行 eject

npm run eject

注意:这是一种单向操作。一旦弹出,就无法返回!

在大多数情况下,最好不要弹出并尝试以另一种方式使其为您工作。

如果您需要覆盖某些配置选项,可以查看 https://github.com/gsoft-inc/craco


我知道这些是隐藏的,但我想知道这些在哪里以及 react-create-app 如何处理这种能力?
然后您可能必须查看源代码。我不知道
@Mohammad 查看“react-scripts”的源代码,您可以在那里找到所有配置
不回答问题,但无论如何都帮助了我
看起来 Craco 目前在 create-react-app 5 方面存在一些问题。他们自 1 月以来一直在努力修补此问题,但 5 个月后仍未完成github.com/gsoft-inc/craco/issues/378
j
jjbskir

很多人来到这个页面的目的是找到 webpack 配置和文件,以便添加他们自己的配置。在不运行 npm run eject 的情况下实现此目的的另一种方法是使用 react-app-rewired。这允许您在不弹出的情况下覆盖您的 webpack 配置文件。


它仍然是首选解决方案吗?重新连接的项目有这个警告:github.com/timarney/react-app-rewired#rewire-your-app-:“从 Create React App 2.0 开始,这个 repo 目前主要由社区“轻微”维护。...注意:我个人使用 next.js 或 Razzle,它们都支持开箱即用的自定义 Webpack。”
@AnthonyKong 感谢这次更新,情况真的很糟糕......上游的中央讨论似乎在:github.com/facebook/create-react-app/issues/6303
r
ravibagul91

假设您不想弹出并且只想查看配置,您会在 /node_modules/react-scripts/config 中找到它们

webpack.config.dev.js. //used by `npm start`
webpack.config.prod.js //used by `npm run build`

W
Willian Mitsuda

create-react-app 使用的 Webpack 配置在这里:https://github.com/facebook/create-react-app/tree/master/packages/react-scripts/config


这应该是答案
罐头 webpack.config.js 中发生了很多事情。想象一下尝试从头开始构建它!
@AndrewFielden 想象一下,当它没有达到您的预期时,您必须深入研究它!
A
Alfrex92

您可以在 /config 文件夹中找到它。

当您弹出时,您会收到如下消息:

 Adding /config/webpack.config.dev.js to the project
 Adding /config/webpack.config.prod.js to the project

H
Hassan Ajaz

react-scripts 正在处理 Webpack 配置。你可以在 node_modules react-scripts/config 中找到所有的 webpack 配置。

如果你想自定义 webpack 配置,你可以按照这个 customize-webpack-config


标记为 customize-webpack-config 的链接上的说明依赖于 react-app-rewired,根据其 GitHub README,它大部分未维护。
v
valk

弹出不是最好的选择,也不是在 node_modules 下编辑内容。 react-app-rewired 未维护并具有警告:

...您现在“拥有”配置。将不提供任何支持。谨慎行事...

解决方案 - use craco


craco 不适用于 react-scripts 5。
@tutiplain 你知道一个适用于 cra 5 的工具吗?
@JanisJansen 我没有。我需要这个是因为我的项目使用了一些嵌入在 node_modules 深处的 LESS。我最终直接使用了 less 编译器并将生成的样式表直接嵌入到反应代码中。
V
Vinayak humberi

尝试通过运行以下命令弹出配置文件:

npm run eject

然后你会发现在你的项目中创建了一个配置文件夹。你会发现你的 webpack 配置文件 init.


请注意,这是一个重要的步骤,您不能轻易从这些步骤中恢复过来。这将是摆脱警告的一个非常激进的解决方案。
t
therightstuff

我将 create-react-appcraco 一起使用,当使用 craco.config.js 更新到 webpack 5 时,我能够覆盖我的 webpack 配置:

module.exports = {
    style: {
        postcssOptions: {
            plugins: [
            require('tailwindcss'),
            require('autoprefixer'),
            ],
        },
    },
    webpack: {
        configure: (webpackConfig, { env, paths }) => {
            // eslint-disable-next-line no-param-reassign
            webpackConfig.resolve.fallback = {
                fs: false,
            };
            return webpackConfig;
        },
    },
}

H
Humbledore

我知道已经很晚了,但是对于将来遇到这个问题的人来说,如果你想访问 CRA 的 webpack 配置,除了你必须运行之外别无他法:

$ npm run eject

但是,通过弹出,您将摆脱 CRA 更新管道,因此从弹出的角度来看,您必须自己维护它。

我已经多次遇到这个问题,因此我为 react 应用程序创建了一个模板,该模板具有与 CRA 大部分相同的配置,但也有额外的好处(如样式组件、开玩笑单元测试、用于部署的 Travis ci、更漂亮, ESLint, etc...) 使维护更容易。查看 repo


Craco 效果很好。还有其他类似的事情。因此,对于很多场景,还有另一种方法。
回购链接已损坏。