Javascript 网页包encore项目的版本控制策略

Javascript 网页包encore项目的版本控制策略,javascript,php,symfony,webpack,webpack-encore,Javascript,Php,Symfony,Webpack,Webpack Encore,我正在学习使用它,并注意到它仅作为dev依赖项安装。这是否意味着我应该在开发时编译我的js和css文件,并将它们推送到存储库,然后再推到生产中 在我看来,这似乎是文档所暗示的,但这不意味着合并冲突吗?编译后的文件将无法合并 这难道不违背版本控制的理念吗?据我所知,您不会以编译语言(即C/C++)发布二进制文件,而是推送代码并期望服务器编译它们。我知道这与javascript中的“编译”类型不同,但在这种情况下,生产服务器的预期行为是什么?是接收准备好提供服务的文件,还是在发布时编译 提前谢谢 这

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

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

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

提前谢谢

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

不完全是-这取决于您如何部署

部署时,需要运行
/node\u modules/.bin/encore production
来构建资产。完成此操作后,只需将构建的资产(例如,
web/build
)转移到生产中

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

您不应该/不需要将构建的文件提交到存储库。但是如果它简化了您的部署(即,您希望执行一个
git pull
,然后就可以完成),那么这并没有什么真正的问题

我刚刚在FAQ()中添加了一个PR来回答这些问题-以下是部署前的PR:


干杯

解决方案1:

  • 在本地运行
    纱线运行安可制作
  • 检查已创建/修改的文件
  • 将它们添加到VCS中
  • 承诺
  • 推送/部署
  • 解决方案2:

  • 推送/部署
  • 在部署期间远程运行
    纱线运行安可制作
  • 在我看来,第二种解决方案要好得多,因为在部署之前不需要额外的人工检查,一切都是自动化的。 但这有一个很大的缺点:构建资产可能是一个缓慢的过程,当我部署时,在构建资产之前,我的生产会在5到20秒内停止

    以下是HTTP 500错误:

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

    看起来,
    manifest.json
    文件在流程开始时被删除,然后从头开始创建


    有什么需要改进的吗?

    我曾经使用assetic:dump在生产服务器中编译资产。我在文件上看到,不建议采用这种做法。我希望能够将我的开发资产转储到public/build/dev中,并将此文件夹添加到.gitignore文件中,然后将产品资产转储到public/build中,但我没有做到这一点。另一种解决方案是在我的开发环境中编译prod资产,将public/build添加到.gitignore,并使用filezilla在我的prod服务器中添加资产文件。一个丑陋的解决方案是,当我需要在服务器上推送新资产时,从.gitignore中删除public/build…我有一个非常基本的部署脚本,它依赖于我的生产服务器上的git post receive挂钩,可以更改chode,运行“composer install”和“Thread run encore production”。在最后一步中,manifest.json丢失了几秒钟,导致500错误,因为未找到{{asset('build/manifest.json')}}。我的问题的解决方案是使用真正的部署工具,如deployer,它在服务器上创建一个新的应用程序,然后在其构建完成后将其符号链接到该应用程序。此解决方案没有停机时间。