webpack構建與loaders

loaders 定義

先了解一下webpack,webpack是一個用於針對js文件的構建工具,在被構建的js文件中,咱們可使用require語句和webpack loader,以下:javascript

var css = require("css!./file.css");
// => returns css code from file.css, resolves imports and url(...)

css代碼中的 @import與url()相似js的require()請求資源文件,css-loader 將會對 file.css文件中的 @import 和 url(...) 請求的資源進行解析處理,並轉交
給適合處理請求資源文件的file-loader 或 url-loader。詳情請看官網:https://www.npmjs.com/package/css-loadercss

基於上面示例,我對loader的定義是 轉譯器 html

loaders 特徵

一、loaders 支持鏈式,它們被應用在資源的的管道中,最後一個loader預期返回javascript;每一個laoder會返回任意格式的資源,並交給下一個loader進行處理.
二、loaders 支持同步和異步
三、loaders 運行在node.js環境中,能夠作任何可能的事情(使用node.js api)
四、loaders 接受查詢參數,能夠經過配置loader來使用
五、loaders 能夠在配置中經過正則匹配的文件擴展名來綁定
六、loaders 能夠經過npm發佈,安裝
七、除了在package.json文件配置 main入口(指定js文件)以外,通常的js模塊均可以做爲導出的loader
八、loaders 能夠訪問配置
九、plugins 能夠給予 loaders 更多的特徵
十、loaders 能夠處理額外的任意文件java

...node

若是你對一些loader示例感興趣,請查看loaders列表:http://webpack.github.io/docs/list-of-loaders.htmlwebpack

loaders 解析

loaders解析相似於模塊解析,一個loader模塊 就是一個執行於node.js環境中的函數;通常狀況下,你應該經過使用npm來git

管理你的loaders,可是在你的項目中,也可使用單個js模塊來做爲你的loader  github

一、引用loadersweb

loaders常常被命名爲XXX-loader,XXX 代指文件mime類型的名稱,如:json-loadernpm

咱們能夠經過全名(如:json-loader),也能夠經過簡寫名(如:json)來引用loaders 

二、loaders 安裝

若是loader存在於npm中,你能夠像下面代碼來安裝loader:

npm install xxx-loader --save

or

npm install xxx-loader --save-dev

三、用法

使用require語句指定loaders

咱們使用 感嘆號! 來將資源文件與loaders分開,使用多個loaders,應在全部的轉換規則(loader)以前加上感嘆號!,如:

require(!style!css!less!./src/css/index.less);

注:使用多個loaders是由右向左處理的,文件依次按less-loader,css-loader,style-loader處理

經過在webpack.config.js文件中配置指定loaders

{
    module: {
        loaders: [
            { test: /\.jade$/, loader: "jade" },
            // => "jade" loader is used for ".jade" files

            { test: /\.css$/, loader: "style!css" },
            // => "style" and "css" loader is used for ".css" files
            // Alternative syntax:
            { test: /\.css$/, loaders: ["style", "css"] },
        ]
    }
}

經過在命令行中配置使用

經過命令行你能夠將loaders綁定到擴展的文件進行轉換,如:

webpack --module-bind jade --module-bind 'css=style!css'

這裏使用jade-loader綁定到 擴展的jade文件進行轉換,使用style-loader,css-loader綁定到css文件進行轉換 

四、查詢字符串

Loader能夠經過查詢字符串(相似web頁面url中的查詢字符串)傳遞查詢參數,使用問號?將 loader與查詢字符串鏈接,loader後跟查詢字符串,如:

url-loader?mimetype=image/png 

or 

url-loader?{"mimetype"="image/png"} 

require寫法

require("url-loader?mimetype=image/png!./file.png");

webpack.config.js配置

{ test: /\.png$/, loader: "url-loader?mimetype=image/png" }

or

{
    test: /\.png$/,
    loader: "url-loader",
    query: { mimetype: "image/png" }
} 

命令行綁定

webpack --module-bind "png=url-loader?mimetype=image/png"

 

ps:轉載請註明 博客園:楊君華,文章有不足之處,望指正,多包涵。

相關文章
相關標籤/搜索