webpack常用配置及用法

創(chuàng)建局部的webpack

  1. 創(chuàng)建package.json文件,用于管理項(xiàng)目的信息、庫(kù)依賴等

    npm init
    

    n 第三步:使用局部的webpack n 第四步:在package.json中創(chuàng)建scripts腳本,執(zhí)行腳本打包即可 創(chuàng)建局部的webpack npm init npm install webpack webpack-cli -D npx webpack npm run build

  2. 安裝局部的webpack
    npm install webpack webpack-cli -D

  3. 使用局部的webpack
    npx webpack

  4. 在package.json中創(chuàng)建scripts腳本违崇,執(zhí)行腳本打包即可

    "scripts": {
         //基本配置
         "build": "webpack"
         //可指定配置文件土辩,即(webpack.config.js)
        "build": "webpack --config webpack.config.js"
      },
    

常用配置

const path = require('path');

// 刪除dist文件夾:
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
// 進(jìn)行項(xiàng)目部署的時(shí)遭赂,必然也是需要有對(duì)應(yīng)的入口文件index.html潜索;
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { DefinePlugin } = require('webpack')
// 如果我們將一些文件放到public的目錄下臭增,那么這個(gè)目錄會(huì)被復(fù)制到dist文件夾中。
const CopyWebpackPlugin = require('copy-webpack-plugin')

module.exports = {
  // p可選值有:'none' | 'development' | 'production'帮辟;
  mode: 'development',
  // 設(shè)置source-map, 建立js映射文件, 方便調(diào)試代碼和錯(cuò)誤
  devtool: "source-map",

  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "./build"),
    filename: "build.js"
  },
  devServer: {
    
    contentBase: "./public",
    // 模塊熱替換是指在 應(yīng)用程序運(yùn)行過程中速址,替換、添加由驹、刪除模塊,而無需重新刷新整個(gè)頁(yè)面昔园;
    hot: true,
    // localhost:本質(zhì)上是一個(gè)域名蔓榄,通常情況下會(huì)被解析成127.0.0.1;
    // 0.0.0.0:監(jiān)聽I(yíng)PV4上所有的地址,再根據(jù)端口找到不同的應(yīng)用程序;
    // 比如我們監(jiān)聽 0.0.0.0時(shí)默刚,在同一個(gè)網(wǎng)段下的主機(jī)中甥郑,通過ip地址是可以訪問的;
    host: "0.0.0.0",
    port: 7777,
    // open是否打開瀏覽器:
    open: true,
    // compress是否為靜態(tài)文件開啟gzip compression,默認(rèn)值是false
    compress: true,
    // proxy: {
    //   "/api": {
    //     // 表示的是代理到的目標(biāo)地址
    //     target: "http://localhost:8888",
    //     // 默認(rèn)情況下,我們的 /api-hy 也會(huì)被寫入到URL中荤西,如果希望刪除澜搅,可以使用pathRewrite
    //     pathRewrite: {
    //       "^/api": ""
    //     },
    //     // 默認(rèn)情況下不接收轉(zhuǎn)發(fā)到https的服務(wù)器上,如果希望支持邪锌,可以設(shè)置為false勉躺;
    //     secure: false,
    //     // :它表示是否更新代理后請(qǐng)求的headers中host地址
    //     changeOrigin: true
    //   }
    // }
  },
  resolve: {
    // extensions是解析到文件時(shí)自動(dòng)添加擴(kuò)展名(默認(rèn)值是 ['.wasm', '.mjs', '.js', '.json'])
    extensions: [".js", ".json", ".mjs", ".vue", ".ts", ".jsx", ".tsx"],
    
    // 是配置別名alias:
    alias: {
      "@": path.resolve(__dirname, "./src"),
      "js": path.resolve(__dirname, "./src/js")
    }
  },
  // module.rules中允許我們配置多個(gè)loader
  module: {
    rules: [
      {
        // test屬性:用于對(duì) resource(資源)進(jìn)行匹配的,通常會(huì)設(shè)置成正則表達(dá)式
        test: /\.(css|less)$/,
        // 1.loader語(yǔ)法糖寫法
        // loader: "css-loader"
        // 2.完整的寫法
        // 采用倒序加載使用loader(即從下往上)
        use: [
          "style-loader",
          "css-loader",
          "less-loader",
          {
            // 這個(gè)工具可以幫助我們進(jìn)行一些CSS的轉(zhuǎn)換和適配觅丰,比如自動(dòng)添加瀏覽器前綴饵溅、css樣式的重置
            loader: "postcss-loader",
            // 可選的屬性,值是一個(gè)字符串或者對(duì)象妇萄,值會(huì)被傳入到loader中蜕企;
            options: {
              postcssOptions: {
                plugins: [
                  require("autoprefixer")
                ]
              }
            }
          }
        ]
      },
      // {
      //   // 對(duì)字體進(jìn)行處理
      //   test: /\.(eot|ttf|woff2?)$/,
      //   use: {
      //     loader: 'file-loader',
      //     // [ext]: 處理文件的擴(kuò)展名;
      //     // [name]:處理文件的名稱
      //     // [hash]:文件的內(nèi)容冠句,使用MD4的散列函數(shù)處理轻掩,生成的一個(gè)128位的hash值(32個(gè)十六進(jìn)制)
      //     // p [path]:文件相對(duì)于webpack配置文件的路徑;

      //     options: {
      //       name: 'fong/[name]_hash[6][ext]'
      //     }
      //   }
      // },
      // {
      //   // 對(duì)圖片進(jìn)行處理
      //   test: /\.(jpe?g|png|gif|svg)$/,
      //   use: {
      //     loader: "url-loader",
      //     options: {
      //       // outputPath: "img",
      //       name: "img/[name]_[hash:6].[ext]",
      //       // limit懦底,可以用于設(shè)置轉(zhuǎn)換的限制唇牧;下面的代碼38kb的圖片會(huì)進(jìn)行base64編碼,而295kb的不會(huì);
      //       limit: 100 * 1024
      //     }
      //   }
      // },

      // 在webpack5開始奋构,我們可以直接使用資源模塊類型(asset module type)壳影,來替代上面的這些loader
      // 資源模塊類型(asset module type),通過添加 4 種新的模塊類型弥臼,來替換所有這些 loader
      // 1.asset/resource 發(fā)送一個(gè)單獨(dú)的文件并導(dǎo)出 URL宴咧。之前通過使用 file-loader 實(shí)現(xiàn);
      // 2.asset/inline 導(dǎo)出一個(gè)資源的 data URI径缅。之前通過使用 url-loader 實(shí)現(xiàn)掺栅;
      // 3.asset/source 導(dǎo)出資源的源代碼。之前通過使用 raw-loader 實(shí)現(xiàn)纳猪;
      // 4.asset 在導(dǎo)出一個(gè) data URI 和發(fā)送一個(gè)單獨(dú)的文件之間自動(dòng)選擇氧卧。之前通過使用 url-loader,并且配置資源體積限制實(shí)現(xiàn)
      {
        // 對(duì)圖片進(jìn)行處理
        test: /\.(jpe?g|png|gif|svg)$/,
        type: 'asset',
        generator: {
          filename: "img/[name]_[hash:6].[ext]",
          // 添加一個(gè)parser屬性氏堤,并且制定dataUrl的條件沙绝,添加maxSize屬性;
          // parser: {
          //   dataUrlCondition: {
          //     maxSize: 100 * 1024
          //   }
          // }
        }
      },
      {
        // 對(duì)字體進(jìn)行處理
        test: /\.(eot|ttf|woff2?)$/,
        type: "asset/resource",
        generator: {
          filename: "font/[name]_[hash:6][ext]",
          // limit: 100 * 1024
        }
      },
      {
        test: /\.js$/,
        loader: "babel-loader"
      }
    ]
  },
  // Loader是用于特定的模塊類型進(jìn)行轉(zhuǎn)換鼠锈;
  // Plugin可以用于執(zhí)行更加廣泛的任務(wù)闪檬,比如打包優(yōu)化、資源管理购笆、環(huán)境變量注入等粗悯;
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      // title:在進(jìn)行htmlWebpackPlugin.options.title讀取時(shí),就會(huì)讀到該信息
      title: 'webpack案例',
      // template:指定我們要使用的模塊所在的路徑同欠;
      template: './public/index.html'
    }),
    // DefinePlugin允許在編譯時(shí)創(chuàng)建配置的全局常量样傍,是一個(gè)webpack內(nèi)置的插件(不需要單獨(dú)安裝)
    new DefinePlugin({
      BASE_URL: "'./'"
    }),
    new CopyWebpackPlugin({
      // 復(fù)制的規(guī)則在patterns中設(shè)置;
      // from:設(shè)置從哪一個(gè)源中開始復(fù)制铺遂;
      // to:復(fù)制到的位置衫哥,可以省略,會(huì)默認(rèn)復(fù)制到打包的目錄下娃循;
      // globOptions:設(shè)置一些額外的選項(xiàng)炕檩,其中可以編寫需要忽略的文件:
      //  .DS_Store:mac目錄下回自動(dòng)生成的一個(gè)文件;
      //  index.html:也不需要復(fù)制捌斧,因?yàn)槲覀円呀?jīng)通過HtmlWebpackPlugin完成了index.html的生成笛质;
      patterns: [
        {
          from: 'public',
          globOptions: {
            ignore: [
              '**/.DS_Store',
              '**/index.html',
            ]
          }
        }
      ]
    })
  ]
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捞蚂,隨后出現(xiàn)的幾起案子妇押,更是在濱河造成了極大的恐慌,老刑警劉巖姓迅,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敲霍,死亡現(xiàn)場(chǎng)離奇詭異俊马,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肩杈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門柴我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扩然,你說我怎么就攤上這事艘儒。” “怎么了夫偶?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵界睁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我兵拢,道長(zhǎng)翻斟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任说铃,我火速辦了婚禮访惜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘截汪。我一直安慰自己疾牲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布衙解。 她就那樣靜靜地躺著,像睡著了一般焰枢。 火紅的嫁衣襯著肌膚如雪蚓峦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天济锄,我揣著相機(jī)與錄音暑椰,去河邊找鬼。 笑死荐绝,一個(gè)胖子當(dāng)著我的面吹牛一汽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播低滩,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼召夹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了恕沫?” 一聲冷哼從身側(cè)響起监憎,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婶溯,沒想到半個(gè)月后鲸阔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷霉,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年褐筛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了类少。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渔扎,死狀恐怖硫狞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赞警,我是刑警寧澤妓忍,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站愧旦,受9級(jí)特大地震影響世剖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笤虫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一旁瘫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琼蚯,春花似錦酬凳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至峦睡,卻和暖如春翎苫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榨了。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工煎谍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人龙屉。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓呐粘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親转捕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子作岖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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