webpack 學習筆記


1 安裝環(huán)境

npm install --save-dev webpack
npm install --save-dev webpack-cli

2 npm 初始化

npm init -y
npm install webpack webpack-cli --save-dev

3 修改package.json文件

  • 設(shè)置 "private": true 使 安裝包私有的(private)积蜻,
  • script 添加 "build": "webpack"
    可以使項目打包時 自動查找 webpack.config.js 文件裆泳, 有的話就進行打包
{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.16.5",
    "webpack-cli": "^3.1.0"
  },
  "dependencies": {
    "lodash": "^4.17.10"
  }
}
  • 運行 npm run build 打包

處理 css文件 js 文件 圖片等資源


基本的webpack 只能處理 js 文件蔚出, 但可以通過在 webpack.config.js 配置 module 來實現(xiàn)對 css js 圖片的處理

  • 安裝 x-loader 文件
    加載 css文件
npm install --save-dev style-loader css-loader

加載圖片

npm install --save-dev file-loader

加載數(shù)據(jù)

npm install --save-dev csv-loader xml-loader

webpack.config.js配置如下

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/, //css處理
        use: [
          'style-loader',
          'css-loader'
        ]
      },
      {
        test: /\.(png|svg|jpg|gif)$/,  //圖片處理
        use: [
          'file-loader'
        ]
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,  //字體處理
        use: [
          'file-loader'
        ]
      },
      // 數(shù)據(jù)處理
      {
        test: /\.(csv|tsv)$/,
        use: [
          'csv-loader'
        ]
      },
      {
        test: /\.xml$/,
        use: [
          'xml-loader'
        ]
      }
    ]
  }
};

資源管理


  • HtmlWebpackPlugin插件介紹

    • 可以把webpack.config.js 中的 entry 文件處理生成 一個以 xx.html 開頭的文件
  • clean-webpack-plugin --save-dev 插件介紹

    • 每次打包都會先刪除以前存在的打包資源,重新打包新的資源卜壕。
  • 安裝 插件

npm install --save-dev html-webpack-plugin
npm install clean-webpack-plugin --save-dev
  • webpack.config.js 配置 plugins
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  entry: {
    app: './src/index.js',
    print: './src/print.js'
  },
  plugins: [
    new CleanWebpackPlugin(['dist']), // 刪除已存在的打包資源
    new HtmlWebpackPlugin({ // 將資源打包成一個以 'Output Management'開頭的html文件
      title: 'Output Management'
    })
  ],
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

開發(fā)


  • 通過 source map 可以定位錯誤位置
    • webpack 是通過 devtool 來實現(xiàn)定位代碼錯誤位置的
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  entry: {
    app: './src/index.js',
    print: './src/print.js'
  },
  devtool: 'inline-source-map',
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    })
  ],
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/'
  }
};
  • 使用 webpack-dev-server 實時重新加載
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  entry: {
    app: './src/index.js',
    print: './src/print.js'
  },
  devtool: 'inline-source-map',
+ devServer: {
+    contentBase: './dist'
+  },
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      title: 'Output Management'
    })
  ],
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/'
  }
};

以上配置告知 webpack-dev-server,在 localhost:8080 下建立服務(wù),將 dist 目錄下的文件糊昙,作為可訪問文件。

  • 添加一個 script 腳本
    package.json 文件配置
{
    "name": "development",
    "version": "1.0.0",
    "description": "",
    "main": "webpack.config.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
+     "start": "webpack-dev-server --open",
      "build": "webpack"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "clean-webpack-plugin": "^0.1.16",
      "css-loader": "^0.28.4",
      "csv-loader": "^2.1.1",
      "file-loader": "^0.11.2",
      "html-webpack-plugin": "^2.29.0",
      "style-loader": "^0.18.2",
      "webpack": "^3.0.0",
      "xml-loader": "^1.2.1"
    }
  }
  • 然后可以運行 npm run start

模塊熱替換


  • 修改 webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack');

module.exports = {
  entry: {
    app: './src/index.js'
  },
  devtool: 'inline-source-map',
  devServer: {
    contentBase: './dist',
+    hot: true // https://www.webpackjs.com/configuration/dev-server/#devserver-hot
  },
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      title: 'Hot Module Replacement'
    }),
+    new webpack.NamedModulesPlugin(),//用于啟動HMR時可以顯示模塊的相對路徑
+    new webpack.HotModuleReplacementPlugin() //hot module replacement 啟動模塊熱替換的插件
  ],
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};
  • 入口文件添加 條件設(shè)置
+ if (module.hot) {
+   module.hot.accept('./print.js', function() {
+     更新代碼
+   })
+ }

官網(wǎng)上配置的谢谦,好像不寫也能運行

  • npm run start

個人github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末释牺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子回挽,更是在濱河造成了極大的恐慌没咙,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件千劈,死亡現(xiàn)場離奇詭異祭刚,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門涡驮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暗甥,“玉大人,你說我怎么就攤上這事遮怜×苄洌” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵锯梁,是天一觀的道長即碗。 經(jīng)常有香客問我,道長陌凳,這世上最難降的妖魔是什么剥懒? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮合敦,結(jié)果婚禮上初橘,老公的妹妹穿的比我還像新娘。我一直安慰自己充岛,他們只是感情好保檐,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崔梗,像睡著了一般夜只。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒜魄,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天扔亥,我揣著相機與錄音,去河邊找鬼谈为。 笑死旅挤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的伞鲫。 我是一名探鬼主播粘茄,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秕脓!你這毒婦竟也來了驹闰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤撒会,失蹤者是張志新(化名)和其女友劉穎嘹朗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诵肛,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡屹培,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年默穴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褪秀。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓄诽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出媒吗,到底是詐尸還是另有隱情仑氛,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布闸英,位于F島的核電站锯岖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甫何。R本人自食惡果不足惜出吹,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辙喂。 院中可真熱鬧捶牢,春花似錦、人聲如沸巍耗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炬太。三九已至竹勉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娄琉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工吓歇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孽水,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓城看,卻偏偏與公主長得像女气,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子测柠,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

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