我需要在生产环境中运行“npm run prod”吗?
Posted
技术标签:
【中文标题】我需要在生产环境中运行“npm run prod”吗?【英文标题】:Do I need to run `npm run prod` on production? 【发布时间】:2020-03-22 07:13:48 【问题描述】:Laravel 为 npm 提供了一个 package.json 文件。
默认的 package.json
仅附带 devDependencies。
如果我没记错的话:
npm run development
用于将所有依赖项与 web pack 捆绑到本地开发人员的单个文件中,然后通过版本控制推送到生产环境。
npm install
仅在生产中需要,当package.json
包含实际的dependencies
(而不仅仅是devDependencies
)。
但是,我对npm run production
脚本有点困惑。我应该在生产中运行webpack
吗?或者如果我在开发中这样做并通过 VC 推送它,这是否已经过时?我在 Laravel 的 Deploy docs 中没有找到任何内容。
【问题讨论】:
我不确定 Laravel 脚本的细节,但通常development
会进行开发构建,并且您不会将这些构建文件置于版本控制之下。 production
同样会进行生产构建——你将它构建的文件部署到你的服务器,但你不需要在 prod 中运行脚本本身。
@mpen 你的意思是npm run production
不应该在生产服务器上运行吗?
@Kerkouch 我完全同意mpen 的回答。您在本地运行它们,而不是在服务器上。
@Kerkouch 正确。如果您的应用程序仅是 php,您甚至不需要在生产服务器上安装 node 或 npm。 package.json [non-dev] dependencies
确实更多用于节点应用程序,其中一半的依赖项仅用于开发,而您实际上需要将另一半安装在生产服务器上才能运行您的应用程序。但是 Laravel/PHP 应用程序通常会在部署之前预编译所有资产。
Laravel 包 json 的链接不起作用(不再)。这是 Laravel 8 的一个:github.com/laravel/laravel/blob/8.x/package.json
【参考方案1】:
我通常做的是使用npm run dev
或npm run watch
,它们只是监视更改并仍然进行开发编译,这意味着我使用的任何console.log,并且输出没有被缩小,所以这对开发很有好处脚本说的目的:)。在我投入生产之前,我运行了npm run prod
,然后缩小了输出并为缓存目的对输出进行了版本控制:
https://laravel.com/docs/master/mix#versioning-and-cache-busting
我忘了提到安装部分。如果你在生产环境中运行npm install
,它也会安装devDependencies。所以检查这个答案
https://***.com/a/9276112/1457270
【讨论】:
所以你在生产服务器上运行的唯一npm
命令是npm install --production
,对吧?
@Adam,我什至不运行那个,因为我在本地编译资产。所以我通常会编译一个libs.js
脚本,其中包含大部分使用的第三方库,然后是app.js
,这是我自己的脚本/组件。我也将它们压缩后推送到我的存储库,因此团队共享相同的版本。
我在本地编译所有内容的问题是npm run dev
和npm run prod
产生不同的输出(如预期的那样)。在推送之前缩小生产是有道理的,但问题是 git 认为缩小的app.js
与非缩小的不同。所以,git 总是认为app.js
变了。你是怎么处理的?
@AndyWhite 我从不将npm run dev
编译的版本推送到存储库中,始终是缩小版。因此,在本地开发时,我总是在运行 npm run watch
,在我准备好推送之前,我运行 npm run prod
,仅此而已。
@nakov,这是有道理的,我很欣赏后续行动。使用npm run watch
,它将为 dev 编译,这将不同于 repo 中的缩小版本。我想这是个人喜好,但我不喜欢在 git 中看到没有真正改变的“已更改”文件。我的解决方案是添加一个为生产编译的npm run watch-prod
命令。这消除了开发构建的全部意义,但我想不出其他任何东西。以上是关于我需要在生产环境中运行“npm run prod”吗?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Laravel 项目中使用 deploy.sh 文件运行“npm run prod”(使用 Laravel Mix)
npm run prod 和 dev 中的 TailwindUI 差异