Eva*_*uss 12 less symfony assetic
每次重新加载页面时,如何强制资产来呈现资产(无论资产是否被修改)?
关于我的问题的更多解释:
我目前正在开发一个Symfony2项目,我使用Assetic来管理和编译.less文件.我得到了一切正常工作,但我有一个小问题,我想解决.
在config.yml中,我将assetic use_controller设置为true.
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: true
Run Code Online (Sandbox Code Playgroud)
结果是Symfony每次都会动态呈现新的.css文件.无文件文件被修改.这很棒.
我的问题是我使用一个主project.less文件,我导入所有其他.less文件
// Import Twitter Bootstrap
@import "../../../../../../vendor/twitter/bootstrap/less/bootstrap.less";
// Import Foo
@import "foo.less";
...
Run Code Online (Sandbox Code Playgroud)
它允许我保持一个干净的结构,也可以从供应商导入.less文件,例如:twitter bootstrap.
在我的Twig模板中,我只调用这个主文件.
{% stylesheets '@ProjectWebBundle/Resources/public/less/project.less' filter='less' %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)
由于此主.less文件永远不会被修改,因此Assetic不会重新编译资产.这就是为什么我希望文件无论是否被修改都无关紧要.
Mig*_*ias 11
AFAIK有这个没有完美的解决方案还
我用:
php app/console assetic:dump --watch
Run Code Online (Sandbox Code Playgroud)
每当它检测到模板中引用的任何.less文件发生更改时,它将编译.less文件.
要强制编译,您必须在"主"文件(@imports其他文件)中进行任何更改.但是,好消息是,这足以"触摸"文件来做到这一点.因此,您可以在每次需要时手动触摸它:
touch ~/web/css/main.less;
Run Code Online (Sandbox Code Playgroud)
或者,我通常做的是设置一个脚本,每60秒左右触摸一次这个"主"文件:
while true; do
sleep 60
touch ~/web/css/main.less
done
Run Code Online (Sandbox Code Playgroud)
这应该适用于linux和mac.
希望能帮助到你.至少暂时:)
小智 11
我正在使用Assetic的Lessphp过滤器来缓存文件.对于我自己,我创建了一个扩展默认Assetic过滤器的类,并用当前时间触及每个文件
<?php
namespace Xxx\AssetsBundle\Assetic\Filter;
use Assetic\Asset\AssetInterface;
use Assetic\Filter\LessphpFilter;
class LessphpNonCachedFilter extends LessphpFilter
{
public function filterLoad(AssetInterface $asset)
{
$root = $asset->getSourceRoot();
$path = $asset->getSourcePath();
$filename = realpath($root . '/' . $path);
if (file_exists($filename)) {
touch($filename);
}
parent::filterLoad($asset);
}
}
Run Code Online (Sandbox Code Playgroud)
您必须在参数部分(services.yml)中设置"assetic.filter.lessphp.class":
parameters:
assetic.filter.lessphp.class: Xxx\AssetsBundle\Assetic\Filter\LessphpNonCachedFilter
Run Code Online (Sandbox Code Playgroud)
小智 0
use_controller: false完成修改后,您应该传递并编译您的资产。
如果您想编译您的资产:
php app/console assetic:dump
Run Code Online (Sandbox Code Playgroud)