【发布时间】:2020-10-01 23:51:57
【问题描述】:
当我准备好将更改推送到 GIT 服务器并部署到现场时,我正在使用 Laravel Mix 为开发环境 npm run watch 和 npm run prod 编译我的前端资产。
问题是当我运行npm run watch 时,我的变更列表被严重污染(因为所有资产都未压缩,由于显而易见的原因),我必须停止npm run watch,运行npm run prod,推送更改运行npm and run watch再次......
这很快就变得陈旧而无聊......我正在考虑在生产服务器上编译生产资产,但这不可能,因为我们正在练习零停机部署,以保持实时服务器免受 npm 包等的影响。
有没有办法真正能够在不中断的情况下运行npm run watch,也许在其他地方发布未压缩的资产(从不同的文件夹中注入 mix() 在开发上),在 git commit 之前编译生产资产(自动?!) ?
这对我有很大帮助。
任何建议都非常感谢!
【问题讨论】:
-
是什么阻止您在生产服务器上构建资产?由于您使用的是零停机部署,因此无论如何您的部署都将构建在一个单独的文件夹中,那么在那里运行
npm install和npm run production会有什么缺点? -
您绝不能提交由
npm run dev|prod|watch生成的文件,您应该将它们构建为部署过程的一部分。我已经看到这种情况发生了 3 种方式:(1)在本地构建东西并使用例如上传它们。rsync(2) 在您的目标服务器上签出您的存储库并在您的服务器上运行npm install和npm run dev|prod(相应地) (3) 使用一个中间部署服务器来签出构建然后上传代码。 -
@Remul,我的帖子中提到了一些原因。我们的生产服务器并不意味着也永远不会用于构建资源 - 仅服务。此外,在构建资产时,许多不可控的事情可能会出错,它们可以通过健全性和测试检查。该系统是关键任务,我们宁愿在开发环境中的任何其他测试之上通过人工测试。
-
@apokryfos 感谢您的 insigt!本质上,您是说我们应该分配和维护一个额外的服务器,仅用于运行
npm run prod?这是一个可行的选择,但我真的看不出在本地运行相同的命令有什么好处,但运行成本会显着上升。我们仍然可以考虑,如果我们没有一个这样的项目可以部署...... -
如果您托管多个应用程序,那么维护自动化服务器来处理部署是很常见的。 Jenkins 非常受欢迎。如果您只有这个项目,那么运行和构建很少,或者您不想要任何自动化,那么在本地或直接在生产服务器上构建可能就足够了。请注意,尽管
npm run prod确实会消耗大量内存和 CPU,因此如果您在生产环境中运行它,请注意不要关闭您的生产服务器
标签: laravel git npm laravel-mix