搜尋
首頁web前端js教程webpack引入第三方函式庫的方式及注意事項(程式碼範例)

這篇文章帶給大家的內容是關於webpack引入第三方函式庫的方式及注意事項(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一般情況下,我們不用擔心所使用的第三方函式庫,在npm管理倉庫中找不到。

如果需要某一個函式庫,如:jquery,可以直接執行npm install jquery腳本指令來安裝這個專案所需要的依賴;

然後,在使用jquery的模組檔案中,透過import $ from 'jquery'或var $ = require('jquery')來引入。

這是常用的在webpack建構的專案中引入第三方函式庫的方式。

附註:為了更好的示範範例程式碼,範例是在nodemon這篇文章的基礎上操作的。

但是,在不同的場景下,對webpack建構的專案有不同的需求:

專案的體積足夠小(cdn)

如果是webapck的處理方式,可參考webapck——實現構建輸出最小這篇文章。

使用非webapck的處理方式,如:CDN。

操作也很簡單,如果使用html-webpack-plugin直接在範本檔案template/index.html中引入某個cdn(如:boot CDN)上的某個第三方函式庫(如:jquery) ,參考程式碼如下:

nbsp;html>


    <meta>
    <title>third party</title>


    <script></script>

然後,在module.js中使用jquery即可,參考程式碼如下:

require('./module.css');
module.exports = function() {
    $(document.body).append('<h1 id="hello-webpack">hello webpack</h1>')    
}

最後,執行npm run test,建置結束後,你會在瀏覽器中看到hello webpack字樣,背景是紅色的頁面效果。

全域環境下使用第三方函式庫(provide-plugin or imports-loader)

為了避免每次使用第三方函式庫,都需要用import或require( )引用它們,可以將它們定義為全域的變數。

而webpack的ProvidePlugin內建的插件,可以解決這個問題。詳情可參考ProvidePlugin這篇文章的介紹。

避免cdn所引用的jquery衝突,這裡使用lodash。

首先,安裝lodash依賴,指令如下:

yarn add lodash --dev

然後,在webpack.config.js中,加入以下程式碼:

new webpack.ProvidePlugin({
        _: 'lodash'
}),

其次,在module.js中加入以下程式碼:

...
var arr = [1, 2, 3, 4, 5 ,6];
// provide-plugin
$(document.body).append('<h1 id="concat-arr">' + _.concat(arr, '~') + '</h1>');
...

最後,執行npm run test腳本指令,建置完成後,你就可以瀏覽器的頁面中增加了1,2,3,4,5,6,~。

如果,你想指定lodash的某個工具函數可以全域使用,如:_.concat,

首先,像下面這樣修改webapck.config.js,程式碼如下:

...
new webpack.ProvidePlugin({
        // _: 'lodash',
        _concat: ['lodash', 'concat']
}),
...

然後,修改module.js,程式碼如下:

...
var arr = [1, 2, 3, 4, 5 ,6];
// provide-plugin
// $(document.body).append('<h1 id="concat-arr">' + _.concat(arr, '~') + '</h1>');
$(document.body).append('<h1 id="concat-arr">' + _concat(arr, '~') + '</h1>');
...

如果不喜歡用外掛的,也可以考慮使用import-loader,它也可以達到相同的目的。

為了避免不必要的干擾,可以使用underscore來示範。

首先,安裝imports-loader依賴,指令如下:

yarn add imports-loader --dev

然後,安裝underscore依賴,指令如下:

yarn add underscore

其次,在webapck.config.js中加入如下程式碼:

...
module: {
        rules: [
                {
                        test: require.resolve('underscore'),
                        use: 'imports-loader?_=underscore'
                },
                ...
        ]
},
...

註:underscore和lodash都是用的是單例的模式開發的,它們實例化的建構子的名字都是_,為了作區分,需要對其中一個做一下改變。 imports-loader對這個標識起別名有點兒困難,而provide-plugin則沒有這個問題,可以定一個個性化的別名。

修改webpack.config.js,程式碼如下:

new webpack.ProvidePlugin({
        // _: 'lodash',
        // _concat: ['lodash', 'concat'],
        __: 'lodash'
}),

可以為lodash定義為__與underscore的_作區分。

然後,修改module.js,程式碼如下:

...
// provide-plugin
// $(document.body).append('<h1 id="concat-arr">' + _.concat(arr, '~') + '</h1>');
// $(document.body).append('<h1 id="concat-arr">' + _concat(arr, '~') + '</h1>');
$(document.body).append('<h1 id="concat-arr">' + __.concat(arr, '~') + '</h1>');
...

最後,儲存所有的文件,可以在瀏覽器中看到相似的結果(儲存後,nodemon自啟動瀏覽器) 。

cdn與externals

之前遇到了一些externals的問題,為什麼要詳細的說,是因為很多人不明白它到底用來幹什麼的。

場景再現:

之前,有一個項目使用了jquery,由於這個函式庫的比較經典,它在應用的各個模組中被頻繁引用。使用的方式如下:

import $ from 'jquery'

var $ = require('jquery')

結果是建置結束後,檔案比較大。那麼考慮使用cdn,如上文所描述的。這樣需要刪除import或require的引用,同時刪除安裝的jquery依賴,但是由於專案結構比較亂,模組比較多,為了避免造成少改或漏改的問題,會造成應用出錯。怎麼辦呢?

有的人說,不刪除jquery依賴,那麼使用cdn的目的就沒有意義了。而使用external則可以解決這個問題。

可以在module.js檔案中加入以下程式碼:

...
var $ = require('jquery')
...

然後,儲存文件,發現建置輸出提示如下的錯誤:

ERROR in ./module.js
Module not found: Error: Can't resolve 'jquery' in 'E:\workspace\me\webpack-play\demo\example-1'
 @ ./module.js 3:0-23
 @ ./main.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./main.js

模組module.js中的jquery不能被解析。

緊接著,在webpack.config.js中加入以下程式碼:

externals: { 
    jquery: 'jQuery',
    jquery: '$'
},

其中jquery代表的是require('jquery')中的jquery,而jQuery和$代表的是jquery這個函式庫本身提供的可是實例化的識別碼。其它的函式庫的cdn化,修改類似jquery。

但是,如果在專案一開始就決定用cdn的話,就不要在使用jquery的模組中,使用var $ = require('jquery') 或import $ from 'jquery';,雖然這樣做不會報錯,但是如果出於某方面的考慮,後期可能會引入jquery依賴,那麼就必須使用var $ = require('jquery') 或import $ from 'jquery';。

參考原始碼

#

以上是webpack引入第三方函式庫的方式及注意事項(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器