2014-02-17 49 views
3

我在項目中使用browserify和browserify-shim,使用gulp-browserify運行gulp。如何防止browserify-shim需要所有墊片?

gulp.src(['./resources/js/main.js']) 
    .pipe(browserify({ 
     shim: { 
      angular: { 
       path: './node_modules/angular/angular.js', 
       exports: 'angular' 
      }, 
      'angular-animate': { 
       path: './node_modules/angular-animate/angular-animate.js', 
       exports: 'ngAnimate', 
       depends: { 
        angular: 'angular', 
        jQuery: 'jQuery' 
       } 
      }, 
      [...] 
     } 
    })) 
    .pipe(concat('app.js')) 
    .pipe(gulp.dest('./web/js')); 

此設置工作正常,並且對於大多數零件而言,按預期進行。但是,Browserify將始終在構建中包含所有 shimmed庫,即使沒有其他被require()調用。

該主題文檔似乎並不存在。有沒有辦法來防止這種情況?這對我來說似乎非常直觀 - 構建應該只包含我實際需要的東西。

(更新:我安裝使用納帕/ NPM角和其他庫)

回答

0

當你Browserify墊片,它使那些庫(你告訴它「出口」,明確對象)全球。對於這些庫,約定仍然使用require(),但是,這樣做只是最佳實踐,所以如果庫在路上轉換爲module.exports,則不必替換代碼中的全局引用。另外,以良好的節點形式列出所有需要的文件在頂部會更好。 :)

因此,通過填充這些庫來回答你的問題,你已經告訴browserify將它們包含爲全局變量,以便它們可以在任何地方使用,所以它們將自動包含在構建中,而不管你是否require()他們。

如果你想包含一些而不是基於gulp.env之類的東西,你可以嘗試單獨構建選項對象並將它傳遞給browserify函數。