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

acm*_*cme 5 symfony assetic uglifycss

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

assetic:
    filters:
        uglifycss:
            node: /usr/bin/env node
            bin: /usr/local/bin/uglifycss
            apply_to: "\.css$"
Run Code Online (Sandbox Code Playgroud)

但无论何时我跑

php app/console assetic:dump --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

[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)  
Run Code Online (Sandbox Code Playgroud)

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

Fod*_*gus 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$'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 不要在config.yml中添加任何关于uglify的内容.将它们留在config_(env).yml文件中

  3. 重建缓存

    app/console cache:clear --env=prod --no-debug
    
    Run Code Online (Sandbox Code Playgroud)
  4. 转储资产

    app/console assetic:dump --env=prod --no-debug
    
    Run Code Online (Sandbox Code Playgroud)

我怎么想出来的:

我遇到了这个问题,并设法修复它.我认为我的设置可能有点不同,我的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$"
Run Code Online (Sandbox Code Playgroud)

我发现的是,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');
Run Code Online (Sandbox Code Playgroud)

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


Fla*_*ask 1

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

我相当确定

assetic:
    filters:
        uglifycss:
            bin: /usr/local/bin/uglifycss
            apply_to: "\.css$"
Run Code Online (Sandbox Code Playgroud)

应该可以解决问题。