Webpack4實(shí)戰(zhàn)

1. 我們先新建一個(gè)項(xiàng)目 project 并用 npm 命令初始化項(xiàng)目(一路回車)

npm init

2. 安裝 webpack 與 webpack-cli ( 4 版本需要cli才能執(zhí)行命令)

npm install --save-dev webpack webpack-cli

3. 新建 src 文件夾把敞,存放我們要打包的源碼锹锰,默認(rèn)輸入文件是 index.js,所以我們?cè)?src 下新建一個(gè)index.js文件

4. 新建 webpack.config.js嚷往,webpack配置都是在這個(gè)文件下

5. 在package.json中配置服務(wù)和打包命令

這里配置了簡單的webpack,注釋詳細(xì)適合入門取刃,話不多說貼上代碼:

webpack.config.js

/** webpack.config.js*/
const path = require("path")
const HtmlWebpackPlugin = require("html-webpack-plugin") // 自動(dòng)生成index.html
const { CleanWebpackPlugin } = require("clean-webpack-plugin") // 每次打包清空文件夾
const MiniCssExtractPlugin = require("mini-css-extract-plugin") // css分離
const TerserWebpackPlugin = require("terser-webpack-plugin") // 壓縮js(在optimization中配置)
const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin") // 壓縮css

module.exports = {
  context: process.cwd(),
  mode: "production", // 開發(fā)環(huán)境和生產(chǎn)環(huán)境配置有很多不同,webpack4以后可以配置mode development/production 用于提供模式配置選項(xiàng)告訴webpack相應(yīng)地使用其內(nèi)置的優(yōu)化
  devtool: "eval", // eval會(huì)有sourcemap
  // entry: "./src/index.js", // 入口文件 如果是一個(gè)文件就是單入口 多入口要變成對(duì)象 輸出文件filename不能寫單個(gè)
  entry: {
    index: "./src/index.js",
    login: "./src/login.js"
  },
  output: { // 輸出文件
    path: path.resolve(__dirname, "dist"), // 輸出目錄只能是絕對(duì)目錄
    filename: "[name].[hash].js", // 輸出文件名(bundle.js,如果是單入口蚁廓,輸出的文件名就是main)   防止緩存有三種hash: hash chunkHash contentHash   [hash:8](只要八位)
    publicPath: "/" // 根路徑,指定的是構(gòu)建后在html里的路徑(即在瀏覽器中的訪問路徑)
  },
  devServer: { // 安裝webpack-dev-server –D (其實(shí)是express開發(fā)服務(wù)器) package.json可以配置--open 運(yùn)行時(shí)自動(dòng)打開頁面
    contentBase: path.resolve(__dirname, "dist"), // 配置開發(fā)服務(wù)器運(yùn)行時(shí)的根路徑(產(chǎn)出文件的根目錄)
    port: 8082, // 監(jiān)聽的端口
    host: "localhost", // 開發(fā)服務(wù)器監(jiān)聽的主機(jī)地址
    compress: true // 開發(fā)服務(wù)器是否啟動(dòng)gzip等壓縮
  },
  module: {
    rules: [
      {
        test: /\.css/,
        // use: ["style-loader", "css-loader"] // loader三種寫法: use/loader/use+loader; 從右到左處理css文件
        use: [{loader: MiniCssExtractPlugin.loader}, "css-loader"] // css分離
      },
      {
        test: /\.(jpg|jpeg|png|gif|svg)$/,
        // use: ["file-loader"] // url-loader比file-loader 功能強(qiáng)(url-loader內(nèi)置了file-loader)
        use: {
          loader: "url-loader",
          options: {
            limit: 10 * 1024, // 如果圖片大小小于10k雷激,就轉(zhuǎn)為base64編碼
          }
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({ // 產(chǎn)出html文件,編譯時(shí)候會(huì)讀取模板文件
      template: "./src/index.html", // 指定模板文件
      filename: "index.html", // 產(chǎn)出后的文件名
      hash: true, // 為了避免緩存替蔬,可以在產(chǎn)出的資源后面添加hash值
      chunks: ["login", "index"], // 對(duì)應(yīng)入口文件 如果配置了chunksSorteMode,就可以根據(jù)代碼邏輯進(jìn)行排序,引入的先后順序
      chunksSortMode:'manual' // 對(duì)引入代碼塊進(jìn)行排序的模式chunksSortMode: 默認(rèn)auto  manual手動(dòng)  dependency依賴項(xiàng) Funtion
    }),
    new CleanWebpackPlugin(),
    new MiniCssExtractPlugin({
      filename: "[name].css", // 代碼塊名字
      chunkFilename: "[id].css" // 異步加載用
    })
  ],
  optimization: { // 放優(yōu)化的內(nèi)容(這里的壓縮mode必須是production才會(huì)生效)
    minimizer: [ // 放優(yōu)化的插件
      new TerserWebpackPlugin({ // 壓縮js
        parallel: true, // 開啟多進(jìn)程壓縮
        cache: true // 開啟緩存(壓縮過的不壓縮)
      }),
      new OptimizeCssAssetsWebpackPlugin({ // 壓縮css
        assetNameRegExp: /\.css$/g,
        // cssProcessor: require("cssnao")
      })
    ]
  },
}

package.json

{
  "name": "1.webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack",
    "dev": "webpack-dev-server --open"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^3.0.0",
    "css-loader": "^3.2.0",
    "file-loader": "^4.2.0",
    "html-webpack-plugin": "^3.2.0",
    "mini-css-extract-plugin": "^0.8.0",
    "optimize-css-assets-webpack-plugin": "^5.0.3",
    "style-loader": "^1.0.0",
    "terser-webpack-plugin": "^2.0.0",
    "url-loader": "^2.1.0",
    "webpack": "^4.39.3",
    "webpack-cli": "^3.3.7",
    "webpack-dev-server": "^3.8.0"
  }
}

github地址:https://github.com/leiyangs/webpack-exercise

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屎暇,一起剝皮案震驚了整個(gè)濱河市承桥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌根悼,老刑警劉巖凶异,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挤巡,居然都是意外死亡剩彬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門矿卑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉恋,“玉大人,你說我怎么就攤上這事粪摘∑偕梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵徘意,是天一觀的道長苔悦。 經(jīng)常有香客問我,道長椎咧,這世上最難降的妖魔是什么玖详? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮勤讽,結(jié)果婚禮上蟋座,老公的妹妹穿的比我還像新娘。我一直安慰自己脚牍,他們只是感情好向臀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诸狭,像睡著了一般券膀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驯遇,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天芹彬,我揣著相機(jī)與錄音,去河邊找鬼叉庐。 笑死舒帮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玩郊,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肢执,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓦宜?” 一聲冷哼從身側(cè)響起蔚万,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤岭妖,失蹤者是張志新(化名)和其女友劉穎临庇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昵慌,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡假夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斋攀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已卷。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淳蔼,靈堂內(nèi)的尸體忽然破棺而出侧蘸,到底是詐尸還是另有隱情,我是刑警寧澤鹉梨,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布讳癌,位于F島的核電站,受9級(jí)特大地震影響存皂,放射性物質(zhì)發(fā)生泄漏晌坤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一旦袋、第九天 我趴在偏房一處隱蔽的房頂上張望骤菠。 院中可真熱鬧,春花似錦疤孕、人聲如沸商乎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹉戚。三九已至,卻和暖如春柬讨,著一層夾襖步出監(jiān)牢的瞬間崩瓤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工踩官, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留却桶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像颖系,于是被迫代替她去往敵國和親嗅剖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355