最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解webpack自定義loader初探

 更新時(shí)間:2018年08月29日 08:28:59   作者:zjutkz''s blog  
這篇文章主要介紹了webpack自定義loader初探,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近負(fù)責(zé)的Weex項(xiàng)目涉及到一些構(gòu)建上的問題,需要通過自定義webpack的loader去實(shí)現(xiàn),于是學(xué)習(xí)了一下這方面的知識,寫一篇文章做個總結(jié),以免遺忘。

webpack想必前端圈的人都知道了,大多數(shù)人也都或多或少的用過。簡單的說就是它能夠加載資源文件,并對這些文件進(jìn)行一些處理,諸如編譯、壓縮等,最終一起打包到指定的文件中。可以說,它作為一個打包工具,在前端工程化浪潮中,起到了中流砥柱的作用。

那webpack其中非常重要的一環(huán)就是,能夠?qū)虞d的資源文件,進(jìn)行一些處理。比如把less、sass文件編譯成css文件,負(fù)責(zé)這個處理過程的,就是webpack的loader。

什么是loader

我們都知道webpack作為當(dāng)下最火的一個前端構(gòu)建工具,具有很多很實(shí)用的功能,loader就是其中之一。說的通俗一點(diǎn),loader就是用于對模塊的源碼進(jìn)行轉(zhuǎn)換。對于做Android的同學(xué),大家可以把它想象成gradle中的transform task。

loader怎么用

在平時(shí)的開發(fā)過程中,loader的使用也是非常常見的,我們可以在工程的webpack.config.js中定義:

module: {
 rules: [
  {
   test: /\.css$/,
   use: [
    'vue-style-loader',
    'css-loader'
   ],
  },   {
   test: /\.vue$/,
   loader: 'vue-loader',
   options: {
    loaders: {
    }
    // other vue-loader options go here
   }
  },
  {
   test: /\.(png|jpg|gif|svg)$/,
   loader: 'file-loader',
   options: {
    name: '[name].[ext]?[hash]'
   }
  }
 ]
}

可以看到,對于css文件,我們使用css-loader,對于vue文件,我們使用vue-loader,對于圖片文件,我們使用file-loader。這些loader會將對應(yīng)的文件進(jìn)行轉(zhuǎn)換,構(gòu)建出最終的產(chǎn)物。

如何自定義loader

有了上面的經(jīng)驗(yàn),我們該如何自定義一個loader呢?其實(shí)也是非常簡單的。

首先我們創(chuàng)建一個js文件,就取名叫test-loader吧。

var loaderUtils = require('loader-utils');

module.exports = function(source) {
  console.log("start process code...");

  var options = loaderUtils.getOptions(this) || {};
  if(options !== {}) {
    var replaceMap = options["replaceMap"];
    for(var key in replaceMap) {
      console.log(source);
      source = source.replace(key, replaceMap[key]);
      console.log(source);
    }
  }

  return source;
};

這就是全部的代碼了,其實(shí)一個loader內(nèi)部就是一個node模塊,代碼的編寫就和平時(shí)寫node一樣就ok了。

test-loader的邏輯就是獲取到設(shè)置的option,并且做一個文本的替換。

假設(shè)我們還有2個js文件,分別是test.js和index.js

test.js

const str = 'test is loaded';
module.exports = str;

index.js

const test = require('./src/test');
console.log(test);

然后我們在webpack.config.js中加入我們自己的test-loader。

{
  test: /\.js$/,
  loader: 'test-loader',
  exclude: /node_modules/,
  options: {
    replaceMap: {
      "loaded": "yeah"
    }
  }
}

其中options中,我們將“l(fā)oaded”字符串替換成“yeah”。

但是我們的loader并沒有上傳到npm中,所以我們還需要在webpack.config.js中加入下面這段代碼:

resolveLoader: {
  modules: [path.join(__dirname, './src/loaders'), 'node_modules']
}

用于加載本地loader。

這樣我們最終構(gòu)建出來的產(chǎn)物中,所有的“l(fā)oaded”字符串就會被替換成“yeah”了。

小結(jié)

這篇文章非常淺顯,主要就是講了一下loader的使用方式,其實(shí)我們熟知的很多l(xiāng)oader都是這么做的,只不過是業(yè)務(wù)邏輯上的復(fù)雜程度不同而已,大家也可以自己試試看。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序與h5的相互跳轉(zhuǎn)場景分析

    微信小程序與h5的相互跳轉(zhuǎn)場景分析

    這篇文章主要介紹了微信小程序與h5的相互跳轉(zhuǎn)場景分析,在微信小程序內(nèi)編寫webview文件,通過webview去跳轉(zhuǎn)h5,loadUrl為h5的地址,非嵌套,h5需要跳轉(zhuǎn)打開某個微信小程序,需要的朋友可以參考下
    2023-10-10
  • js中if語句的幾種優(yōu)化代碼寫法

    js中if語句的幾種優(yōu)化代碼寫法

    UglifyJS是一個對javascript進(jìn)行壓縮和美化的工具,在它的文檔說明中,我看到了幾種關(guān)于if語句優(yōu)化的方法。
    2011-03-03
  • Web?Components使用生命周期回調(diào)函數(shù)實(shí)例詳解

    Web?Components使用生命周期回調(diào)函數(shù)實(shí)例詳解

    這篇文章主要為大家介紹了Web?Components使用生命周期回調(diào)函數(shù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • javascript日期格式化方法匯總

    javascript日期格式化方法匯總

    本文給大家匯總介紹了javascript格式化日期時(shí)間的幾種常用方法,個人對最后一種個性化輸出時(shí)間比較有興趣,基本上只要項(xiàng)目中能用到都是使用這種,推薦給小伙伴們。
    2015-10-10
  • JS正則表達(dá)式詳解及身份證號碼驗(yàn)證(簡易版)

    JS正則表達(dá)式詳解及身份證號碼驗(yàn)證(簡易版)

    在做用戶實(shí)名驗(yàn)證時(shí),常會用到身份證號碼的正則表達(dá)式及校驗(yàn)方案,下面這篇文章主要給大家介紹了關(guān)于JS正則表達(dá)式及身份證號碼驗(yàn)證的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 微信小程序數(shù)據(jù)分析之自定義分析的實(shí)現(xiàn)

    微信小程序數(shù)據(jù)分析之自定義分析的實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序數(shù)據(jù)分析之自定義分析的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 用jquery.sortElements實(shí)現(xiàn)table排序

    用jquery.sortElements實(shí)現(xiàn)table排序

    實(shí)現(xiàn)table排序,網(wǎng)上有很多解決方案,很多都基于jQuery,最后我選擇用sortElements,實(shí)現(xiàn)很簡單
    2014-05-05
  • JS中的reduce()方法使用小結(jié)

    JS中的reduce()方法使用小結(jié)

    這篇文章主要介紹了JS中的reduce()方法使用小結(jié),文章通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 淺談頁面裝載js及性能分析方法

    淺談頁面裝載js及性能分析方法

    這篇文章主要簡單介紹了頁面裝載js及性能分析方法的相關(guān)資料,需要的朋友可以參考下
    2014-12-12
  • 理解javascript中try...catch...finally

    理解javascript中try...catch...finally

    這篇文章主要幫助大家理解javascript中try...catch...finally,從淺入深,一步步掌握javascript中try...catch...finally的使用方法,感興趣的小伙伴們可以參考一下
    2015-12-12

最新評論

定安县| 贺兰县| 扎鲁特旗| 石泉县| 北川| 盐边县| 灵石县| 肥乡县| 新宁县| 布尔津县| 富平县| 建昌县| 蒙城县| 上饶县| 宜阳县| 淮安市| 仁布县| 铜川市| 万载县| 平阳县| 苗栗县| 望谟县| 新闻| 体育| 乡城县| 东平县| 通许县| 陈巴尔虎旗| 揭东县| 孟村| 玉环县| 武强县| 龙州县| 建始县| 乐至县| 普格县| 孝昌县| 平潭县| 枣阳市| 凤翔县| 清丰县|