亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

webpack4之如何編寫loader的方法步驟

發布時間:2020-09-23 00:54:49 來源:腳本之家 閱讀:177 作者:擼狗吸貓 欄目:web開發

之前學習過webpack3的知識,但是webpack4升級后還是有很多變動的,所以這次重新整理一下webpack4的知識點,方便以后復習。

這次學習webpack4不僅僅要會配置,記住核心API,最好還要理解一下webpack更深層次的知識,比如打包原理等等,所以可能會省略一些比較基礎的內容,但是希望我可以通過此次學習掌握webpack,更好地應對以后的工作。

1.編寫入門級loader

我在之前的文章中,已經把webpack基礎的內容基本上都過了一遍,現在開始準備復習更高級的webpack知識了,首先從loader開始。

首先初始化一個項目

npm init

然后安裝依賴

cnpm install -D webpack webpack-cli

創建一個src目錄,里面創建一個index.js

webpack4之如何編寫loader的方法步驟

新建一個webpack.config.js,寫入最基本的配置

webpack4之如何編寫loader的方法步驟

如果此時,我們有個需求,中打包過程中,需要把world替換成mark,我們就可以借助loader來實現。首先在src同級目錄新建一個loader文件夾,里面新建一個replaceLoader.js。

webpack4之如何編寫loader的方法步驟

replaceLoader.js需要導出一個函數,注意:這個函數不能是箭頭函數,因為webpack調用loader的時候會對this做一些變更,上面有一些方法,如果使用箭頭函數,this指向就會有問題,沒有辦法調用this上的一些方法。

函數可以接受一個參數,參數是我們源代碼的內容,所以可以對source進行操作后,return source,就可以改變源代碼了。

webpack4之如何編寫loader的方法步驟

然后使用我們自己寫的loader,use就不填寫loader名稱了,需要寫我們編寫的loader的路徑。

webpack4之如何編寫loader的方法步驟

這樣我們打包后發現,world已經被替換成mark了,這樣我們就實現了一個最簡單的loader。

2.給loader配置參數

loader中常常可以配置一些參數,那么我們如果想配置參數,要怎么做呢?

webpack4之如何編寫loader的方法步驟

此時在replaceLoader中,可以通過this.query訪問到參數。

webpack4之如何編寫loader的方法步驟

webpack4之如何編寫loader的方法步驟

webpack4之如何編寫loader的方法步驟

這樣打包后,結果就會替換成我們的參數,但是官方推薦我們使用loader-utils來傳參。

cnpm install --save-dev loader-utils

webpack4之如何編寫loader的方法步驟

這樣打包的結果也是我們傳入的參數。

3.this.callback

有時候我們不止要return一個resource,還可能要返回多個結果,就需要用到callback。

this.callback(
 err: Error | null,
 content: string | Buffer,
 sourceMap?: SourceMap,
 meta?: any
);

第一個參數是錯誤,第二個是結果,第三個是sourcemap,第四個可以是任何內容(比如元數據)

webpack4之如何編寫loader的方法步驟

4. this.async

在loader中,如果我們直接調用setTimeout,就會報錯,那么如果我們想進行異步操作要怎么做呢?

webpack4之如何編寫loader的方法步驟

當要使用異步的時候,需要先把callback變為this.callback,然后再返回結果(和this.callback一樣)。

這樣再打包就不會有任何問題。

額外知識點:我們現在配置loader的時候,需要使用path.resolve,有沒有什么方法可以像其他loader一樣引用呢?

webpack4之如何編寫loader的方法步驟

這樣只寫loader名稱,webpack就會先到node_modules里面找,找不到就去當前目錄下的loaders中去找。

webpack4之如何編寫loader的方法步驟

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金昌市| 惠州市| 卢湾区| 敦煌市| 富蕴县| 黎平县| 准格尔旗| 图木舒克市| 南宫市| 天峻县| 哈尔滨市| 晋宁县| 阿克陶县| 睢宁县| 天门市| 剑川县| 九龙城区| 浑源县| 武安市| 广西| 江安县| 家居| 五峰| 大关县| 鄂州市| 长葛市| 肥东县| 辛集市| 百色市| 嘉兴市| 米泉市| 衡阳市| 巴里| 阳曲县| 延川县| 公安县| 布尔津县| 虞城县| 白银市| 卫辉市| 南投市|