2014-11-24 27 views
13

我正嘗試創建一個簡單的gulp任務來獲取所有bower.json依賴項並將它們注入到我的index.html文件中。如何用gulp和'main-bower-files'選擇縮小的依賴關係?

這是我gulpfile.js看起來像:

var gulp = require('gulp'); 
var bowerFiles = require('main-bower-files'); 
var inject = require('gulp-inject'); 

gulp.task('default', function() { 
    gulp.src('./public/index.html') 
     .pipe(inject(gulp.src(bowerFiles({ 
      paths: { 
       bowerDirectory: './public/bower_components', 
       bowerJson: './public/bower.json' 
      } 
     }), {read: false}), {name: 'bower'})) 
     .pipe(gulp.dest('./build')); 
}); 

和它的作品。這是我的index.html看起來像./build目錄下:

<!-- bower:js --> 
    <script src="/public/bower_components/zepto/zepto.js"></script> 
<!-- endinject --> 

不過,我無法做出主涼亭相關的文件來抓住我的精縮的依賴關係(在這個例子中,包括「/公/bower_components/zepto/zepto.min.js')。

我已經試過此覆蓋選項:

{ 
    "overrides": { 
     "BOWER-PACKAGE": { 
      "main": "**/*.min.js" 
     } 
    } 
} 

這:

{ 
    "overrides": { 
     "BOWER-PACKAGE": { 
      "main": { 
       "development": "*.js", 
       "production": "*.min.js", 
      } 
     } 
    } 
} 

,並沒有工作:(

我在做什麼錯

提前致謝!!

回答

9

您需要指定要覆蓋的包的名稱,BOWER-PACKAGE這裏是要替換的文本。你不想覆蓋你所有的依賴關係,這就是爲什麼它是一個依賴關係的重載。

因此改變你的bower.json爲:

{ 
    "overrides": { 
    "zepto": { 
     "main": "zepto.min.js" 
    } 
    } 
} 
+1

哦,我看到...我的壞... :(有沒有什麼辦法可以爲所有包設置'全局'選項,而無需手動指定每個包?我可以創建一個內聯函數來接收bowerFiles的結果數組...)並用* .min.js替換* .js,但它感覺像一個糟糕的解決方法.... – 2014-11-24 10:34:49

+0

只使用'主 - 涼亭文件',我不認爲這是一個可用的功能,現在不幸 – 2014-11-24 10:47:24

9

有兩個解決方案。
首先,您可以使用bower-main來區分縮小和非縮小文件。

另一種選擇是直接在main-bower-files返回的列表上工作並檢查縮小文件的存在。此片段在其存在時用其縮小的等效替換文件路徑。

var mainBowerFiles = require('main-bower-files'); 
var exists = require('path-exists').sync; 

var bowerWithMin = mainBowerFiles().map(function(path, index, arr) { 
    var newPath = path.replace(/.([^.]+)$/g, '.min.$1'); 
    return exists(newPath) ? newPath : path; 
}); 

請參閱this gist瞭解完整的Gulp任務。

+0

第二個選項片段是完全有用的 – meddlesome 2015-07-08 07:53:55