2

我正在学习使用webpack-encore并注意到它仅作为dev依赖项安装。这是否意味着我应该在开发时编译我的jscss文件并将它们推送到存储库,然后再推送到生产环境?

在我看来这似乎是文档所暗示的,但这不意味着合并冲突地狱吗?编译后的文件将无法合并。

这也不会违反版本控制理念吗?据我所知,您不会以编译语言(即 C/C++)发布二进制文件,而是推送代码并期望服务器编译它们。我知道这与 javascript 中的“编译”类型不同,但在这种情况下,生产服务器的预期行为是什么?接收准备为它们服务的文件,还是在发布时编译它们?

提前致谢

4

2 回答 2

4

这是否意味着我应该在开发时编译我的 js 和 css 文件并将它们推送到存储库,然后再推送到生产环境?

不完全是——这取决于你如何部署。

部署时,您需要运行./node_modules/.bin/encore production以构建资产。完成此操作后,只需将您构建的资产(例如web/build)转移到生产环境中。

您可以在本地(或在某些“构建”服务器上)运行此命令并将所有文件传输到生产环境。或者,您可以在生产环境中使用 a git pull,然后在生产环境中运行此命令(缺点是您需要在生产环境中安装 Node.js)。

您不应该/不需要将构建的文件提交到您的存储库。但是...如果它简化了您的部署(即您想做一个git pull并完成),那么这没有真正的问题。

我刚刚在 FAQ ( http://symfony.com/doc/current/frontend/encore/faq.html )中添加了一个 PR 来回答这些问题- 这是部署之前的 PR:https ://github.com/symfony/ symfony-docs/pull/8109

干杯!

于 2017-07-02T16:16:36.713 回答
2

解决方案1:

  1. yarn run encore production在本地运行
  2. 查看已创建/修改了哪些文件
  3. 将它们添加到 VCS
  4. 犯罪
  5. 推送/部署

解决方案2:

  1. 推送/部署
  2. yarn run encore production在部署期间远程运行

在我看来,第二种解决方案要好得多,因为您在部署之前不需要额外的人工检查,一切都是自动化的。但这有一个很大的缺点:构建资产可能是一个缓慢的过程,当我部署时,我的生产会在 5 到 20 秒内停止,直到资产构建完成。

这是 HTTP 500 错误:

在渲染模板期间引发了异常(“资产清单文件“[...]/web/build/manifest.json”不存在。”)。

看起来该manifest.json文件在该过程开始时被删除,并在以后从头开始创建。

有什么需要改进的?

于 2017-11-23T14:55:44.617 回答