5

对于我的 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)  

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

4

3 回答 3

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
    

我是怎么想出来的:

我遇到了这个问题并设法解决了它。我认为我的设置可能会略有不同,因为我将我的 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: 变量移动到 config_prod.yml 并重建缓存“cache:clear”时,它找到了设置并将其拉入。但是,节点仍然作为“/usr/bin/node”传递。查看 Uglify 过滤器的源代码,如果节点变量为空,它将只使用 uglify 路径。因此,要使用 uglifycss 的二进制文件,只需将 node 设置为 null。

于 2013-10-11T21:20:25.630 回答
1

如果你已经安装了 uglifycss 的二进制文件,则无需指定 node 的路径。

我相当确定

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

应该做的伎俩。

于 2013-07-30T12:07:21.350 回答
1

只需创建一个符号链接 =)

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

没那么脏,100% 有效 =)

于 2014-08-01T11:21:41.160 回答