2013-04-02 23 views
1

有什麼辦法可以告訴Assetic命令行文件在爲開發環境構建時不生成組合「輸出」文件嗎?Symfony2 Assetic不生成組合文件--env = dev

我們使用--watch配置運行它。我們有複合文件需要很長時間才能生成並且不被使用,所以這是嚴重浪費時間。它還會導致它重新生成該堆棧中的所有文件,而不是單個發生更改的文件。

任何想法?如果沒有,我就不敢重寫資源:dump命令,因爲我們每次修改文件時都會浪費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,但我可以看到他們產生命令。

如果需要更多信息,請告訴我。謝謝。

+0

你在Symfony2,2.1,2.2上嗎?資產通常不會在開發環境中組合腳本。添加更多關於設置的細節,包括config.yml和config_dev.yml的資源部分。 –

+0

已更新,以添加更多詳細信息。讓我知道你是否需要知道其他事情。謝謝。 – samanime

+0

那麼你想要做的是防止資產編譯你的較少和打字稿文件?我不認爲這是可能的。 –

回答

1

所以我最終通過了資產包的DumpCommand。事實證明,無論環境如何,它們總是無條件地生成的(如果我們處於調試模式,只有一個條件才能執行開發)。

要修復它自己,我只是複製了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); 
      } 
     } 
    } 
} 
0
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); 
    } 
} 

的Merci等CE FUT凍糕。

由42位新秀組成)