能夠訪問 這裏 查看更多關於大數據平臺建設的原創文章。javascript
webpack
自己只能打包Javascript
文件,對於其餘資源例如css
,圖片,或者其餘的語法集好比jsx
,是沒有辦法加載的。 這就須要對應的loader
將資源轉化,加載進來。css
好比
你的工程中,樣式文件都使用了less
語法,是不能被瀏覽器識別的,這時候咱們就須要使用對應的loader
,來把less
語法轉換成瀏覽器能夠識別的css
語法。html
例如一個簡單的less
文件:
轉換前:vue
.demo { width: 200px; height: 100px; margin: auto; border: 1px solid; p { font-weight:bold; padding-left: 30px; } }
轉換後:java
.demo { width: 200px; height: 100px; margin: auto; border: 1px solid; } .demo p { font-weight: bold; padding-left: 30px; }
後面的案例也是拿這個less
文件來作演示的。node
先來看一下官方對loader
的一個解釋:react
A loader is a node module exporting a functionwebpack
翻譯過來:loader
就是一個export
出來的function
。web
既然是 node module
,因此若是你本身要自定義一個loader
,徹底能夠這麼寫:shell
module.exports = function (source) { // todo }
解釋
其中source
參數是這個loader
要處理的源文件的字符串
返回通過**"翻譯"**後的webpack
可以處理的有效模塊
若是你所寫的 loader
須要依賴其餘模塊的話,那麼一樣以 module
的寫法,將依賴放在文件的頂部引進來便可:
var fs = require("fs") module.exports = function (source) { // todo }
若是你但願將處理後的結果(不止一個)返回給下一個 loader
,那麼就須要調用 webpack
所提供的 API
。
因爲本篇咱們只講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
咱們必須使用 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
中。
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'] } ] } }
main.less
代碼以下:
.demo { width: 200px; height: 100px; margin: auto; border: 1px solid; p { font-weight:bold; padding-left: 30px; } }
在入口文件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);
在項目根目錄(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]
在瀏覽器裏刷新index.html
:
你會發現輸出的文字被一個黑框給圈了起來,而且加粗顯示,這就代表咱們的樣式文件已經生效了,並且從截圖當中也能夠看見樣式文件也插入到了html中。
![圖片描述][3]
css-loader : 解析css
文件中代碼
style-loader : 將css
模塊做爲樣式導出到DOM
中
less-loader : 加載和轉義less
文件
sass-loader : 加載和轉義sass/scss
文件
script-loader : 在全局上下文中執行一次javascript
文件,不須要解析
babel-loader : 加載ES6
代碼後使用Babel
轉義爲ES5
後瀏覽器才能解析
url-loader : 多數用於加載圖片資源,超過文件大小顯示則返回data URL
raw-loader : 加載文件原始內容(utf-8
格式)
vue-loader : 加載和轉義vue
組件
react-hot-loader : 動態刷新和轉義react
組件中修改的部分
歡迎你們關注個人微信公衆號閱讀更多原創文章: