为什么只有在 dev 中才需要 webpack encore

FTW*_*FTW 3 symfony webpack webpack-encore

我目前正在为 symfony 5 项目配置一些 docker 映像,并尝试处理生产构建。这样做时,我注意到 webpack encore 仅在开发模式下安装,正如官方文档中所建议的: https: //symfony.com/doc/current/frontend/encore/installation.html

yarn add @symfony/webpack-encore --dev
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说没有意义,因为即使在生产中,我们也应该构建资产:

yarn encore production
Run Code Online (Sandbox Code Playgroud)

有人有这方面的线索吗?谢谢

mi6*_*6th 6

Symfony 文档如何部署我的 Encore 资产?部署资产时需要记住两件重要的事情:

\n

1) 编译生产资源:

\n
$ ./node_modules/.bin/encore production\n
Run Code Online (Sandbox Code Playgroud)\n

现在重要的部分:

\n
\n

但是,您应该在什么服务器上运行此命令?这取决于你如何部署。例如,您可以在本地(或在构建服务器上)执行此操作,并使用 rsync 或其他方式将生成的文件传输到生产服务器。或者,您可以首先将文件放在生产服务器上(例如通过 git pull),然后在生产上运行此命令(理想情况下,在流量到达您的代码之前)。在这种情况下,您\xe2\x80\x99将需要在生产服务器上安装 Node.js。

\n
\n

第二件重要的事情:

\n

2)仅部署已构建的资产

\n
\n

唯一需要部署到生产服务器的文件是最终的构建资产例如 public/build 目录)。您不需要安装 Node.js、部署 webpack.config.js、node_modules 目录甚至源资产文件,除非您计划在生产计算机上运行 encore 生产。一旦您的资产构建完成,这些就是唯一需要存在于生产服务器上的东西。

\n
\n

简单来说,在生产环境中你只需要生成的资产(通常是/public/build是目录内容)。在一个简单的场景中,当您只需要加载已编译的 Javascript 和 CSS 文件时,Webpack 在运行时不会使用。

\n

如何部署 Symfony 应用程序和资产的可能解决方案

\n

手动部署 Symfony 应用程序时(无需 CI/CD)时,可以在本地计算机或 Docker 容器中执行以下步骤(假设 Symfony 4/5):

\n
    \n
  1. 使用导出GIT 存储库的源代码git-archive,例如:git archive --prefix=myApp/ HEAD | tar -xC /tmp/ \xc2\xb9
  2. \n
  3. 转到导出的源代码:cd /tmp/myApp
  4. \n
  5. 安装 Symfony 和其他 PHP 供应商(另请参阅Symfony 文档):composer install --no-dev --optimize-autoloader
  6. \n
  7. 安装 YARN/NPM 供应商(他们需要使用 Webpack 生成资产):yarn install
  8. \n
  9. 创建生产资产:(yarn buildyarn encore production
  10. \n
  11. (如果需要,安装 Symfony 资产:bin/console assets:install:)
  12. \n
\n

现在代码已准备好发送rsync到生产服务器。您可以排除或删除/node_modules,/var甚至/assets目录 和webpack.config.js(可能package.json也不yarn.lock需要 & - 没有测试它!)并运行例如:rsync --archive --compress --delete . <myProductionServer>:<app/target/path/>

\n

有关 Symfony 部署的资源:

\n
    \n
  1. 如何部署 Symfony 应用程序(Symfony 文档)
  2. \n
  3. 如何部署我的 Encore 资产?(Symfony 前端常见问题解答)
  4. \n
  5. 我需要在生产服务器上安装 Node.js 吗?(Symfony 前端常见问题解答)
  6. \n
  7. 生产构建和部署(SymfonyCast)
  8. \n
\n
\n

\xc2\xb9 将存档的 GIT 存储库即时解压到/tmp/myApp目录中,而不是解压缩到 TAR 存档中。不要错过旗帜/中的领先部分--prefixgit-archive文档

\n