<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      webpack之loader與plugin

      Posted on 2021-10-19 18:22  過鹿人  閱讀(352)  評論(0)    收藏  舉報


      loader與plugin的區別

      loader的作用是將代碼進行轉換,比如less轉成css,一個loader就是一個函數,接收的參數是上一個loader的返回值,loader進行一系列處理后 返回新的代碼

      plugin的作用是在webpack的編譯流程中完成某些操作,比如當webpack編譯啟動時,控制臺輸出一句話表示webpack啟動了,plugin是一個帶有apply方法的對象,apply方法的參數是compiler,在apply中注冊compiler對象的鉤子函數,鉤子函數在官網中有相應的描述。

      loader

      基本配置

      module.exports = {
        mode: "development",  
        module: {
          rules: [
            {
              test: /\.css$/,
              // 先執行 css-loader 再執行 style-loader
              use: ["style-loader","css-loader"],
            }
          ],
        },
      };

      loaders處理流程

      判斷當前文件名是否滿足module.rules.test的規則

      滿足規則,則根據loaders數組從最后一個loader依次執行到最前的一個loader;不滿足規則,loaders數組為空,沒有可執行的loader

      最后返回loaders處理結果

      loader的寫法

      css-loader:

      module.exports = function (sourceCode) {
          var code = `var style = document.createElement("style");
          style.innerHTML = \`${sourceCode}\`;
          document.head.appendChild(style);
          module.exports = \`${sourceCode}\``;
          return code;
      }


      plugin

      loader的功能定位是轉換代碼,而一些其他的操作難以使用loader完成,比如:

      • 當webpack生成文件時,順便多生成一個說明描述文件
      • 當webpack編譯啟動時,控制臺輸出一句話表示webpack啟動了
      • 當xxxx時,xxxx

      當我們需要把功能嵌入到webpack的編譯流程中的時候,要借助于plugin

      基本配置

      module.exports = {
          plugins:[
              new MyPlugin()
          ]
      }

       

      plugin是一個帶有apply方法的對象

      var plugin = {
          apply: function(compiler){
              
          }
      }

      也可以使用class的寫法

      class MyPlugin{
          apply(compiler){
      
          }
      }
      
      var plugin = new MyPlugin();

      apply

      apply方法會在初始化階段,創建好Compiler對象后運行。

      compiler對象是在初始化階段構建的,整個webpack打包期間只有一個compiler對象,后續完成打包工作的是compiler對象內部創建的compilation

      apply方法在一次打包過程中只執行一次,該方法接收一個compiler對象

      compiler對象提供了大量的鉤子函數(hooks,可以理解為事件),plugin的開發者可以注冊這些鉤子函數,參與webpack編譯和生成。

      你可以在apply方法中使用下面的代碼注冊鉤子函數:

      class MyPlugin{
          apply(compiler){
              compiler.hooks.事件名稱.事件類型(name, function(compilation){
                  //事件處理函數
              })
          }
      }

      事件名稱

      即要監聽的事件名,即鉤子名,所有的鉤子:https://www.webpackjs.com/api/compiler-hooks

      事件類型

      這一部分使用的是 Tapable API,這個小型的庫是一個專門用于鉤子函數監聽的庫。

      它提供了一些事件類型:

      • tap:注冊一個同步的鉤子函數,函數運行完畢則表示事件處理結束
      • tapAsync:注冊一個基于回調的異步的鉤子函數,函數通過調用一個回調表示事件處理結束
      • tapPromise:注冊一個基于Promise的異步的鉤子函數,函數通過返回的Promise進入已決狀態表示事件處理結束

      處理函數

      處理函數有一個事件參數compilation

       

      博客園  ©  2004-2025
      浙公網安備 33010602011771號 浙ICP備2021040463號-3

      主站蜘蛛池模板: 喀喇| 日韩人妻无码精品系列| 国产成人精品18| 免费看的日韩精品黄色片| 国产一区二区三区不卡视频| 成人国产精品中文字幕| 好吊视频一区二区三区人妖| 亚洲精品日韩在线观看| A级毛片100部免费看| 久久综合色最新久久综合色| 日本三级成本人网站| 亚洲无人区码一二三区别| 宁晋县| 国产对白老熟女正在播放| 99国产欧美另类久久久精品| 丝袜人妻一区二区三区网站| 国产成人综合色在线观看网站| 日韩亚洲国产激情一区二区| 成人拍拍拍无遮挡免费视频| 国产精品国产三级国产午| 色婷婷婷丁香亚洲综合| 大名县| 国产午夜一区二区在线观看| 又爽又黄又无遮掩的免费视频| 人妻av无码系列一区二区三区| 亚洲线精品一区二区三八戒| 国产无套乱子伦精彩是白视频| 忘忧草在线社区www中国中文| 亚洲欧美日本久久网站| 美女一级毛片无遮挡内谢| 免费视频一区二区三区亚洲激情 | 普定县| 在线播放亚洲成人av| 欧洲熟妇色xxxx欧美老妇免费| 亚洲av无码之国产精品网址蜜芽| 国产成人午夜福利精品| 男女激情一区二区三区| 国产精品一精品二精品三| 亚洲精品久久久久国色天香| 老熟女多次高潮露脸视频| 欧美老少配性行为|