webpack 除了打包應用程序代碼,還能夠用於打包 JavaScript libraryjavascript
...java
用戶應該可以經過如下方式訪問 librarynode
import webpackNumbers from 'webpack-numbers'
webpack
require('webpack-numbers')
web
跟 webpack 打包部署代碼最大的不一樣點就在於 output 輸出屬性的配置上,webpack 爲構建 lib 提供了 library,libraryTarget, libraryExport 等屬性瀏覽器
output: { path: path.resolve(__dirname, 'dist'), filename: 'myLib.js', library: 'myLib', // 暴露出去的變量的名字 libraryTarget: 'umd' }
暴露的模塊名稱。取決於 libraryTarget 的值,當 libraryTarget:commonjs2 時無效模塊化
暴露library的方式工具
變量,以 script 方式引用, 默認值。 node 環境不支持ui
這兩個屬性,都是在全局建立一個變量,只有定義與未定義的區別,並不能在 nodejs 中得的支持,而且存在變量衝突的可能性this
module.exports = { mode: "production", entry: "./q-library/index.js", output: { path: path.resolve(process.cwd(), "./lib"), filename: "q-library.js", library: "qlibrary", // 模塊名稱 libraryTarget: "assign", }, };
輸出代碼示例
對象屬性
module.exports = { mode: "production", entry: "./q-library/index.js", target: "node", // 默認值爲 web, 若是想導出屬性綁定在 gloabl 對象上,必須修改此屬性爲 node output: { path: path.resolve(process.cwd(), "./lib"), filename: "q-library2.js", library: "qlibrary2", // 模塊名稱 libraryTarget: "global", }, };
輸出代碼示例
模塊定義
module.exports = { mode: "production", entry: "./q-library/index.js", // target: 'node',// 默認值爲 web, 若是想導出屬性綁定在 gloabl 對象上,必須修改此屬性爲 node output: { path: path.resolve(process.cwd(), "./lib"), filename: "q-library3.js", library: "qlibrary3", // 模塊名稱 libraryTarget: "umd", globalObject: "this", umdNamedDefine: true, }, };
輸出代碼示例
配置哪一個或者哪些模塊將經過 libraryTarget 暴露出來
這個屬性的經常使用方式是和 libraryTarget 一塊兒使用
// 將mudule.exports 的default直接導出 { libraryTarget: 'commonjs2', libraryExport: 'default' }
externals: { lodash: { commonjs: 'lodash', commonjs2: 'lodash', amd: 'lodash', root: '\_' } }