webpack中處理圖片

參考

file-loader
url-loader
webpac3.x成神之路

file-loader & url-loader

  • file-loader
    解決CSS等中引入圖片的路徑問題;(解決通過url,import/require()等引入圖片的問題)

file-loader可以解析項目中的url引入(不僅限于css),根據(jù)我們的配置饭耳,將圖片拷貝到相應(yīng)的路徑,再根據(jù)我們的配置术奖,修改打包后文件引用的路徑,使之指向正確的文件。

  • url-loader
    當(dāng)圖片小于設(shè)置的limit參數(shù)值時效床,url-loader將圖片進(jìn)行base64編碼(當(dāng)項目中有很多圖片身堡,通過url-loader進(jìn)行base64編碼后會減少http請求數(shù)量邓尤,提高性能),大于limit參數(shù)值贴谎,則使用file-loader拷貝圖片并輸出到編譯目錄中汞扎;

配置

1.創(chuàng)建本地項目webpack-demo

mkdir webpack-demo
cd webpack-demo

2.在webpack-demo的根目錄下創(chuàng)建package.json文件

npm init -y
  1. 安裝webpack依賴包
npm i webpack webpack-cli webpack-dev-server --save-dev

模塊說明:

  • webpack
    webpack核心

  • webpack-cli
    webpack的腳手架(啟動器)

  • webpack-dev-server
    開發(fā)環(huán)境下用于實時加載依賴

4.修改package.json文件的scripts屬性值,進(jìn)行打包資源的配置

"scripts": {
    "dev": "webpack-dev-server --open --mode development",
    "build": "webpack --mode production"
  },

5.安裝相關(guān)的loader

npm install file-loader url-loader --save-dev

6.在webpack.config.js中配置

const path = require('path');
// 顯示進(jìn)程的完成進(jìn)度
var ProgressBarPlugin = require('progress-bar-webpack-plugin');
// 設(shè)置進(jìn)度字體顏色
const chalk = require('chalk');
// 輸出html
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 分離css代碼
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'development',
  entry: {
    app: './src/app.js'
  },
  output: {
    path: path.resolve(__dirname, '../dist'),
    filename: '[name].[hash].js'
  },
  devServer: {
    baseContent: path.resolve(__dirname, '../dist'),// 靜態(tài)資源根目錄
    host: 'localhost',//服務(wù)器IP地址,默認(rèn)是localhsot
    port: 5527,//服務(wù)監(jiān)聽的端口號
    compress: true,// 是否開啟服務(wù)端壓縮(gzip)
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        use: [
          {loader: 'babel-loader'}
        ]
      },
      {
        test: /\.css$/,
        use: [
          // {
          //   loader: 'style-loader',
          //   options: {
          //     singleton: true,// 單獨的style
          //   }
          // },
          MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader'
          },
          {
            loader: 'postcss-loader'
          }
        ]
      },
      {
        test: /\.less$/,
        use: [
          // {
          //   loader: 'style-loader'
          // },
          MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader'
          },
          {
            loader: 'less-loader'
          }
        ]
      },
      {
        test: /\.scss$/,
        use: [
          // {
          //   loader: 'style-loader'
          // },
          MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader'
          },
          {
            loader: 'postcss-loader'
          },
          {
            loader: 'sass-loader'
          }
        ]
      },
      {
        test: /\.(jpg|png|jpe?g|gif|svg)(\?.*)?$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              outputPath: 'images/',// 輸出目錄
              name(file) {// 輸出名稱
                if(process.env.NODE_ENV === 'development') {
                  return '[path][name].[ext]'
                }
                return '[hansh].[ext]'
              },
              limit: 5*1024
            }
          }
        ]
      },
      {
        test: /\.(eot|woff2?|ttf|svg)$/,
        use: [{
          loader: 'url-loader',
          options: {
            name: '[name]-[hash:5].min.[ext]',
            limit: 5000,
            publicPath: '../static/fonts/',
            outputPath: 'fonts/'
          }
        }]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'Webpack Study Demo',
      filename: 'index.html',//指定生成的HTML文件名
      template: path.join(__dirname, '../public/index.html') // 指定模板路徑
    }),
    new ProgressBarPlugin({
      format: chalk.green('Progressing') + '[:bar]' + chalk.green(':percent') + '(:elapsed seconds)',
      clear: false
    }),
    new MiniCssExtractPlugin({
      filename: '[name].css',// 分離后的文件名
      chunkFilename: '[id].css',//
      ignoreOrder: false
    })
  ]
}

7.運行命令

npm run build

8.結(jié)果展示


9.運行命令

npm run dev

10.結(jié)果展示


  • 注意
    使用url-loader通常用于處理css中的圖片;

處理html中的圖片可以使用html-withimg-loader

html-withimg-loader處理html中的圖片

1.安裝

npm install html-withimg-loader --save

2.在webpack.config.js中進(jìn)行配置

{
       test: /\.(htm?l)/i,
       use: {loader: 'html-withimg-loader'}
},

3.執(zhí)行命令

npm run dev

4.執(zhí)行命令

npm run dev

5.結(jié)果展示


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擅这,一起剝皮案震驚了整個濱河市澈魄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仲翎,老刑警劉巖痹扇,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谭确,居然都是意外死亡帘营,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門逐哈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芬迄,“玉大人,你說我怎么就攤上這事昂秃≠魇幔” “怎么了杜窄?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長算途。 經(jīng)常有香客問我塞耕,道長,這世上最難降的妖魔是什么嘴瓤? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任扫外,我火速辦了婚禮,結(jié)果婚禮上廓脆,老公的妹妹穿的比我還像新娘筛谚。我一直安慰自己,他們只是感情好停忿,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布驾讲。 她就那樣靜靜地躺著,像睡著了一般席赂。 火紅的嫁衣襯著肌膚如雪吮铭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天颅停,我揣著相機與錄音谓晌,去河邊找鬼。 笑死便监,一個胖子當(dāng)著我的面吹牛扎谎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烧董,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胧奔!你這毒婦竟也來了逊移?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龙填,失蹤者是張志新(化名)和其女友劉穎胳泉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岩遗,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡扇商,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宿礁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片案铺。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梆靖,靈堂內(nèi)的尸體忽然破棺而出控汉,到底是詐尸還是另有隱情笔诵,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布姑子,位于F島的核電站乎婿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏街佑。R本人自食惡果不足惜谢翎,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沐旨。 院中可真熱鬧岳服,春花似錦、人聲如沸希俩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颜武。三九已至璃搜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳞上,已是汗流浹背这吻。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篙议,地道東北人唾糯。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像鬼贱,于是被迫代替她去往敵國和親移怯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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

  • 目錄第1章 webpack簡介 11.1 webpack是什么这难? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,737評論 0 1
  • 接著上一塊http://www.reibang.com/p/dd135bdb9065 模塊:CSS文件打包 We...
    感覺不錯哦閱讀 502評論 0 2
  • Webpack學(xué)習(xí)總結(jié) 此文只是自己學(xué)習(xí)webpack的一些總結(jié)舟误,方便自己查閱,閱讀不變姻乓,非常抱歉G兑纭! 下載安裝:...
    Lxs_597閱讀 950評論 0 0
  • webpack 是什么蹋岩? 本質(zhì)上赖草,webpack 是一個現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器(mo...
    IT老馬閱讀 3,321評論 2 27
  • 每個女人都有一個腰帶自己不解別人也不敢硬解我把最癡的一顆心掖在那里你不知道我不怪你 每個腰帶都掖著若干顆心或真或假...
    楊烏那希閱讀 162評論 0 0