我相信我配置正确——这是我的 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 %}
如果我在开发模式下加载页面(/app_dev.php),它工作正常,并且只是单独加载文件,但被 uglifyjs 缩小了;但如果我尝试在生产中加载它,它会将所有这些 js 文件合并到一个 js 文件中(即 a07da66.js)。我面临的问题是,在尝试加载该文件(a07da66.js)时出现 404 未找到错误。它尝试在 js/a07da66.js 访问它 - 似乎默认在 js/下创建它们。
为什么当它在 js/(js/a07da66_jquery.min_1.js) 下创建新文件时,它在 app_dev.php 中工作正常,但在生产环境中却不能工作?
最佳答案
您必须运行 app/console --env=prod assetic:dump
才能生成 prod 环境的 Assets 。
经验法则:
- 在开发模式下,保持
app/console assetic:watch --force
在后台运行(至少在处理JS/CSS文件时)。每当文件发生更改时,它都会重新生成dev Assets 。 - 部署/构建时,运行
app/console --env=prod assetic:dump
一次,以便生成prod的组合 Assets 。
生产模式的想法是生成当前开发的某种构建或快照。因此,您仅在创建构建时才使用 app/console --env=prod assetic:dump
。
当然,您可以将您的 dev 环境切换到 prod 进行简短测试,但随后您也必须执行构建过程(其中包括生成 prod>产品 Assets )。
关于javascript - UglifyJS 无法在 Symfony2 生产环境中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831403/