2016-12-08 36 views
1

如何整個目錄添加到JS部分資產包yii2如何整個目錄添加到JS部分資產包yii2

我認爲這會是這樣的

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/site.min.css', 
    ]; 
    public $js = [ 
     'js/myModule/*', 
    ]; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\bootstrap\BootstrapAsset', 
    ]; 
} 

我想這因爲我不想每次(當我再壓縮我的CSS或再壓縮我的js)資產捆綁像這樣

'css/site.min.css', 

而不是寫'module.min.js', 'module2.min.js'我想寫寫像正則表達式(添加整個目錄)將從目錄中收集的所有文件,並將它們添加到我的資產包和我$js陣列將看起來像未來

'js/myModule/*', 

那麼如何實現呢?是否有任何地方可以從盒子裏準備好? 請幫忙。 我問這個,因爲「這是正常的,我(我用杯和不同minificators等)資產捆綁module.min.cssmodule.min.js寫」

回答

1

Relyin上Yii2 docs' assets page沒有辦法來實現此功能的開箱。

但是你可以重寫你的AppAsset類的init()方法來實現解析的文件夾(VIE FileHelper),它動態地添加到$this->js陣列。

另一種做法(我個人使用的方法)是解析assets.json文件,該文件被gulp文件使用,並添加由gulp生成的每個js/css文件。這裏是代碼示例

<?php 

namespace app\assets; 

use yii\base\Exception; 
use yii\web\AssetBundle; 

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = []; 
    public $js = []; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\web\JqueryAsset', 
     'yii\widgets\ActiveFormAsset', 
     'yii\validators\ValidationAsset' 
    ]; 

    public $packages = []; 

    public function init() 
    { 
     parent::init(); 

     $content = @file_get_contents(\Yii::getAlias('@app/assets.json')); 
     if (!$content) { 
      throw new Exception('Could not read assests from path ' . \Yii::getAlias('@app/assets.json')); 
     } 
     $assetsData = json_decode($content, true); 

     if (!empty($assetsData['scripts'])) { 
      foreach ($assetsData['scripts'] as $script) { 
       if (in_array($script['name'], $this->packages, true) && $this->loadInAjax($script)) { 
        $this->js[] = 'scripts/' . $script['name'] . '.js'; 
       } 
      } 
     } 

     if (!empty($assetsData['styles'])) { 
      foreach ($assetsData['styles'] as $style) { 
       if (in_array($style['name'], $this->packages, true) && $this->loadInAjax($style)) { 
        $this->css[] = 'styles/' . $style['name'] . '.css'; 
       } 
      } 
     } 

    } 
} 

希望有所幫助。

相關問題