资产转储在我的Symfony应用程序中找不到uglifycss

时间:2013-07-30 09:30:49

标签: symfony assetic uglifycss

对于我的prod环境,我想使用如下配置的UglifyCSS过滤器(config_prod.yml):

assetic:
    filters:
        uglifycss:
            node: /usr/bin/env node
            bin: /usr/local/bin/uglifycss
            apply_to: "\.css$"

但每当我跑

php app/console assetic:dump --env=prod --no-debug

我收到此错误消息:

[Assetic\Exception\FilterException]                                                                                                                      
  An error occurred while running:                                                                                                                         
  '/usr/local/bin/node' '/usr/bin/uglifycss' '/tmp/inputtyeA2H'                                                                                            

  Error Output:                                                                                                                                            

  node.js:201                                                                                                                                              
          throw e; // process.nextTick error, or 'error' event on first tick                                                                               
                ^                                                                                                                                          
  Error: Cannot find module '/usr/bin/uglifycss'                                                                                                           
      at Function._resolveFilename (module.js:332:11)                                                                                                      
      at Function._load (module.js:279:25)                                                                                                                 
      at Array.0 (module.js:479:10)                                                                                                                        
      at EventEmitter._tickCallback (node.js:192:40)  

很明显,Assetic正在/usr/bin中寻找uglifycss,尽管我将其配置为使用不同的路径/usr/local/bin。有谁知道这里发生了什么?

3 个答案:

答案 0 :(得分:8)

我的最终配置似乎有效:

  1. 设置config_prod

    app/config/config_prod.yml
    assetic:
        filters:
           uglifycss:
           bin: %kernel.root_dir%/Resources/node_modules/.bin/uglifyjs
           node: null
           apply_to: '*.css$'
    
  2. 不要在config.yml中添加任何关于uglify的内容。将它们留在config_(env).yml文件

  3. 重建缓存

    app/console cache:clear --env=prod --no-debug
    
  4. 转储资产

    app/console assetic:dump --env=prod --no-debug
    
  5. 我怎么知道这个:

    我遇到了这个问题,并设法解决了这个问题。我认为我的设置可能有点不同,我的uglify配置分为app / config.yml和app / config_prod.yml

    我的配置与:http://symfony.com/doc/current/cookbook/assetic/uglifyjs.html完全相同 :

    app/config/config.yml
    assetic:
     filters:
         uglifycss:
             bin: %kernel.root_dir%/Resources/node_modules/.bin/uglifyjs
    
    app/config/config_prod.yml
    assetic:
     filters:
         uglifycss:
             apply_to: "*.css$"
    

    我发现的是,Symfony在构建缓存时忽略了config.yml中的变量。您可以通过查看app / cache / prod / appProdProjectContainer.php并搜索“uglifycss”来查看它找到的内容。我看起来像这样:

    protected function getAssetic_Filter_UglifycssService()
    {
        $this->services['assetic.filter.uglifycss'] = $instance = new \Assetic\Filter\UglifyCssFilter('/usr/bin/uglifycss', '/usr/bin/node');
    

    当我将bin:variable移动到config_prod.yml并重建缓存“cache:clear”时,它找到了设置并将其拉入。但是,节点仍然作为'/ usr / bin / node'传递。查看Uglify过滤器的源代码,如果节点变量为null,它将使用JUST uglify路径。因此,要使用uglifycss的二进制文件,只需将node设置为null。

答案 1 :(得分:1)

如果您安装了uglifycss的二进制文件,则无需指定节点的路径。

我很确定

assetic:
    filters:
        uglifycss:
            bin: /usr/local/bin/uglifycss
            apply_to: "\.css$"

应该这样做。

答案 2 :(得分:1)

只需制作符号链接=)

ln -s /usr/local/bin/uglifycss /usr/bin/uglifycss

不那么脏,100%工作=)