当前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
答案 0 :(得分:0)
仅供参考,使用assetic是“旧”方式,启动Symfony 2.8 Assetic不再包含在标准框架中(但您仍然可以添加它)。
关于public/build
你误解了一点 - 实际的源文件应该在其他地方,例如assets/css/app.scss
和assets/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(概述)下找到更多解释