webpack系列之loader的基本使用

歡迎你們訪問個人github blog查看更多文章javascript

webpack系列之loader及簡單的使用

一. loader有什麼用

webpack自己只能打包 Javascript文件,對於其餘資源例如 css,圖片,或者其餘的語法集好比 jsx,是沒有辦法加載的。 這就須要對應的 loader將資源轉化,加載進來。

好比
你的工程中,樣式文件都使用了less語法,是不能被瀏覽器識別的,這時候咱們就須要使用對應的loader,來把less語法轉換成瀏覽器能夠識別的css語法。php

例如一個簡單的less文件:
轉換前:css

.demo {
    width: 200px;
    height: 100px;
    margin: auto;
    border: 1px solid;
    p {
        font-weight:bold;
        padding-left: 30px;
    }
}

轉換後:html

.demo {
    width: 200px;
    height: 100px;
    margin: auto;
    border: 1px solid;
}

.demo p {
    font-weight: bold;
    padding-left: 30px;
}

後面的案例也是拿這個less文件來作演示的。vue

二. loader是什麼

先來看一下官方對loader的一個解釋:java

A loader is a node module exporting a function

翻譯過來:loader就是一個export出來的functionnode


既然是 node module,因此若是你本身要自定義一個loader,徹底能夠這麼寫:react

module.exports = function (source) {
   // todo
}

解釋webpack

  • 其中source參數是這個loader 要處理的源文件的字符串
  • 返回通過"翻譯"後的webpack 可以處理的有效模塊

若是你所寫的 loader 須要依賴其餘模塊的話,那麼一樣以 module 的寫法,將依賴放在文件的頂部引進來便可:git

var fs = require("fs")
module.exports = function (source) {
   // todo
}

若是你但願將處理後的結果(不止一個)返回給下一個 loader,那麼就須要調用 webpack 所提供的 API

因爲本篇咱們只講loader的基本使用,故這裏再也不深刻講解,有興趣的能夠點擊這裏學習。

三. 使用loader

在看了前面的介紹後,接下來給你們介紹一下怎麼使用loader

使用loader的方式

有三種使用方式,以下:

  • 配置(推薦):在 webpack.config.js 文件中指定 loader
  • 內聯:在每一個 import 語句中顯式指定 loader
  • CLI:在 shell 命令中指定它們。

以上三種方式,咱們在開發過程當中推薦使用第一種方式:

好比你想使用webpack來打包樣式文件,則能夠在webpack.config.js裏添加以下代碼:

module: {
       rules: [
           {
               test: /\.css$/,  // 正則匹配全部.css後綴的樣式文件
               use: ['style-loader', 'css-loader'] // 使用這兩個loader來加載樣式文件
           }
       ]
   }

module.rules 容許你在 webpack 配置中指定多個 loader。 這是展現 loader 的一種簡明方式,而且有助於使代碼變得簡潔。

上述rules的做用:
webpack在打包過程當中,凡是遇到後綴爲css的文件,就會使用style-loadercss-loader去加載這個文件。

四.案例

在對loader有了一個大概的認識後,來作一個小案例,需求以下:

將上一篇( webpack系列之基本概念和使用)的 demo輸出文字居中並用黑框圈起來

目錄結構

代碼目錄結構以下:
├── node_modules
├── app
│ ├── bundle.js
│ └── index.html
├── package-lock.json
├── package.json
├── src
│ ├── index.js
│ └── main.less
└── webpack.config.js

1. 安裝loader

咱們必須使用 loader 告訴 webpack 加載 less 文件,爲此,須要首先安裝相對應的 loader

npm install --save-dev less
npm install --save-dev less-loader
npm install --save-dev css-loader
npm install --save-dev style-loader

這些loader的做用以下:

  • 安裝less-loader後能夠在js中使用require的方式來加載less文件了;
  • 安裝css-loader後能夠在js中加載css文件;
  • 安裝style-loader的目的是爲了讓加載的css做爲style標籤內容插入到html中。

2. 配置loader

webpack.config.js代碼以下:

module.exports = {
    devtool: 'eval-source-map',
    entry:  __dirname + "/src/index.js",  //入口文件
    output: {
        path: __dirname + "/app",  //打包後的文件存放的地方
        filename: "bundle.js" //打包後輸出文件的文件名
    },
    module: {
        rules: [
            {
                test: /\.less$/,
                use: ['style-loader','css-loader', 'less-loader']
            }
        ]
    }
}

3.新建樣式文件

main.less代碼以下:

.demo {
    width: 200px;
    height: 100px;
    margin: auto;
    border: 1px solid;
    p {
        font-weight:bold;
        padding-left: 30px;
    }
}

4. 修改入口文件

在入口文件index.js裏引入咱們的樣式文件

require ('./main.less');
var element = document.createElement('div');
element.className = 'demo';
var p = document.createElement('p');
p.innerText = 'webpack系列之loader的基本使用!';
element.appendChild(p);
document.body.appendChild(element);

5.打包

在項目根目錄(webpack-demo)下執行打包命令:

➜  webpack-demo webpack

打包成功,會輸出以下:

Hash: 1bb51c6a348686a223db
Version: webpack 3.10.0
Time: 1077ms
    Asset     Size  Chunks             Chunk Names
bundle.js  53.8 kB       0  [emitted]  main
   [0] ./src/index.js 273 bytes {0} [built]
   [2] ./src/main.less 1.19 kB {0} [built]
   [2] ./node_modules/css-loader!./node_modules/less-loader/dist/cjs.js!./src/main.less 304 bytes {0} [built]

6. 查看結果

在瀏覽器裏刷新index.html
你會發現輸出的文字被一個黑框給圈了起來,而且加粗顯示,這就代表咱們的樣式文件已經生效了,並且從截圖當中也能夠看見樣式文件也插入到了html中。
圖片描述

五.經常使用loader

樣式

  1. css-loader : 解析css文件中代碼
  2. style-loader : 將css模塊做爲樣式導出到DOM
  3. less-loader : 加載和轉義less文件
  4. sass-loader : 加載和轉義sass/scss文件

腳本轉換編譯

  1. script-loader : 在全局上下文中執行一次javascript文件,不須要解析
  2. babel-loader : 加載ES6 代碼後使用Babel轉義爲ES5後瀏覽器才能解析

Files文件

  1. url-loader : 多數用於加載圖片資源,超過文件大小顯示則返回data URL
  2. raw-loader : 加載文件原始內容(utf-8格式)

加載框架

  1. vue-loader : 加載和轉義vue組件
  2. react-hot-loader : 動態刷新和轉義react組件中修改的部分

六. 總結

本篇向你們介紹了loader有什麼用,什麼是loader,以及怎麼使用loader這些基礎知識,若是有興趣想了解得更深刻一些,能夠看看怎麼編寫一個loader
下一篇會給你們介紹:webpack系列之Plugin及簡單的使用

相關文章
相關標籤/搜索