2016-09-16 91 views
0

可能是愚蠢的,但只是想問我發佈資產文件時使用的語法是否正確。 The Guide指示使用不帶星號的文件夾名稱,但對於我來說,這種方式並不奏效。Yii2 AssetBundle publishOptions模式語法?

奇怪的是,即使我指定只發布css和images文件夾,assetManager也會發布$sourcePath中的其他文件夾(幸運的是,裏面沒有文件)。而且,當新文件添加到圖像文件夾時,它們將保持未發佈狀態,直到我刪除@web/assets文件夾。這是預期的嗎?

<?php 
namespace app\views\layouts\main\assets; 
use yii\web\AssetBundle; 

class ThemeAsset extends AssetBundle 
{ 
    public $sourcePath = '@theme'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/site.css', 
    ]; 

    public $publishOptions = [ 
     "only" => [ 
      "css/*", 
      "images/*", 
     ], 
     "forceCopy" => false, 
    ]; 
} 
+0

最後一個問題......他們成爲未公開的......那是因爲力拷貝參數值是假的。 – StalkAlex

回答

2

,你應該設置$sourcePath$baseUrl不是他們兩個的第一個音符(如果設置了兩個,前者將覆蓋上時assetManager電話publish方法)。

奇怪的是,即使我指定唯一發布的CSS和圖像 文件夾時,assetManager還發布了其他文件夾中的$ SOURCEPATH (幸運的是沒有文件內)。

如果你想避免資產管理公司發佈這個文件夾,就不能不提他們except參數的publisOptions

'except' => [ 
    "doc/", 
    "img/", 
], 

更重要的是,當新的文件添加到圖像文件夾中,他們仍然 直到我刪除@ web/assets文件夾時才發佈。這是預期的嗎?

是的!這是一種自然的行爲。您可以在開發模式下將forceCopy 012xx的財產設置爲true。這會導致更新每次刷新中的資產內容。輕鬆地使用Yii生產常數:YII_DEBUG

public $publishOptions = [ 
    'only' => [ 
     'js/', 
     'css/', 
    ], 
    'forceCopy' => YII_DEBUG, 
]; 

所以你完全有這樣的資產管理公司:

<?php 
namespace app\views\layouts\main\assets; 
use yii\web\AssetBundle; 

class ThemeAsset extends AssetBundle 
{ 
    public $sourcePath = '@theme'; 

    public $css = [ 
     'css/site.css', 
    ]; 

    public $publishOptions = [ 
     "only" => [ 
      "css/*", 
      "images/*", 
     ], 
     'except' => [ 
      "doc/", 
      "img/", 
     ], 
     "forceCopy" => YII_DEBUG, 
    ]; 
} 
+0

你知道唯一和除了* .less文件的作品嗎?我希望較少的文件被轉換但不能被複制。但是當我添加'僅'=>'css/* .css'時,文件不會被轉換。如果我添加'except'=>'* .less',轉換也不會完成... – BHoft

+0

其實現在我對您的問題沒有任何意見,並且還有空閒時間閱讀「AssetBundle」的來源以查找解。我建議你發佈一個新問題。 @BHoft – meysam