UglifyJS无法在Symfony2生产环境中工作


UglifyJS not working in Symfony2 production environment

我相信我已经正确配置了它——这是我的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来重新生成文件。