欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解webpack自定義loader初探

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

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

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

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

什么是loader

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

loader怎么用

在平時(shí)的開(kāi)發(fā)過(guò)程中,loader的使用也是非常常見(jiàn)的,我們可以在工程的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]'
   }
  }
 ]
}

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

如何自定義loader

有了上面的經(jīng)驗(yàn),我們?cè)撊绾巫远x一個(gè)loader呢?其實(shí)也是非常簡(jiǎn)單的。

首先我們創(chuàng)建一個(gè)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í)一個(gè)loader內(nèi)部就是一個(gè)node模塊,代碼的編寫(xiě)就和平時(shí)寫(xiě)node一樣就ok了。

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

假設(shè)我們還有2個(gè)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);

然后我們?cè)趙ebpack.config.js中加入我們自己的test-loader。

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

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

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

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

用于加載本地loader。

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

小結(jié)

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

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

相關(guān)文章

  • Promise掃盲貼

    Promise掃盲貼

    這篇文章主要介紹了Promise掃盲貼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Bootstrap 3 進(jìn)度條的實(shí)現(xiàn)

    Bootstrap 3 進(jìn)度條的實(shí)現(xiàn)

    這篇文章主要介紹了Bootstrap 3 進(jìn)度條的實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • javascript返回頂部的按鈕實(shí)現(xiàn)方法

    javascript返回頂部的按鈕實(shí)現(xiàn)方法

    這篇文章主要介紹了javascript返回頂部的按鈕實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-01-01
  • 跨域解決之JSONP和CORS的詳細(xì)介紹

    跨域解決之JSONP和CORS的詳細(xì)介紹

    跨域常見(jiàn)的兩種方式,分別是jsonp和cors,這篇文章主要介紹了跨域解決之JSONP和CORS的詳細(xì)介紹,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 基于JavaScript實(shí)現(xiàn)表單密碼的隱藏和顯示出來(lái)

    基于JavaScript實(shí)現(xiàn)表單密碼的隱藏和顯示出來(lái)

    為了網(wǎng)站的安全性,很多朋友都把密碼設(shè)的比較復(fù)雜,但是如何密碼不能明顯示,不知道輸?shù)氖菍?duì)是錯(cuò),為了安全起見(jiàn)可以把密碼顯示的,那么基于js代碼如何實(shí)現(xiàn)的呢?下面通過(guò)本文給大家介紹JavaScript實(shí)現(xiàn)表單密碼的隱藏和顯示,需要的朋友參考下
    2016-03-03
  • JS實(shí)現(xiàn)iframe編輯器光標(biāo)位置插入內(nèi)容的方法(兼容IE和Firefox)

    JS實(shí)現(xiàn)iframe編輯器光標(biāo)位置插入內(nèi)容的方法(兼容IE和Firefox)

    這篇文章主要介紹了JS實(shí)現(xiàn)iframe編輯器光標(biāo)位置插入內(nèi)容的方法,可實(shí)現(xiàn)文本與圖片的插入功能,并兼容IE和Firefox瀏覽器,需要的朋友可以參考下
    2016-06-06
  • js實(shí)現(xiàn)表格字段排序

    js實(shí)現(xiàn)表格字段排序

    本篇文章只要是對(duì)js表格字段排序的實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • js實(shí)現(xiàn)的簡(jiǎn)單radio背景顏色選擇器代碼

    js實(shí)現(xiàn)的簡(jiǎn)單radio背景顏色選擇器代碼

    這篇文章主要介紹了js實(shí)現(xiàn)的簡(jiǎn)單radio背景顏色選擇器代碼,利用鼠標(biāo)事件及頁(yè)面元素動(dòng)態(tài)操作實(shí)現(xiàn)頁(yè)面背景顏色的改變功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 深入淺析JavaScript中的RegExp對(duì)象

    深入淺析JavaScript中的RegExp對(duì)象

    正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法,有點(diǎn)像字符串的模板,常常用作按照“給定模式”匹配文本的工具。下面通過(guò)本文給大家分享js 中的regexp對(duì)象,需要的朋友參考下吧
    2017-09-09
  • 小程序中如何繪制思維導(dǎo)圖詳解

    小程序中如何繪制思維導(dǎo)圖詳解

    小程序相信大家應(yīng)該都很熟悉了,對(duì)于小程序的整個(gè)運(yùn)營(yíng)的方法,很多運(yùn)營(yíng)都比較關(guān)注,今天希望通過(guò)一個(gè)思維導(dǎo)圖,這篇文章主要給大家介紹了關(guān)于小程序中如何繪制思維導(dǎo)圖的相關(guān)資料,需要的朋友可以參考下
    2021-10-10

最新評(píng)論