官網文檔解釋的很清楚,就是webpack能夠不處理應用的某些依賴庫,使用externals配置後,依舊能夠在代碼中經過CMD、AMD或者window/global全局的方式訪問。javascript
怎麼理解呢?咱們先經過官網說的那個jquery的案例來理解。html
有時咱們但願咱們經過script引入的庫,如用CDN的方式引入的jquery,咱們在使用時,依舊用require的方式來使用,可是卻不但願webpack將它又編譯進文件中。java
1 <script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
jquery的使用以下jquery
// 咱們不想這麼用 // const $ = window.jQuery // 而是這麼用 const $ = require("jquery") $("#content").html("<h1>hello world</h1>")
這時,咱們便須要配置externalswebpack
module.exports = { ... output: { ... libraryTarget: "umd" }, externals: { jquery: "jQuery" }, ... }
咱們能夠看看編譯後的文件web
({ 0: function(...) { var jQuery = require(1); /* ... */ }, 1: function(...) { // 很明顯這裏是把window.jQuery賦值給了module.exports // 所以咱們即可以使用require來引入了。 module.exports = jQuery; }, /* ... */ });
咱們本身能夠寫個例子,固然這個例子沒什麼實際意義,只是爲了演示如何使用而已。ide
假設咱們本身有個工具庫,tools.js,它並無提供給咱們UMD的那些功能,只是使用window或者global的方式把工具的對象tools暴露出來模塊化
window.Tools = { add: function(num1, num2) { return num1 + num2 } }
接下來把它放在任何頁面可以引用到的地方,例如CDN,而後用script的方式引入頁面工具
<script src="http://xxx/tools.min.js"></script>
通常來講咱們可能會直接就這麼用了ui
const res = Tools.add(1,2)
可是既然咱們是模塊化開發,固然要杜絕一切全局變量了,咱們要用require的方式。
const tools = require('mathTools') const res = tools.add(1,2)
這是咱們再來配置一些externals便可
module.exports = { ... output: { ... libraryTarget: "umd" }, externals: { mathTools: "tools" }, ... }
首先是libraryTarget的配置,咱們上面的例子都是umd 固然它還有其餘配置方式,具體就看官網文檔吧,咱們能夠看到配置成umd即可以使用任何一種引入的方式了