webpack3--loader全解析

首先亮出webpack官方網(wǎng)站,webpack能干什么抹腿?官網(wǎng)給出的答案就是岛请,一句話,讓一切變得簡(jiǎn)單警绩!

各式各樣的loader層出不窮崇败,讓我們?cè)跇?gòu)建時(shí)不知所措,于此肩祥,總結(jié)下loader的全解析后室。

概念

loader,顧名思義混狠,加載器岸霹,英文的解釋如下:
Loaders are transformations that are applied on the source code of a module. They allow you to pre-process files as you import or “l(fā)oad” them. Thus, loaders are kind of like “tasks” in other build tools, and provide a powerful way to handle front-end build steps. Loaders can transform files from a different language (like TypeScript) to JavaScript, or inline images as data URLs. Loaders even allow you to do things like import CSS files directly from your JavaScript modules!
中文翻譯過(guò)來(lái)就是:
loader 用于對(duì)模塊的源代碼進(jìn)行轉(zhuǎn)換。loader 可以使你在 import 或“加載”模塊時(shí)預(yù)處理文件将饺。因此贡避,loader 類(lèi)似于其他構(gòu)建工具中“任務(wù)(task)”痛黎,并提供了處理前端構(gòu)建步驟的強(qiáng)大方法。loader 可以將文件從不同的語(yǔ)言(如 TypeScript)轉(zhuǎn)換為 JavaScript,或?qū)?nèi)聯(lián)圖像轉(zhuǎn)換為 data URL。loader 甚至允許你直接在 JavaScript 模塊中 import CSS文件蹬碧!
從中,可以看出loader的強(qiáng)大作用琉历,分析下:

  1. 轉(zhuǎn)換的作用。開(kāi)發(fā)所用到的都轉(zhuǎn)換成網(wǎng)頁(yè)加載所必備的html+css+js+img等要求格式的文件水醋。
  2. 轉(zhuǎn)換對(duì)象是源代碼旗笔。loader只對(duì)源代碼轉(zhuǎn)換,至于其他的功能拄踪,plugins就來(lái)接收它做不到的地方蝇恶。

總結(jié)一句話:loader, 加載的機(jī)器,形象的比喻下惶桐,就像一個(gè)豆?jié){機(jī)撮弧,放上你的原料,它就開(kāi)始認(rèn)真的工作了姚糊!

loader的三種使用方式

在你的應(yīng)用程序中贿衍,有三種使用 loader 的方式:

  • 配置(推薦):在 webpack.config.js 文件中指定 loader。
    module.rules 允許你在 webpack 配置中指定多個(gè) loader救恨。 這是展示 loader 的一種簡(jiǎn)明方式贸辈,并且有助于使代碼變得簡(jiǎn)潔。同時(shí)讓你對(duì)各個(gè) loader 有個(gè)全局概覽
 module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  }
  • 內(nèi)聯(lián):在每個(gè) import 語(yǔ)句中顯式指定 loader肠槽。
    可以在 import 語(yǔ)句或任何等效于 "import" 的方式中指定 loader擎淤。使用 ! 將資源中的 loader 分開(kāi)。分開(kāi)的每個(gè)部分都相對(duì)于當(dāng)前目錄解析秸仙。
import Styles from 'style-loader!css-loader?modules!./styles.css';

通過(guò)前置所有規(guī)則及使用 !嘴拢,可以對(duì)應(yīng)覆蓋到配置中的任意 loader。

  • CLI:在 shell 命令中指定它們寂纪。
    你也可以通過(guò) CLI 使用 loader:
webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'

這會(huì)對(duì) .jade 文件使用 jade-loader席吴,對(duì) .css 文件使用 style-loader 和 css-loader。

Loader 特性

  • 支持鏈?zhǔn)絺鬟f
  • 可以是同步的弊攘,也可以是異步的
  • 運(yùn)行在 Node.js 中抢腐,并且能夠執(zhí)行任何可能的操作
  • 接收查詢(xún)參數(shù)姑曙。用于對(duì) loader 傳遞配置
  • 也能夠使用 options 對(duì)象進(jìn)行配置
  • 除了使用 package.json 常見(jiàn)的 main 屬性襟交,還可以將普通的 npm 模塊導(dǎo)出為 loader,做法是在 package.json 里定義一個(gè) loader 字段
  • 插件(plugin)可以為 loader 帶來(lái)更多特性
  • loader 能夠產(chǎn)生額外的任意文件
    loader 通過(guò)(loader)預(yù)處理函數(shù)伤靠,為 JavaScript 生態(tài)系統(tǒng)提供了更多能力捣域。用戶現(xiàn)在可以更加靈活地引入細(xì)粒度邏輯啼染,例如壓縮、打包焕梅、語(yǔ)言翻譯等等

解析 Loader

loader 遵循標(biāo)準(zhǔn)的模塊解析迹鹅。多數(shù)情況下,loader 將從模塊路徑(通常將模塊路徑認(rèn)為是 npm install, node_modules)解析贞言。

loader 模塊需要導(dǎo)出為一個(gè)函數(shù)斜棚,并且使用 Node.js 兼容的js編寫(xiě)。通常使用 npm 進(jìn)行管理该窗,但是也可以將自定義 loader 作為應(yīng)用程序中的文件弟蚀。按照約定,loader 通常被命名為 xxx-loader(例如 json-loader)酗失。

常用的loader

webpack 可以使用 loader 來(lái)預(yù)處理文件义钉。這允許你打包除js 之外的任何靜態(tài)資源。你可以使用 Node.js 來(lái)很簡(jiǎn)單地編寫(xiě)自己的 loader规肴。

  • babel-loader
    This package allows transpiling JavaScript files using Babel and webpack.
    加載 ES2015+ 代碼捶闸,然后使用 Babel 轉(zhuǎn)譯為 ES5
    安裝:
    npm install --save-dev babel-loader babel-core babel-preset-env webpack
    使用:
{
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader'
}
  • style-loader
    Adds CSS to the DOM by injecting a <style> tag
    將模塊的導(dǎo)出作為樣式添加到 DOM 中
    安裝:
    npm install style-loader --save-dev
    建議要與css-loader一起使用
    使用:
{
    test: /\.css$/,
    use:  [
    'style-loader',
    'css-loader'
  ]
}
  • css-loader
    解析 CSS 文件后,使用 import 加載拖刃,并且返回 CSS 代碼
    安裝:
    npm install css-loader --save-dev
    使用:
{
    test: /\.css$/,
    use: [ 'style-loader', 'css-loader' ]
}
  • less-loader
    加載和轉(zhuǎn)譯 LESS 文件
    安裝:
    npm install --save-dev less-loader less
    使用:
{
    test: /\.less$/,
    exclude: /node_modules/,
    use: ExtractTextPlugin.extract(['css-loader', 'less-loader'])
}
  • url-loader
    Loads files as base64 encoded URL
    處理圖片類(lèi)文件删壮,但如果文件小于限制,可以返回 data URL
    安裝:
    npm install --save-dev url-loader
    使用:
{
    test: /\.(jpg|jpeg|png|gif)$/,
    loader: 'url-loader',
    options: {
        limit: 8192
    }
}
  • file-loader
    Instructs webpack to emit the required object as file and to return its public URL
    處理font/svg等序调,將文件發(fā)送到輸出文件夾醉锅,并返回(相對(duì))URL
    安裝:
    npm install file-loader --save-dev
    使用:
{
    test: /\.(woff|woff2|svg|eot|ttf)$/,
    use: 'file-loader'
}
  • vue-loader
    加載和轉(zhuǎn)譯 Vue 組件
    安裝:
    npm install --save-dev vue-loader vue vue-template-compiler
    使用:
{
    test: /\.vue$/,
    loader: 'vue-loader',
    options: {
        loaders: {
            less: ExtractTextPlugin.extract({
                use: ['css-loader', 'less-loader'],
                fallback: 'vue-style-loader'
            })
        }
    }
}
  • postcss-loader
    使用 PostCSS 加載和轉(zhuǎn)譯 CSS/SSS 文件
    安裝:
    npm i -D postcss-loader
    使用:
    在webpack.config.js配置
{
  test: /\.sss$/,
  use: [
    ...,
    { loader: 'postcss-loader', options: { parser: 'sugarss' } }
  ]
}

至此,有關(guān)loader中所用的參數(shù)請(qǐng)移步官網(wǎng)查詢(xún)解決发绢,謝謝查閱硬耍!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市边酒,隨后出現(xiàn)的幾起案子经柴,更是在濱河造成了極大的恐慌,老刑警劉巖墩朦,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坯认,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡氓涣,警方通過(guò)查閱死者的電腦和手機(jī)牛哺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)劳吠,“玉大人引润,你說(shuō)我怎么就攤上這事⊙魍妫” “怎么了淳附?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵议慰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奴曙,道長(zhǎng)别凹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任洽糟,我火速辦了婚禮炉菲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坤溃。我一直安慰自己颁督,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布浇雹。 她就那樣靜靜地躺著沉御,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昭灵。 梳的紋絲不亂的頭發(fā)上吠裆,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音烂完,去河邊找鬼试疙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抠蚣,可吹牛的內(nèi)容都是我干的祝旷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嘶窄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怀跛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起柄冲,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吻谋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后现横,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體漓拾,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年戒祠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骇两。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姜盈,死狀恐怖低千,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贩据,我是刑警寧澤栋操,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站饱亮,受9級(jí)特大地震影響矾芙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜近上,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一剔宪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壹无,春花似錦葱绒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岖是,卻和暖如春帮毁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豺撑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工烈疚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聪轿。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓爷肝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親陆错。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灯抛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容