用webpack,輸出多個出口文件,每個出口文件對應一個頁面,重複引用jquery?

最近在學習在gulp下使用webpack,第一次接觸,按照我的理解,每個頁面會引用一個出口文件,這個出口文件處理這個頁面的各種邏輯功能,但是我在入口文件用var $ = require("jquery");的方法引用jquery的時候,會不會導致每個出口文件都會將jquery打包進去,導致每個出口文件重複打包jquery。難道webpack是只有一個出口文件,然後所有頁面的邏輯都在這個出口文件里,每個頁面都引用這個出口文件嗎?還是說頁面中單獨再引用jquery,不打包它。


1、把jquery作為一個包也打包:

// a b 對應你的頁面入口
entry: {
"vendor": ["jquery"]
"a": ["src/a.js"],
"b": ["src/b.js"]
}

2、然後把 vendor 作為 common:

plugins: [
new webpack.optimize.CommonsChunkPlugin("vendor","vendor.js")
]

3、在 a 頁面中:

&
&

這樣就行了

4、如果嫌每次 var $ = require("jquery") 麻煩,可以這樣配置:

plugins:[
new webpack.ProvidePlugin({
$: "jquery"
})
]

這樣就不用每次都 require("jquery") ,直接使用 $ 就行

====

今天再補充一下,jquery 這種庫一般都有 CDN 支持的,所以不一定非要自己打包,可以通過 externals 配置一下:

externals: {
"jquery": "window.jQuery"
}

你的頁面里可以這樣寫:

&
&


建議把jq單獨寫一個script標籤引入。


@一波不是一波的答案是可以解決題主的問題的,將共用模塊單獨打包成的vendor.js中還會包括webpack的rumtime代碼。通常來說,vendor包含的模塊最好是與業務相關的模塊(或者只包含webpack rumtime)而非像jQuery這種獨立的第三方庫。我們團隊對第三方庫的處理方案就是常規的script標籤引入,一方面不讓它參與構建以免影響構建性能,另一方面使用全站統一的url也利於瀏覽器緩存。


原文刪除


推薦閱讀:

webpack真的適合SPA么?
webpack如何全局引入jquery和插件?
徹底解決Webpack打包性能問題
webpack技術講解及入門
webpack源碼學習系列之一:如何實現一個簡單的webpack

TAG:前端開發 | JavaScript | webpack |