使用Encore进行Symfony4部署

时间:2018-01-21 18:22:00

标签: deployment symfony4 webpack-encore

当前documentation说,当我想部署用于制作时,我只需要public/build下使用./node_modules/.bin/encore production创建的文件。而且还要将public/build添加到git ignore中。我是否必须手动复制public/build的内容?

在Symfony3中,我的部署看起来像这样:

git pull bin/php bin/console cache:clear --env=prod --no-debug bin/php bin/console assets:install --env=prod bin/php bin/console assetic:dump --env=prod --no-debug

1 个答案:

答案 0 :(得分:0)

仅供参考,使用assetic是“旧”方式,启动Symfony 2.8 Assetic不再包含在标准框架中(但您仍然可以添加它)。

关于public/build你误解了一点 - 实际的源文件应该在其他地方,例如assets/css/app.scssassets/js/app.js。使用Webpack Encore,运行./node_modules/.bin/encore production将缩小,uglify等(无论您在webpack.config.js中配置)这些源文件,然后将生成的文件复制到public/build。因此public/build将只包含生成的内容,因此可以安全地添加到.gitignore(但您还需要在生产中运行加载脚本)。

您的JavaScript文件(在本例中为app.js)应包含

require('../css/app.scss');

这样app.scss实际上是app.js的依赖关系,您只需要告诉webpack.config.js包含JavaScript文件。 webpack.config.js的基本配置可能如下所示:

// webpack.config.js
var Encore = require('@symfony/webpack-encore');

Encore
    // this will put all your compiled stuff into public/build, that’s
    // why you can put this into .gitignore, because you can re-build this
    // from the source files.
    .setOutputPath('public/build/')

    // the public path used by the web server to access the previous directory
    .setPublicPath('/build')

    // this will create public/build/app.js, and also public/build/app.css
    // since the scss file is a dependency of app.js
    .addEntry('app', './assets/js/app.js')

    // allow sass/scss files to be processed
    .enableSassLoader()

    [...]
;

// export the final configuration
module.exports = Encore.getWebpackConfig();

您可以在https://symfony.com/doc/current/frontend/encore/simple-example.html(第一个示例)或https://symfony.com/doc/current/frontend.html(概述)下找到更多解释