使用webpack打包JS依賴庫
阿新 • • 發佈:2020-12-15
這裡的依賴庫是指給第三方平臺使用的JS庫檔案。與普通的web應用程式碼不同,依賴庫要正確設定匯出的內容
配置項
主要有三個配置項
library
生成庫的名稱(非檔名)
libraryTarget
配置以哪種方式暴露library
var / assign
: 暴露為一個變數this / window / global / commonjs
:在物件上賦值暴露commonjs2 / amd / umd
:指定相容特定的模組系統
libraryExport
配置哪個模組將被暴露,可以是字串或字串陣列。預設是undefined
如libraryTarget為umd時,原始碼通過export default xxx 匯出,如不設定libraryExport,則使用該庫時直接引入不是xxx,而是一個物件,它有一個default屬性,值為xx
遇到的一些問題
匯出後的內容多了一個default
屬性
原始碼
function xxx () {
}
export default xxx;
webpack 部分配置:
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist'),
library: 'xxx',
libraryTarget: 'umd',
}
通過script引入打包後的程式碼,window.xxx 並非是上面匯出的內容,而是一個物件,其default屬性是真正匯出的內容
排查過程:
檢視webpack打包後的程式碼,發現在是這樣匯出的
// ... 此處是xxx的宣告和定義
exports.default = xxx
但原始碼裡是通過ES6的module語法匯出的,由此想到webpack使用的commonjs規範,因此自動將ES6裡的export default
轉為了exports.default
,所以打包後匯出的內容多啦一個default屬性
解決
主要目的是把default幹掉,直接匯出xxx,檢視webpack文件,發現可以通過libraryExport
配置暴露(匯出)哪個模組
最終將libraryExport
設定為xxx
,就解決啦!