了解这一点之前不要使用 Create React App

2025-06-07

了解这一点之前不要使用 Create React App

前几天,一位同事注意到了我们生产代码中一个有趣的地方:你可以在浏览器中查看我们原始的、格式完美的代码。一开始我心想:“但我是为生产环境构建的,所以它应该被压缩成难以阅读的格式,对吧?”

我一直以为Create React App (CRA) 已经帮我搞定了。难道我一直被骗了?

源地图。

是的,原因在于源映射。所以我了解了它们,并觉得有必要对它们进行一些阐述,以便其他人(比如我)能够了解它们,并做出更明智的决定。

什么是源地图?

使用 CRA 构建 React 应用时,你基本上是在使用 webpack 和 babel 来转译、压缩和打包你为部署而编写的 JavaScript/TypeScript 代码。在此过程中,你的文件需要经过映射才能恢复到原始格式。这时,源映射就派上用场了。

源映射只是 JSON 文件,本质上重建了打包器和转译器所更改的内容。它们的主要目的是帮助调试已构建的、优化的代码。

这是有道理的,如果你有一个错误并查看堆栈跟踪,你想看到你的代码而不是 webpack 和 babel 吐出的乱码。

为什么浏览器显示所有内容?

CRA 中的默认环境变量GENERATE_SOURCEMAP=true。这意味着一旦构建完成,生成的文件夹中将会生成额外的“.map”文件。它看起来类似于:
用 .map 文件构建文件夹

然后浏览器可以使用 .map 文件重建原始代码,并在浏览器开发工具中查看。

当 时GENERATE_SOURCEMAP=false,相同的代码将如下所示:
构建不包含 .map 文件的文件夹

以下是加拿大税务局 (CRA) 文档所述:
在 GENERATE_SOURCEMAP 上创建 React App 文档

我应该生成源地图吗?

最后,我该怎么做?保留源映射还是删除它们。

我个人认为这取决于你的需求,但基本上是的。我认为 CRA 的说法是正确的(默认情况下,它们是生成的,可以被覆盖)。

下面我列出了一些有关生成源地图的要点,以帮助您做出选择:

因为没有它们:

  1. 精明的用户可以看到你的源代码😬

拥有它们:

  1. 就算他们看到了你的代码又怎么样?他们会用它做什么?🤷🏽‍♂️
  2. 它有助于在生产中调试。

是的,基本上就是这样。这似乎取决于你是否在意用户是否查看你的源代码,以及你是否希望拥有在生产环境中调试的能力。

重要提示:如果您生成了源映射,则会创建额外的 .map 文件。不过,这些文件不会增加包的大小,因为只有在开发工具打开时,客户端才会请求这些文件 😏*

结论

请告诉我你对在生产环境中生成 Source Map 有什么看法。你是禁用它们,还是保留它们?

此外,如果您想核实我的事实,我很乐意了解有关源地图的更多信息。

查看我用来了解源地图的这些资源:


感谢阅读!如果你想了解更多技术技巧、软件资讯和商业博客,可以在Twitter上关注我🔥🤘🏽🐶

文章来源:https://dev.to/jburroughs/don-t-use-create-react-app-until-you-know-this-1a2d
PREV
展示你的 GitHub 个人资料的 3 个工具
NEXT
我如何构建学习机器