为什么webpack encore只在dev中需要

Why is webpack encore required only in dev

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

yarn add @symfony/webpack-encore --dev

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

yarn encore production

有人知道这件事的线索吗? 谢谢

How Do I Deploy My Encore Assets? 上的 Symfony 文档提供了部署资产时要记住的两件重要事情:

1) 为生产编译资产:

$ ./node_modules/.bin/encore production

现在是重要的部分:

But, what server should you run this command on? That depends on how you deploy. For example, you could execute this locally (or on a build server), and use rsync or something else to transfer the generated files to your production server. Or, you could put your files on your production server first (e.g. via git pull) and then run this command on production (ideally, before traffic hits your code). In this case, you’ll need to install Node.js on your production server.

第二个重要的事情:

2) 仅部署内置资产

The only files that need to be deployed to your production servers are the final, built assets (e.g. the public/build directory). You do not need to install Node.js, deploy webpack.config.js, the node_modules directory or even your source asset files, unless you plan on running encore production on your production machine. Once your assets are built, these are the only thing that need to live on the production server.

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

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

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

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

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

有关 Symfony 部署的资源:

  1. How to Deploy a Symfony Application(Symfony 文档)
  2. How Do I Deploy My Encore Assets?(Symfony 前端常见问题解答)
  3. Do I Need to Install Node.js on My Production Server?(Symfony 前端常见问题解答)
  4. Production Build & Deployment(SymfonyCast)

¹ 将存档的 GIT 存储库即时解压缩到 /tmp/myApp 目录中,而不是解压缩到 TAR 存档中。不要错过 --prefix 标志中的前导 /git-archive docs.