webpcak4學(xué)習(xí)筆記

初始化項(xiàng)目

npm init -y
npm install webpack webpack-cli -D

在創(chuàng)建src目錄和dist目錄

配置文件webpack.config.js

基本配置

const path=require('path');
module.exports={
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname,'dist'),
        filename:'bundle.js' // 打包后的文件名也可配置成動(dòng)態(tài)的 '[name].[hash:8].js',hash長(zhǎng)度可自由設(shè)置最長(zhǎng)為20位
    },
    module: {},
    plugins: [],
    devServer: {}
}

entry:配置入口文件的地址
output:配置出口文件的地址
module:配置模塊,主要用來(lái)配置不同文件的加載器
plugins:配置插件
devServer:配置開(kāi)發(fā)服務(wù)器

package.json文件配置

"build": "webpack --mode development" // 生產(chǎn)環(huán)境(production),開(kāi)發(fā)環(huán)境(development)

編譯css文件

npm install stlye-loader css-loader -D

配置文件webpack.config.js

module: {
      rules: [
        {
          test:/\.css$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          loader:["style-loader","css-loader"] // 使用use和loader都可以loader
        }
      ]
    },

配置devServer便于開(kāi)發(fā)

npm install webpack-dev-server -D
    // 配置靜態(tài)資源服務(wù)器硬萍,可以用來(lái)預(yù)覽打包后的項(xiàng)目
    devServer: {
      contentBase: './dist', // 靜態(tài)文件根目錄
      host: 'localhost', // 配置host私杜,也可寫(xiě)成IP的形式
      port: 8080, // 配置端口號(hào)
      compress: true, //是否啟用gzip壓縮
    }

package.json文件配置 (--oepn,自動(dòng)打開(kāi)瀏覽器預(yù)覽)

"dev": "webpack-dev-server --open --mode development" 

安裝html-webpack-plugin

npm install html-webpack-plugin -D

在配置文件中引入html-webpack-plugin

const HtmlWebpackPlugin = require('html-webpack-plugin')

在plugins中配置

 plugins: [
      // 此插件可以自動(dòng)生成HTML文件
      new HtmlWebpackPlugin({
        minify:{ // 是否進(jìn)行壓縮
          removeAttributeQuotes: true, //移除屬性的引號(hào)
        },
        template: './src/index.html', // html模板
        filename: 'index.html', // 生成的HTML文件名
        hash: true,// 會(huì)在引入的 js 中加入hash避免緩存
        title: '歡迎使用webpack' //生成的HTML文件插入的 title內(nèi)容
      })
    ],

配置多入口,將entry配置成數(shù)組形式或?qū)ο笮问?/h3>
 entry: ['./src/index.js','./src/base.js'],
 entry: {
index: './src/index.js',
base: './src/base.js'
},

清除多次打包產(chǎn)生的重復(fù)文件

npm i clean-webpack-plugin -D
const CleanWebpackPlugin = require('clean-webpack-plugin')
new CleanWebpackPlugin([path.join(__dirname,'dist')]) // 先將dist清空再編譯

多頁(yè)面可以配置多個(gè)HtmlWebpackPlugin

entry: {
index: './src/index.js',
base: './src/base.js'
},
      new HtmlWebpackPlugin({
        minify:{ // 是否進(jìn)行壓縮
          removeAttributeQuotes: true, //移除屬性的引號(hào)
        },
        chunks:['index'],//在產(chǎn)出的html文件里引入哪些代碼塊,分離js文件
        template: './src/index.html', // html模板
        filename: 'index.html', // 生成的HTML文件名
        hash: true,// 會(huì)在引入的 js 中加入hash避免緩存
        title: '歡迎使用webpack' //生成的HTML文件插入的 title內(nèi)容
      }),
      new HtmlWebpackPlugin({
        minify:{ // 是否進(jìn)行壓縮
          removeAttributeQuotes: true, //移除屬性的引號(hào)
        },
        chunks:['base'],//在產(chǎn)出的html文件里引入哪些代碼塊 
        template: './src/index.html', // html模板
        filename: 'base.html', // 生成的HTML文件名
        hash: true,// 會(huì)在引入的 js 中加入hash避免緩存
        title: '歡迎使用webpack' //生成的HTML文件插入的 title內(nèi)容
      }),

抽離公共js文件

entry: {
      index: './src/index.js',
      base: './src/base.js',
      vendor: './src/common.js' // 抽離公共js文件
    },
chunks:['index','vendor'],//在產(chǎn)出的html文件里引入哪些代碼塊,分離js文件,在各自的代碼塊加入公共js

webpack解析圖片模塊

npm i file-loader url-loader -D
{
          // file-loader(將文件轉(zhuǎn)化為二進(jìn)制數(shù)據(jù))是解析圖片地址烂斋,把圖片從原位置拷貝到目標(biāo)位置并且修改原原引用地址
          test:/\.(png|jpg|jpeg|gif|svg|bmp)$/,
          use:{
            loader: "file-loader",
            outputPath: '/images' // 指定打包圖片的輸出目錄
          },
        },

解析img標(biāo)簽引入的圖片

npm i html-withimg-loader -D
{
   // file-loader(將文件轉(zhuǎn)化為二進(jìn)制數(shù)據(jù))是解析圖片地址袭灯,把圖片從原位置拷貝到目標(biāo)位置并且修改原原引用地址
      test:/\.(html|htm)$/,
      use:"html-withimg-loader",
}

將小尺寸圖片轉(zhuǎn)為base64格式

{
          // file-loader(將文件轉(zhuǎn)化為二進(jìn)制數(shù)據(jù))是解析圖片地址,把圖片從原位置拷貝到目標(biāo)位置并且修改原原引用地址
          // url-loader 可以將比較小的文件轉(zhuǎn)換為base64格式內(nèi)嵌到HTML 中減少HTTP請(qǐng)求,是file-loader 的增強(qiáng)版包含了file-loader的功能
          test:/\.(png|jpg|jpeg|gif|svg|bmp)$/,
          use:[
            // {
            //   loader: "file-loader",
            //   options:{
            //     outputPath: 'images/' // 指定打包圖片的輸出目錄
            //   }
            // },
            {
              loader: "url-loader",
              options:{
                limit: 10*1024,
                outputPath: 'images/'
              }
            },
          ]
        },

解析less和scss(需分開(kāi)安裝酣溃,一起安裝容易報(bào)錯(cuò))

npm i less less-loader -D
npm i node-sass sass-loader -D

webpack配置

      {
          test:/\.less$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          loader:["style-loader","css-loader","less-loader"]
        },
        {
          test:/\.scss$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          loader:["style-loader","css-loader","scss-loader"]
        },

抽離公共css代碼

npm install --save-dev mini-css-extract-plugin
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 引入這個(gè)插件
const devMode = process.env.NODE_ENV !== 'production'
plugins: [
  
]

修改loader配置
原配置

      {
          test:/\.css$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          loader:["style-loader","css-loader"]
        },
        {
          test:/\.scss$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          loader:["style-loader","css-loader","sass-loader"]
        },

修改后

        {
          test:/\.css$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          //這個(gè)插件先用css-loader 處理一下css文件
          loader:cssExtract.extract({
            use:["css-loader"]
          })
        },
        {
          test:/\.(sa|sc|c)ss$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          use: [
            devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
            'css-loader',
            'postcss-loader',
            'sass-loader',
          ],
        },

css自動(dòng)添加瀏覽器前綴

npm i postcss-loader autoprefixer -D
    {
          test:/\.css$/,
          // css-loader 用來(lái)解析 css 文件中的url路徑
          // style-loader 可以把css文件變成 style 標(biāo)簽插入head中
          // 多個(gè)loader 是有順序要求的,從右往左轉(zhuǎn)換
          //這個(gè)插件先用css-loader 處理一下css文件
          // use: [ MiniCssExtractPlugin.loader,"css-loader"]
          use: [ "style-loader","css-loader","postcss-loader"]
        },

src目錄下新建postcss.config.js配置文件

module.exports ={
  plugins:[require('autoprefixer')]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捆毫,一起剝皮案震驚了整個(gè)濱河市棚点,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捷雕,老刑警劉巖椒丧,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異救巷,居然都是意外死亡壶熏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)浦译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棒假,“玉大人溯职,你說(shuō)我怎么就攤上這事∶毖疲” “怎么了谜酒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祝拯。 經(jīng)常有香客問(wèn)我甚带,道長(zhǎng),這世上最難降的妖魔是什么佳头? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任鹰贵,我火速辦了婚禮,結(jié)果婚禮上康嘉,老公的妹妹穿的比我還像新娘碉输。我一直安慰自己,他們只是感情好亭珍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布敷钾。 她就那樣靜靜地躺著,像睡著了一般肄梨。 火紅的嫁衣襯著肌膚如雪阻荒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天众羡,我揣著相機(jī)與錄音侨赡,去河邊找鬼。 笑死粱侣,一個(gè)胖子當(dāng)著我的面吹牛羊壹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播齐婴,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼油猫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了柠偶?” 一聲冷哼從身側(cè)響起情妖,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诱担,沒(méi)想到半個(gè)月后鲫售,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡该肴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年情竹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秦效,死狀恐怖雏蛮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阱州,我是刑警寧澤挑秉,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站苔货,受9級(jí)特大地震影響犀概,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夜惭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一姻灶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诈茧,春花似錦产喉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸥昏,卻和暖如春塞俱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吏垮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工障涯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惫皱。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓像樊,卻偏偏與公主長(zhǎng)得像尤莺,于是被迫代替她去往敵國(guó)和親旅敷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 寫(xiě)在前面的話 閱讀本文之前颤霎,先看下面這個(gè)webpack的配置文件媳谁,如果每一項(xiàng)你都懂,那本文能帶給你的收獲也許就比較...
    不忘初心_9a16閱讀 3,232評(píng)論 0 17
  • GitChat技術(shù)雜談 前言 本文較長(zhǎng)友酱,為了節(jié)省你的閱讀時(shí)間晴音,在文前列寫(xiě)作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,674評(píng)論 7 110
  • 版權(quán)聲明:本文為博主原創(chuàng)文章系羞,未經(jīng)博主允許不得轉(zhuǎn)載郭计。 webpack介紹和使用 一、webpack介紹 1椒振、由來(lái) ...
    it筱竹閱讀 11,028評(píng)論 0 21
  • 在現(xiàn)在的前端開(kāi)發(fā)中昭伸,前后端分離、模塊化開(kāi)發(fā)澎迎、版本控制庐杨、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開(kāi)始...
    Charlot閱讀 5,431評(píng)論 1 32
  • 第十六章 偶救一人得良廚 問(wèn)許機(jī)智救廚妻 古往今來(lái)人們都愛(ài)攀附權(quán)勢(shì)夹供,聽(tīng)說(shuō)寧府兩位公子雙雙中了貢士灵份,來(lái)寧府聯(lián)...
    招搖的狗尾巴草閱讀 330評(píng)論 0 0