我相信我已经正确配置了它——这是我的config.yml:
assetic:
debug: "%kernel.debug%"
use_controller: false
node: "/usr/local/bin/node"
bundles: [ ]
#java: /usr/bin/java
filters:
uglifyjs2:
# the path to the uglifyjs executable
bin: "%kernel.root_dir%/Resources/node_modules/.bin/uglifyjs"
cssrewrite: ~
我在项目中本地存储uglifyjs,只是为了更容易分发。
我正在使用uglifyjs:执行以下操作来生成所有JS文件
{% javascripts
'vendor/bower_components/jquery/dist/jquery.min.js'
'vendor/bower_components/bootstrap-sass/assets/javascripts/bootstrap.min.js'
'vendor/bower_components/angular-route/angular-route.min.js'
'vendor/bower_components/underscore/underscore-min.js'
'vendor/bower_components/angular-cookies/angular-cookies.min.js'
'js/test1.js'
'js/test2.js'
filter='?uglifyjs2' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
如果我以dev模式(/app_dev.php(加载页面,它运行良好,只是单独加载文件,但被uglifyjs缩小;但如果我尝试在生产中加载它,它会将所有这些js文件合并为一个js文件(即a07da66.js(。我面临的问题是,它在尝试加载该文件(a07da6.js(时会出现404未找到错误。它尝试在js/a07da66.js
访问它-似乎默认情况下在js/下创建它们。
当它在js/(js/a07da66_jquery.min_1.js(下创建新文件时,为什么它在app_dev.php中工作良好,而在生产中却没有?
您必须运行app/console --env=prod assetic:dump
才能为产品环境生成资产。
经验法则:
- 在dev模式下,保持
app/console assetic:watch --force
在后台运行(至少在处理JS/CSS文件时(。每当文件发生更改时,它都会重新生成dev资产 - 部署/构建时,运行
app/console --env=prod assetic:dump
一次,以便生成产品的组合资产
prod模式的理念是生成当前开发的某种构建或快照。因此,只有在创建构建时才可以使用app/console --env=prod assetic:dump
。
当然,您可以将dev环境切换到prod进行简短的测试,但随后您也必须执行构建过程(包括生成prod资产(。
在Symfony 3+中,您必须运行bin/console assetic:dump --env=prod
才能为生产环境生成文件。
如果您对资源进行了修改,则每次都必须运行bin/console assetic:watch
来重新生成文件。