webpack系列之loader的基本使用
可以訪問 這裡 查看更多關於大數據平台建設的原創文章。
webpack系列之loader及簡單的使用
一. loader有什麼用
webpack
本身只能打包Javascript
文件,對於其他資源例如css
,圖片,或者其他的語法集比如jsx
,是沒有辦法載入的。 這就需要對應的loader
將資源轉化,載入進來。
比如
你的工程中,樣式文件都使用了less
語法,是不能被瀏覽器識別的,這時候我們就需要使用對應的loader
,來把less
語法轉換成瀏覽器可以識別的css
語法。
例如一個簡單的less
文件:
轉換前:
.demo {
width: 200px;
height: 100px;
margin: auto;
border: 1px solid;
p {
font-weight:bold;
padding-left: 30px;
}
}
轉換後:
.demo {
width: 200px;
height: 100px;
margin: auto;
border: 1px solid;
}
.demo p {
font-weight: bold;
padding-left: 30px;
}
後面的案例也是拿這個less
文件來做演示的。
二. loader是什麼
先來看一下官方對loader
的一個解釋:
A loader is a node module exporting a function
翻譯過來:loader
就是一個export
出來的function
。
既然是 node module
,所以如果你自己要自定義一個loader
,完全可以這麼寫:
module.exports = function (source) {
// todo
}
解釋
-
其中
source
參數是這個loader
要處理的源文件的字元串 -
返回經過**”翻譯”**後的
webpack
能夠處理的有效模組
如果你所寫的 loader
需要依賴其他模組的話,那麼同樣以 module
的寫法,將依賴放在文件的頂部引進來即可:
var fs = require("fs")
module.exports = function (source) {
// todo
}
如果你希望將處理後的結果(不止一個)返回給下一個 loader
,那麼就需要調用 webpack
所提供的 API
。
由於本篇我們只講loader
的基本使用,故這裡不再深入講解,有興趣的可以點擊這裡學習。
三. 使用loader
在看了前面的介紹後,接下來給大家介紹一下怎麼使用loader
。
使用loader的方式
有三種使用方式,如下:
以上三種方式,我們在開發過程中推薦使用第一種方式:
比如你想使用webpack
來打包樣式文件,則可以在webpack.config.js
里添加如下程式碼:
module: {
rules: [
{
test: /\.css$/, // 正則匹配所有.css後綴的樣式文件
use: ['style-loader', 'css-loader'] // 使用這兩個loader來載入樣式文件
}
]
}
module.rules
允許你在 webpack
配置中指定多個 loader
。 這是展示 loader
的一種簡明方式,並且有助於使程式碼變得簡潔。
上述rules的作用:webpack
在打包過程中,凡是遇到後綴為css
的文件,就會使用style-loader
和css-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中。
![圖片描述][3]
五.常用loader
樣式
-
css-loader : 解析
css
文件中程式碼 -
style-loader : 將
css
模組作為樣式導出到DOM
中 -
less-loader : 載入和轉義
less
文件 -
sass-loader : 載入和轉義
sass/scss
文件
腳本轉換編譯
-
script-loader : 在全局上下文中執行一次
javascript
文件,不需要解析 -
babel-loader : 載入
ES6
程式碼後使用Babel
轉義為ES5
後瀏覽器才能解析
Files文件
-
url-loader : 多數用於載入圖片資源,超過文件大小顯示則返回
data URL
-
raw-loader : 載入文件原始內容
(utf-8
格式)
載入框架
-
vue-loader : 載入和轉義
vue
組件 -
react-hot-loader : 動態刷新和轉義
react
組件中修改的部分