当我尝试将 Assets 托管内容转储到 Symphony2 应用程序时,出现以下错误:
$ php app/console assetic:dump -e prod
Dumping all prod assets.
Debug mode is off.
[InvalidArgumentException]
There is no "less" filter.
但是,据我所知,我没有使用任何需要 less 过滤器的资源,当然,我所有的 twig 模板的 grep 不会出现任何结果。
我通过 Composer(Twitter 的 bootstrap)安装的依赖项之一有一些 .less 模板,但我没有在我的 twig 模板中引用它们,我只是将其指向 css 版本。 assetic还会尝试抛弃它们吗?我怎样才能告诉它不要这样做?
作为引用,这是我在模板中包含 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) 某些第三方 bundle 根据编译器 channel 中的 less 过滤器添加 Assets 集合
2)有一个适用规则,例如
assetic:
filters:
less:
apply_to: *.less
...在您的 Assets 配置中,即 app/config/config.yml
3) 您的配置中有一个使用 less 过滤器的 Assets 集合
assetic:
assets:
css_character:
inputs:
- "%kernel.root_dir%/../src/Acme/YourBundle/Resources/public/less/*.less"
outputs:
- css/my.css
filters:
- less
4) 您的第三方 bundle 之一使用 assetic 的 {% stylesheets %}
函数和 less 过滤器提供了一个 twig 模板:
{% stylesheets "@AcmeTwitterBundle/Resources/bootstrap/less/*.less" filter="less" %}
{# ... {{ asset_url }} ...#}
{% endstylesheets %}
<小时/>
现在如何找出答案?
首先使用 less 过滤器检查您的配置文件 app/config/config.yml
和其他包含的配置文件中的 assetic 条目。
找出较少过滤器使用位置的最简单方法是安装 ElaoWebProfilerExtraBundle ,清除缓存并查看分析器左侧菜单中的“ Assets ”选项卡。您将获得所有 Assets 集合及其使用的过滤器的概述。
另一种选择 - 尽管 WebProfilerExtraBundle 很棒,但不涉及新的 bundle - 是在 app/AppKernel.php
中逐一禁用第三方 bundle (并每次清除缓存)尝试如果assetic:dump
仍然会抛出异常,直到找到坏男孩。
或者脏:启用过滤器,尽管可能没有安装 less 并查看抛出下一个异常的位置:
assetic:
filters:
less: ~
...总而言之,我敢打赌您包含了超酷的 mopa-bootstrap bundle ,几乎没有人知道它在幕后实际上在做什么,但它很出名,很多人安装它是因为它是 KnpBundle 的分数。
意思是...您的异常将被抛出,因为 MopaBootstrapBundle 提供的模板中包含的文件较少,即 here 。
关于symfony - assetic:dump 在 "less"过滤器上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604941/