2016-06-09 49 views
1

我有在大口與browserify捆綁幾個JS模塊:如何導出瀏覽過的模塊以便在瀏覽器中進行瀏覽?

gulp.task('build:js', ['clean:js'], function() { 
    browserify({ 
    debug: true, 
    entries: paths.js.src 
    }) 
    .transform('babelify', { presets: ['es2015'] }) 
    .bundle() 
    .pipe(source('bundle.js')) 
    .pipe(buffer()) 
    .pipe(gulp.dest(paths.js.dist)); 
}); 

它輸出單個bundle.js。但是,像這樣捆綁時,我不能在瀏覽器中使用require個別模塊。我希望這樣做,因爲我不希望始終啓動每個模塊(有些是頁面特定的)。相反,我希望能夠在捆綁的頁面上使用var someModule = require('some-module');

現在我在文檔中找不到任何關於此的內容,因爲它只記錄命令行選項(而不是js api)。 This answer顯示模塊可能是需要的並且從一口吞下暴露出來,但是這會暴露我的整個捆綁包,而不是它所組成的模塊。

解決方案是將所有模塊分開捆綁,排除依賴關係(因此它們不會在捆綁包中重複),然後將它們連接起來。但是,這並不真的看起來像,因爲可行的解決方案:

  1. 模塊可能有麻煩解析相關,因爲一切是分開捆綁,從而依賴將不得不在瀏覽器中得到解決。我認爲不理想,容易發生破損。
  2. 由於我使用了很多模塊,因此非常費力,每個模塊都必須手動導出,排除依賴關係並在我的模板中引用。 There are ways to automate it,但這並不排除共享依賴關係。

那麼我該如何解決這個問題?我如何要求我的js在瀏覽器中單獨編寫的包,供客戶端使用?

+0

你會想看看代碼塊。不幸的是,在Webpack中這很容易。 – ceejayoz

回答

0

所以我最終做的是別的。儘管有可能,但我所要求的方式與瀏覽工作的方式背道而馳。也許最終當HTTP2導入和js modules可以在所有主流瀏覽器中使用時,這會更容易。

現在,我只需要爲每個頁面上運行的腳本(包括所有第三方庫)提供一個global捆綁包。然後,對於每個頁面,我都有一個單獨的入口點以及它需要的本地模塊。這是迄今爲止最可維護的解決方案。

相關問題