我目前正在为symfony 5项目配置一些对接映像,并试图处理生产构建。在这样做时,我注意到webpack仅在dev模式下安装,如以下正式文档中的建议:https://symfony.com/doc/current/frontend/encore/installation.html:
yarn add @symfony/webpack-encore --dev然而,这对我来说没有意义,因为即使在生产中,我们也应该建立资产:
yarn encore production有人有这方面的线索吗?谢谢
发布于 2020-09-03 02:12:30
如何部署我的Encore资产?上的Symfony文档提供了部署资产时要记住的两件重要事情:
1)编译用于生产的资产:
$ ./node_modules/.bin/encore production现在重要的是:
但是,您应该在哪个服务器上运行这个命令呢?这取决于您的部署方式。例如,您可以在本地(或在构建服务器上)执行此操作,并使用rsync或其他方法将生成的文件传输到生产服务器。或者,您可以先将文件放在生产服务器上(例如,通过git拉),然后在生产上运行此命令(理想情况下,在通信量到达代码之前)。在这种情况下,您需要在生产服务器上安装Node.js。
第二件重要的事情是:
2)只部署已构建的资产
需要将部署到生产服务器的唯一文件是最终构建的资产(例如,公共/构建目录)。除非计划在生产机器上运行Node.js,否则不需要安装webpack.config.js、部署webpack.config.js、node_modules目录甚至源资产文件。一旦您的资产被构建,这些就是唯一需要在生产服务器上生存的东西。
简单地说,在生产环境中,您只需要生成资产(通常是/public/build目录内容)。在一个简单的场景中,当您只需要加载编译好的Javascript和CSS文件时,Webpack就不会在运行时使用。
如何部署Symfony应用程序和资产的可能解决方案
当手动部署Symfony应用程序(没有CI/CD)时,可以在本地机器或Docker容器中执行以下步骤(假设Symfony 4/5):
git-archive从GIT存储库导出源代码,例如:git archive --prefix=myApp/ HEAD | tar -xC /tmp/cd /tmp/myAppcomposer install --no-dev --optimize-autoloaderyarn installyarn build (或yarn encore production)bin/console assets:install)现在,代码已经准备好将其rsync到生产服务器。您可以排除或删除/node_modules、/var甚至/assets目录和webpack.config.js (可能也不需要package.json & yarn.lock --没有测试过!)并运行例如:rsync --archive --compress --delete . <myProductionServer>:<app/target/path/>
关于Symfony部署的资源:
Untars正在动态地将存档的GIT存储库放到/tmp/myApp目录中,而不是进入TAR存档中。不要错过/中的--prefix标志!文档。
https://stackoverflow.com/questions/63713945
复制相似问题