【问题标题】:How do I separate [npm run watch] and [npm run prod] output (Laravel Mix context)?如何分离 [npm run watch] 和 [npm run prod] 输出(Laravel Mix 上下文)?
【发布时间】:2020-10-01 23:51:57
【问题描述】:

当我准备好将更改推送到 GIT 服务器并部署到现场时,我正在使用 Laravel Mix 为开发环境 npm run watchnpm run prod 编译我的前端资产。

问题是当我运行npm run watch 时,我的变更列表被严重污染(因为所有资产都未压缩,由于显而易见的原因),我必须停止npm run watch,运行npm run prod,推送更改运行npm and run watch再次......

这很快就变得陈旧而无聊......我正在考虑在生产服务器上编译生产资产,但这不可能,因为我们正在练习零停机部署,以保持实时服务器免受 npm 包等的影响。

有没有办法真正能够在不中断的情况下运行npm run watch,也许在其他地方发布未压缩的资产(从不同的文件夹中注入 mix() 在开发上),在 git commit 之前编译生产资产(自动?!) ?

这对我有很大帮助。

任何建议都非常感谢!

【问题讨论】:

  • 是什么阻止您在生产服务器上构建资产?由于您使用的是零停机部署,因此无论如何您的部署都将构建在一个单独的文件夹中,那么在那里运行 npm installnpm run production 会有什么缺点?
  • 您绝不能提交由npm run dev|prod|watch 生成的文件,您应该将它们构建为部署过程的一部分。我已经看到这种情况发生了 3 种方式:(1)在本地构建东西并使用例如上传它们。 rsync (2) 在您的目标服务器上签出您的存储库并在您的服务器上运行 npm installnpm run dev|prod (相应地) (3) 使用一个中间部署服务器来签出构建然后上传代码。
  • @Remul,我的帖子中提到了一些原因。我们的生产服务器并不意味着也永远不会用于构建资源 - 仅服务。此外,在构建资产时,许多不可控的事情可能会出错,它们可以通过健全性和测试检查。该系统是关键任务,我们宁愿在开发环境中的任何其他测试之上通过人工测试。
  • @apokryfos 感谢您的 insigt!本质上,您是说我们应该分配和维护一个额外的服务器,仅用于运行npm run prod?这是一个可行的选择,但我真的看不出在本地运行相同的命令有什么好处,但运行成本会显着上升。我们仍然可以考虑,如果我们没有一个这样的项目可以部署......
  • 如果您托管多个应用程序,那么维护自动化服务器来处理部署是很常见的。 Jenkins 非常受欢迎。如果您只有这个项目,那么运行和构建很少,或者您不想要任何自动化,那么在本地或直接在生产服务器上构建可能就足够了。请注意,尽管npm run prod 确实会消耗大量内存和 CPU,因此如果您在生产环境中运行它,请注意不要关闭您的生产服务器

标签: laravel git npm laravel-mix


【解决方案1】:

您可以将public/js/*public/css/* 添加到gitignore 并在服务器上编译您需要的内容,运行npm run watch 后不会更改受git 影响的文件。

【讨论】:

  • 正如我在我的帖子和 cmets 中提到的那样 - 在生产服务器上构建资产被考虑并尝试过,但由于多种原因被拒绝,例如 npm 浪费和碎片空间、片状构建行为、很少文件权限问题等。在关键任务实时服务器上无法控制的一切都不是一种选择……遗憾的是……
  • 在生产服务器上编译 js 资产是不好的做法。
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2020-08-10
  • 2017-10-22
  • 2021-01-31
  • 2023-04-02
  • 2017-12-23
  • 2021-08-23
  • 2019-08-08
相关资源
最近更新 更多