麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Web服務器 > 正文

webpack源碼之loader機制詳解

2024-09-02 12:20:50
字體:
來源:轉載
供稿:網友

loader概念

loader是用來加載處理各種形式的資源,本質上是一個函數, 接受文件作為參數,返回轉化后的結構。

loader 用于對模塊的源代碼進行轉換。loader 可以使你在 import 或"加載"模塊時預處理文件。因此,loader 類似于其他構建工具中“任務(task)”,并提供了處理前端構建步驟的強大方法。loader 可以將文件從不同的語言(如 TypeScript)轉換為 JavaScript,或將內聯圖像轉換為 data URL。loader 甚至允許你直接在 JavaScript 模塊中 import CSS文件!

loader和plugin區別

之前一篇文章中介紹了plugin機制,和今天研究的對象loader,他們兩者在一起極大的拓展了webpack的功能。它們的區別就是loader是用來對模塊的源代碼進行轉換,而插件目的在于解決 loader 無法實現的其他事。為什么這么多說呢?因為plugin可以在任何階段調用,能夠跨Loader進一步加工Loader的輸出,在構建運行期間,觸發事件,執行預先注冊的回調,使用compilation對象做一些更底層的事情。

loader用法

配置

module: {  rules: [   {    test: //.css$/,    use: [     { loader: 'style-loader' },     {      loader: 'css-loader'     }    ]   }  ] }

內聯

import Styles from 'style-loader!css-loader?modules!./styles.css';

CLI

webpack --module-bind 'css=style-loader!css-loader'

說明 上面三種使用方法作用都是將一組鏈式的 loader, 按照從右往左的順序執行,loader 鏈中的第一個 loader 返回值給下一個 loader。先使用css-loader解析 @import 和 url()路徑中指定的css內容,然后用style-loader 會把原來的 CSS 代碼插入頁面中的一個 style 標簽中。

loader實現

//將css插入到head標簽內部module.exports = function (source) {  let script = (`   let style = document.createElement("style");   style.innerText = ${JSON.stringify(source)};   document.head.appendChild(style);  `);  return script;}//使用方式1resolveLoader: {  modules: [path.resolve('node_modules'), path.resolve(__dirname, 'src', 'loaders')]},{  test: //.css$/,  use: ['style-loader']},//使用方式2//將自己寫的loaders發布到npm倉庫,然后添加到依賴,按照方式1中的配置方式使用即可

說明 上面是一個簡單的loader實現,同步的方式執行,相當于實現了style-loader的功能。

loader原理

function iteratePitchingLoaders(options, loaderContext, callback) {  var currentLoaderObject = loaderContext.loaders[loaderContext.loaderIndex];  // load loader module  loadLoader(currentLoaderObject, function(err) {    var fn = currentLoaderObject.pitch;    runSyncOrAsync(      fn,      loaderContext, [loaderContext.remainingRequest, loaderContext.previousRequest, currentLoaderObject.data = {}],      function(err) {        if(err) return callback(err);        var args = Array.prototype.slice.call(arguments, 1);        if(args.length > 0) {          loaderContext.loaderIndex--;          iterateNormalLoaders(options, loaderContext, args, callback);        } else {          iteratePitchingLoaders(options, loaderContext, callback);        }      }    );  });}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久成人精品视频 | freexxx69性欧美hd | 日韩视频一二区 | 香蕉视频99 | 欧美一级免费在线观看 | 色人阁导航 | 一区二区三区播放 | 成人区一区二区 | cosplay裸体福利写真 | 国产一区二区免费在线观看 | 91免费视频版 | 天天干干 | 国产一级毛片高清视频完整版 | 欧美成人免费在线视频 | 亚洲一区动漫 | xxxxxx打针视频vk | 国产视频软件在线 | 国产精品免费观看视频 | 黄污免费网站 | 高清国产午夜精品久久久久久 | 久久成人激情视频 | 欧美wwwwww| 色网免费观看 | 欧美 日韩 国产 在线 | 中文字幕亚洲一区二区三区 | 欧美一区中文字幕 | 爱操成人网 | 一级外国毛片 | 亚洲精品一区二区三区在线看 | 久久久精品视频免费看 | 999久久国精品免费观看网站 | 久久人添人人爽人人爽人人片av | 在线中文字幕亚洲 | 中文字幕亚洲视频 | 中文字幕在线第二页 | 日本xxxx视频 | xxxxhd18hd日本hd | 99精品无人区乱码在线观看 | 国产剧情v888av | 欧美1| 欧美综合日韩 |