Symfony2的Assetic不产生综合文件上--env =开发(Symfony2 Assetic

2019-10-17 23:04发布

有没有办法告诉Assetic命令行文件时,它建立了开发环境不产生复合“输出”文件?

我们把它与--watch配置下运行。 我们有这需要很长的时间来产生,而不是使用复合文件,所以它是一个时间的严重浪费。 这也使其再生在堆栈中的所有文件,而不是单一的一个改变。

有任何想法吗? 如果没有,我是半个诱惑,覆盖的资产:转储命令自己,因为我们正在认真地浪费我们每一个微小的文件更改时间1-3分钟。 =(


Symfony的版本:2.2.0(根据调试吧,刚跑没有变化作曲更新)

config.yml(assetic块)

assetic:
  debug:          %kernel.debug%
  use_controller: false
  #bundles: []
  #java: /usr/bin/java
  filters:
    cssrewrite: ~
    less:
      node: /usr/bin/node
      node_paths: [/usr/local/lib/node_modules,/usr/lib/node_modules]
      apply_to: "\.less"
    typescript:
      resource: %kernel.root_dir%/../src/GamePlan/Bundle/CoreBundle/Resources/config/assetic.typescript.xml
      apply_to: "\.ts"
      tsc: /usr/local/bin/tsc
      node: /usr/bin/node
      useOut: false

(自定义TypeScriptFilter,但它是发生在CSS文件一样,所以它不应该是,这是造成它......它也是一个相对较小的调整到一个官方的回购协议。)

config_dev.yml(assetic块)

assetic:
  use_controller: false

实例:

{% stylesheets output="bundles/mybundle/styles/mystyle.css"
    filter="cssrewrite"
    "@MyBundle/Resources/styles/a.less"
    "@MyBundle/Resources/styles/b.less"
    "@MyBundle/Resources/styles/subfolder/*.less"
    "@MyBundle/Resources/styles/subfolder/*/*.less"
%}
<link type="text/css" rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}

运行命令(在/ var /万维网作为WWW的数据):

php Symfony/app/console assetic:dump --env=dev [--watch]

不管有没有--watch不会改变产生什么样的文件,只是如果这样做他们所有或手表。

注知道这是否会给人一个线索是怎么回事,但它尝试生成的复合文件时,它产生的个人开发者面前。

我还保证我不会复制任何包括在其它块引用任何复合文件等。

它不加载组合文件中的HTML,但我可以看到他们的命令生成。

如果需要任何更多的信息,请让我知道。 谢谢。

Answer 1:

所以,我最终通过DumpCommand去了Assetic束。 原来,他们总是无条件地产生,无论环境(只有一个条件只能做开发的,如果我们在调试模式)。

为了解决这个问题我自己,我只是复制了DumpCommand并提出我自己的版本,我结束了加入的条件上述所以它只做它,如果环境刺。 我还做了它,所以如果该文件已经改变它只会转储文件的开发。

该解决方案是不完美的,需要关注(例如,如果一个文件依赖于另一个,它不会重新编译,所以我必须从时间还是运行原来的时间,如果我有一个编译器错误)。 然而,它为我工作。

修改后的dumpAsset()看起来是这样的:

private function dumpAsset($name, OutputInterface $output)
{
    $asset = $this->am->get($name);
    $formula = $this->am->getFormula($name);

    if (!$this->am->isDebug()) {
        // start by dumping the main asset
        $this->doDump($asset, $output);
    }

    // dump each leaf if debug
    if (isset($formula[2]['debug']) ? $formula[2]['debug'] : $this->am->isDebug()) {
        foreach ($asset as $leaf) {
            $mtime = filemtime(($leaf->getSourceRoot() ? $leaf->getSourceRoot() . DIRECTORY_SEPARATOR : '') . $leaf->getSourcePath());
            if ($mtime >= $asset->getLastModified()) {
                $this->doDump($leaf, $output);
            }
        }
    }
}


Answer 2:

private function dumpAsset($name, OutputInterface $output)
{
    $asset = $this->am->get($name);
    $var = false;
    $mtime3 = filemtime(str_replace('_controller/', '', rtrim($this->basePath, '/').'/'.$asset->getTargetPath()));
    foreach ($asset as $leaf) {
        $mtime = $leaf->getLastModified();
        $mtime2 = filemtime(str_replace('_controller/', '', rtrim($this->basePath, '/').'/'.$leaf->getTargetPath()));
        if ($mtime2 > $mtime3)
            $var = true;
        if ($mtime > $mtime2)
        {
            $var = true;
            $this->doDump($leaf, $output);
        }
    }
    if (!$this->am->isDebug() && $var) {
        $this->doDump($asset, $output);
    }
}

谢谢你,这是完美的。

通过42的新秀)



文章来源: Symfony2 Assetic Don't Generate Composite File on --env=dev