create-react-app 中的“npm run build”是啥?
Posted
技术标签:
【中文标题】create-react-app 中的“npm run build”是啥?【英文标题】:What is "npm run build" in create-react-app?create-react-app 中的“npm run build”是什么? 【发布时间】:2017-10-05 11:10:24 【问题描述】:我找不到任何关于“npm run build”工作的解释,
它简单易用,我得到了“构建”文件夹,效果很好,
但是,在 create-react-app 中,幕后究竟发生了什么?
构建工具的使用方式完全不同吗?
如果没有,是否使用其他构建工具?
【问题讨论】:
npm run <script-name>
是一种用于运行项目特定脚本的 npm 语法。这些脚本在您的package.json
文件的scripts
部分中定义。欲了解更多信息,请参阅npm-scripts
docs。 create-react-app
中的 npm run build
很可能只是调用其他一些构建工具,如 gulp、grunt 或 webpack。检查您的 package.json
以查看它运行的确切命令。
【参考方案1】:
开发人员经常将 javascript 和 CSS 拆分为单独的文件。单独的文件使您可以专注于编写更多模块化的代码块来做一件事。只做一件事的文件会减少您的认知负担,因为维护它们是一项相当繁琐的任务。
幕后究竟发生了什么?
当需要将您的应用投入生产时,拥有多个 JavaScript 或 CSS 文件并不理想。当用户访问您的网站时,您的每个文件都需要额外的 HTTP 请求,从而使您的网站加载速度变慢。
因此,为了解决这个问题,您可以为我们的应用创建一个“构建”,它将您的所有 CSS 文件合并到一个文件中,并对您的 JavaScript 执行相同的操作。这样,您可以最大限度地减少用户获得的文件的数量和大小。要创建此“构建”,您需要使用“构建工具”。因此使用npm run build
。
正如您正确提到的,运行命令 (npm run build
) 会为您创建一个 build
目录。现在假设你的应用中有一堆 CSS 和 JS 文件:
css/
mpp.css
design.css
visuals.css
...
js/
service.js
validator.js
container.js
...
运行npm run build
后,您的build
目录将是:
build/
static/
css/
main.css
js/
main.js
现在您的应用中的文件非常少。该应用程序仍然是相同的,但被压缩为一个名为 build
的小包。
最终判决: 您可能想知道为什么构建甚至值得,如果它所做的只是为您的用户节省几毫秒的加载时间。好吧,如果您只是为自己或其他几个人创建网站,则不必为此烦恼。只有高流量网站(或您希望很快成为高流量的网站)才需要生成项目的构建版本。
如果您只是在学习开发,或者只是制作流量非常低的网站,那么生成构建可能不值得您花时间。
【讨论】:
我有一个额外的查询 w.r.t 这个。我们通过 package.json 在我们的应用程序中添加的所有第三方库是否也会被转译,即我们是否为每个库都有单独的构建目录,或者一旦我们安装/下载它们,我们就已经拥有了。我不认为后者是真的,因为当我导航到 node_modules 中的任何此类文件夹时,我看不到任何构建目录。还是不确定。【参考方案2】:这里简单解释一下:https://github.com/facebookincubator/create-react-app#npm-run-build-or-yarn-build。
它在生产模式下正确捆绑 React 并优化构建以获得最佳性能。
构建被缩小,文件名包含哈希。
在幕后,它使用babel to transpile your code and webpack as the build tool 捆绑您的应用程序。
【讨论】:
以上是关于create-react-app 中的“npm run build”是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Create-React-App创建antd-mobile开发环境(学习中的记录)
尝试从 create-react-app 中的 .json 文件中读取图像
create-react-app 创建的 package.json 中的 browserslist 有啥意义
来自 create-react-app 中 CSS 的公共文件夹中的参考文件
使用 webpack modifyVars 覆盖 create-react-app 中的 ant design default.less 变量,使用 rewired 的 react app
threejs + vanilla js 和 react-three-fiber + create-react-app 的颜色差异