assetic:dump在“less”过滤器上失败

时间:2013-07-11 23:00:12

标签: symfony assetic

当我尝试转储Symphony2应用程序的资产托管内容时,出现以下错误:

$ php app/console assetic:dump -e prod
Dumping all prod assets.
Debug mode is off.

  [InvalidArgumentException]
  There is no "less" filter.

然而,据我所知,我不使用任何需要较少过滤器的资产,当然所有我的twig模板的grep都没有改变。

我通过composer(Twitter的bootstrap)安装的一个依赖项有一些.less模板,但是我没有在我的twig模板中引用它们,我只是将它指向css版本。资产仍会试图抛弃它们吗?我怎么能告诉它不要?

作为参考,这是我在模板中包含css的方法

{% stylesheets filter="cssrewrite"
  '../vendor/jquery-ui-css/jquery-ui-css/*css'
  '../vendor/twitter/bootstrap/docs/assets/css/bootstrap*.css'
%}
<link rel="stylesheet" type="text/css" href="{{ asset_url }}">
{% endstylesheets %}

1 个答案:

答案 0 :(得分:8)

很多可能的原因......

1)某些第三方软件包添加了一个依赖于编译器传递中较少过滤器的资产集合

2)有申请规则,如

assetic:
    filters:
        less:
            apply_to: *.less

...在您的资产配置中,即app/config/config.yml

3)您的配置

中使用较少的过滤器资产集合
assetic:
    assets:
        css_character:
            inputs: 
                 - "%kernel.root_dir%/../src/Acme/YourBundle/Resources/public/less/*.less"
             outputs:
                 - css/my.css
             filters:
                 - less

4)您的第三方软件包之一使用资产的{% stylesheets %}函数提供了一个twig模板,其中包含较少的过滤器:

{% stylesheets "@AcmeTwitterBundle/Resources/bootstrap/less/*.less" filter="less" %}
    {# ... {{ asset_url }} ...#}
{% endstylesheets %}

现在该怎么找?

首先使用less过滤器检查配置文件app/config/config.yml和其他包含的资产条目。

找出使用较少过滤器的最简单方法是安装ElaoWebProfilerExtraBundle,清除缓存并查看分析器左侧菜单中的“Assetic”选项卡。您将获得所有资产集合及其使用的过滤器的概述。

另一个选项 - 虽然WebProfilerExtraBundle非常棒,但不涉及新的捆绑包 - 是app/AppKernel.php尝试assetic:dump仍然抛出,逐个禁用第三方捆绑包(并每次清除缓存)直到你找到坏孩子为止的例外。

或者脏:启用过滤器虽然可能没有安装过少,但看看下一个异常抛出的位置:

assetic:
    filters:
        less: ~

...总而言之,我敢打赌你包括了supercool mopa-bootstrap捆绑包,其中几乎没有人知道它在幕后实际做了什么,但它很有名,许多人因为它的KnpBundle分数而安装它。

意思是......由于MopaBootstrapBundle提供的模板中包含的文件较少,即here,因此会抛出您的异常。