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

时间:2015-09-28 20:38:49

标签: javascript php node.js symfony uglifyjs

我相信我正确配置了 - 这是我的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 /下创建它们。

为什么它在app_dev.php中工作正常,当它在js /(js / a07da66_jquery.min_1.js)下创建新文件但不在生产中时?

2 个答案:

答案 0 :(得分:2)

您必须运行app/console --env=prod assetic:dump来为prod环境生成资产。

经验法则:

  • dev 模式下,保持app/console assetic:watch --force在后​​台运行(至少在处理JS / CSS文件时)。只要文件发生变化,它就会重新生成 dev 资产。
  • 部署/构建时,运行app/console --env=prod assetic:dump一次,以便生成 prod 的合并资产。

prod模式的想法是你生成当前开发的某种构建或快照。因此,仅在创建构建时才使用app/console --env=prod assetic:dump

当然,您可以将 dev 环境切换到 prod 进行简短测试,但是您也必须执行构建过程(包括生成 prod 资产)。

答案 1 :(得分:0)

在Symfony 3 +中,您必须运行bin/console assetic:dump --env=prod来生成prod环境的文件。

如果您对资产进行了修改,则每次都必须运行bin/console assetic:watch以重新生成文件。