国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?

這篇具有很好參考價值的文章主要介紹了webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?,webpack,前端,node.js
一、區(qū)別

前面兩節(jié)我們有提到Loader與Plugin對應的概念,先來回顧下

  • loader 是文件加載器,能夠加載資源文件,并對這些文件進行一些處理,諸如編譯、壓縮等,最終一起打包到指定的文件中
  • plugin 賦予了 webpack 各種靈活的功能,例如打包優(yōu)化、資源管理、環(huán)境變量注入等,目的是解決 loader 無法實現(xiàn)的其他事

從整個運行時機上來看,如下圖所示:

webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?,webpack,前端,node.js
可以看到,兩者在運行時機上的區(qū)別:

  • loader 運行在打包文件之前
  • plugins 在整個編譯周期都起作用

在Webpack 運行的生命周期中會廣播出許多事件,Plugin 可以監(jiān)聽這些事件,在合適的時機通過Webpack提供的 API改變輸出結果

對于loader,實質是一個轉換器,將A文件進行編譯形成B文件,操作的是文件,比如將A.scss或A.less轉變?yōu)锽.css,單純的文件轉換過程

二、編寫loader

在編寫 loader 前,我們首先需要了解 loader 的本質

其本質為函數(shù),函數(shù)中的 this 作為上下文會被 webpack 填充,因此我們不能將 loader設為一個箭頭函數(shù)

函數(shù)接受一個參數(shù),為 webpack 傳遞給 loader 的文件源內容

函數(shù)中 this 是由 webpack 提供的對象,能夠獲取當前 loader 所需要的各種信息

函數(shù)中有異步操作或同步操作,異步操作通過 this.callback 返回,返回值要求為 string 或者 Buffer

代碼如下所示:

// 導出一個函數(shù),source為webpack傳遞給loader的文件源內容
module.exports = function(source) {
    const content = doSomeThing2JsString(source);
    
    // 如果 loader 配置了 options 對象,那么this.query將指向 options
    const options = this.query;
    
    // 可以用作解析其他模塊路徑的上下文
    console.log('this.context');
    
    /*
     * this.callback 參數(shù):
     * error:Error | null,當 loader 出錯時向外拋出一個 error
     * content:String | Buffer,經(jīng)過 loader 編譯后需要導出的內容
     * sourceMap:為方便調試生成的編譯后內容的 source map
     * ast:本次編譯生成的 AST 靜態(tài)語法樹,之后執(zhí)行的 loader 可以直接使用這個 AST,進而省去重復生成 AST 的過程
     */
    this.callback(null, content); // 異步
    return content; // 同步
}

一般在編寫loader的過程中,保持功能單一,避免做多種功能

如less文件轉換成 css文件也不是一步到位,而是 less-loader、css-loader、style-loader幾個 loader的鏈式調用才能完成轉換

三、編寫plugin

由于webpack基于發(fā)布訂閱模式,在運行的生命周期中會廣播出許多事件,插件通過監(jiān)聽這些事件,就可以在特定的階段執(zhí)行自己的插件任務

在之前也了解過,webpack編譯會創(chuàng)建兩個核心對象:

  • compiler:包含了 webpack 環(huán)境的所有的配置信息,包括 options,loader 和 plugin,和 webpack 整個生命周期相關的鉤子
  • compilation:作為 plugin 內置事件回調函數(shù)的參數(shù),包含了當前的模塊資源、編譯生成資源、變化的文件以及被跟蹤依賴的狀態(tài)信息。當檢測到一個文件變化,一次新的 Compilation 將被創(chuàng)建

如果自己要實現(xiàn)plugin,也需要遵循一定的規(guī)范:

  • 插件必須是一個函數(shù)或者是一個包含 apply 方法的對象,這樣才能訪問compiler實例
  • 傳給每個插件的 compiler 和 compilation 對象都是同一個引用,因此不建議修改
  • 異步的事件需要在插件處理完任務時調用回調函數(shù)通知 Webpack 進入下一個流程,不然會卡住

實現(xiàn)plugin的模板如下:

class MyPlugin {
    // Webpack 會調用 MyPlugin 實例的 apply 方法給插件實例傳入 compiler 對象
  apply (compiler) {
    // 找到合適的事件鉤子,實現(xiàn)自己的插件功能
    compiler.hooks.emit.tap('MyPlugin', compilation => {
        // compilation: 當前打包構建流程的上下文
        console.log(compilation);
        
        // do something...
    })
  }
}

在 emit 事件發(fā)生時,代表源文件的轉換和組裝已經(jīng)完成,可以讀取到最終將輸出的資源、代碼塊、模塊及其依賴,并且可以修改輸出資源的內容文章來源地址http://www.zghlxwxcb.cn/news/detail-624180.html

到了這里,關于webpack基礎知識五:說說Loader和Plugin的區(qū)別?編寫Loader,Plugin的思路?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • webpack 中的loader 和plugin的區(qū)別

    Loader: 作用: Loader 用于在模塊加載時對文件進行轉換。它是一個轉換器,將文件從一種形式轉換為另一種形式,例如,將 ES6 語法的 JavaScript 文件轉換為能夠在瀏覽器中運行的普通 JavaScript。 使用場景: Loader通常被配置在 module.rules 中,指定了哪些文件應該被哪些Loader處理。

    2024年01月22日
    瀏覽(33)
  • css基礎知識二十:說說對Css預編語言的理解?有哪些區(qū)別?

    css基礎知識二十:說說對Css預編語言的理解?有哪些區(qū)別?

    一、是什么 Css 作為一門標記性語言,語法相對簡單,對使用者的要求較低,但同時也帶來一些問題 需要書寫大量看似沒有邏輯的代碼,不方便維護及擴展,不利于復用,尤其對于非前端開發(fā)工程師來講,往往會因為缺少 Css 編寫經(jīng)驗而很難寫出組織良好且易于維護的 Css 代碼

    2024年02月16日
    瀏覽(24)
  • css基礎知識三:說說em/px/rem/vh/vw的區(qū)別?

    css基礎知識三:說說em/px/rem/vh/vw的區(qū)別?

    一、介紹 傳統(tǒng)的項目開發(fā)中,我們只會用到px、%、em這幾個單位,它可以適用于大部分的項目開發(fā),且擁有比較良好的兼容性 從CSS3開始,瀏覽器對計量單位的支持又提升到了另外一個境界,新增了rem、vh、vw、vm等一些新的計量單位 利用這些新的單位開發(fā)出比較良好的響應式

    2024年02月09日
    瀏覽(36)
  • webpack基礎知識十:與webpack類似的工具還有哪些?區(qū)別?

    webpack基礎知識十:與webpack類似的工具還有哪些?區(qū)別?

    一、模塊化工具 模塊化是一種處理復雜系統(tǒng)分解為更好的可管理模塊的方式 可以用來分割,組織和打包應用。每個模塊完成一個特定的子功能,所有的模塊按某種方法組裝起來,成為一個整體(bundle) 在前端領域中,并非只有webpack這一款優(yōu)秀的模塊打包工具,還有其他類似的

    2024年02月13日
    瀏覽(26)
  • css基礎知識四:說說設備像素、css像素、設備獨立像素、dpr、ppi 之間的區(qū)別?

    css基礎知識四:說說設備像素、css像素、設備獨立像素、dpr、ppi 之間的區(qū)別?

    一、背景 在css中我們通常使用px作為單位,在PC瀏覽器中css的1個像素都是對應著電腦屏幕的1個物理像素 這會造成一種錯覺,我們會認為css中的像素就是設備的物理像素 但實際情況卻并非如此,css中的像素只是一個抽象的單位,在不同的設備或不同的環(huán)境中,css中的1px所代表

    2024年02月10日
    瀏覽(31)
  • 網(wǎng)絡基礎知識(2)——簡單說說IP地址

    網(wǎng)絡基礎知識(2)——簡單說說IP地址

    ????????Internet 依靠 TCP/IP 協(xié)議,在全球范圍內實現(xiàn)不同硬件結構、不同操作系統(tǒng)、不同網(wǎng)絡系統(tǒng)的主機之間的互聯(lián)。在 Internet 上,每一個節(jié)點都依靠唯一的 IP 地址相互區(qū)分和相互聯(lián)系,IP 地址用于標識互聯(lián)網(wǎng)中的每臺主機的身份,設計人員為每個接入網(wǎng)絡中的主機都分

    2024年02月04日
    瀏覽(19)
  • Webpack的Loader和Plugin

    1.1 Loader作用 把js和json外的其它文件轉為Webpack可以識別的模塊 1.2 Loader簡介 1.2.1 Loader類型 1.總類型 pre: 前置loader normal: 普通loader inline: 內聯(lián)loader post: 后置loader 2.默認類型 默認為normal類型 3.修改類型 配置時可以通過enforce修改 pre,normal,post 類型。 1.2.2 Loader順序 1.總順序

    2024年04月18日
    瀏覽(20)
  • Webpack中的Loader和Plugin:理解與使用

    Webpack中的Loader和Plugin:理解與使用

    ?? 前端開發(fā)工程師、技術日更博主、已過CET6 ?? 阿珊和她的貓_ CSDN 博客專家、23年度博客之星前端領域TOP1 ?? 牛客 高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》 ?? 藍橋云課 簽約作者、上架課程《Vue.js 和 Egg.js 開發(fā)企業(yè)級健康管理項目》、《帶你

    2024年03月10日
    瀏覽(27)
  • webpack基礎知識

    webpack基礎知識

    webpack的本質是一個第三方模塊包,用于分析,并打包代碼 支持所有類型的文件打包 支持less/sass= css 支持ES6/7/8=ES5 壓縮代碼,提高加載速度 yarn安裝 配置環(huán)境變量 驗證 配置scripts 需求 兩個js文件打包成一個js文件 index.js add.js 打包命令 在對應src目錄下

    2024年02月13日
    瀏覽(21)
  • webpack基礎知識九:如何提高webpack的構建速度?

    webpack基礎知識九:如何提高webpack的構建速度?

    一、背景 隨著我們的項目涉及到頁面越來越多,功能和業(yè)務代碼也會隨著越多,相應的 webpack 的構建時間也會越來越久 構建時間與我們日常開發(fā)效率密切相關,當我們本地開發(fā)啟動 devServer 或者 build 的時候,如果時間過長,會大大降低我們的工作效率 所以,優(yōu)化webpack 構建

    2024年02月14日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包