Webpack 4.x 配置教程

Webpack進入了 4.x 版本,緊跟着對開發者的配置能力有了一些新的要求。今天咱們看一下 Webpack 4.x 下的配置工做該如何進行。javascript

安裝 webpack 和 webpack-cli

安裝 npm 包,分爲全局安裝和本地安裝。區別是全局安裝後,能夠經過 webpack 命令直接執行 webpack 程序,以下:css

webpack -v
複製代碼

本地安裝完,接下來須要經過 npm 包路徑的形式執行 webpack 命令,以下:java

node node_modules/webpack/bin/webpack -v
//或者
node_modules/.bin/webpack -v
複製代碼

一般狀況,咱們通常都會同時進行全局安裝和本地安裝,至於你選用本地包仍是全局包,就看我的習慣了~總之,只要能找到正確的 webpack 路徑,都是可以正常編譯的。node

全局安裝

4.x 版本,webpack 安裝過程被拆分爲 webpack 和 webpack-cli 兩個包。react

npm install webpack webpack-cli -g
複製代碼

若是你想追求速度,能夠經過安裝 cnpm 工具,從中國淘寶鏡像源進行安裝。webpack

cnpm install webpack webpack-cli -g
複製代碼

本地安裝

npm install webpack webpack-cli -D
複製代碼

或者web

cnpm install webpack webpack-cli -D
複製代碼

驗證安裝

成功安裝以後,咱們能夠驗證下是否成功。npm

  • 驗證全局
webpack -v
複製代碼
  • 驗證本地
node_modules/.bin/webpack -v
//或者
node node_modules/webpack/bin/webpack -v
複製代碼

執行完可以正常打印版本號,說明安裝成功。json

第一次使用。

webpack4.x 默認的入口文件是 src目錄下的 index.js 文件,默認的出口文件是dist 目錄下的 main.js 文件。瀏覽器

簡單使用

一、新建src目錄,增長一個 index.js 文件。

mkdir src & touch index.js
複製代碼

二、編輯 index.js,隨便輸入兩句代碼:

console.log('第一次')。
複製代碼

三、執行全局 webpack 命令或者執行本地 webpack 命令。

  • 使用全局下的 webpack 執行編譯
webpack
複製代碼

一句 webpack ,便可將 src 目錄下的 index.js 文件,編譯輸出到 dist 目錄下的 main.js 文件。

  • 使用本地下的 webpack 執行編譯
node node_modules/webpack/bin/webpack
複製代碼

可見,本地編譯須要些的命令比較長,由於須要按照路徑查找webpack。

webpack 環境

  • webpack 默認使用的是生產環境編譯方式,即當咱們執行 webpack 命令的時候,實際上等價於webpack --mode production,生產環境編譯方式會進行壓縮混淆操做。
  • 當咱們在開發階段時,每每須要配置編譯方式爲開發階段,可經過以下命令執行:
    webpack --mode development
    複製代碼

開發階段編譯後的文件是不會進行壓縮混淆操做的,可讀性比較好,調試起來也比較方便。

改變入口文件

實際應用中,咱們的默認入口文件可能不是 src 下的 index.js 文件,所幸的是,webpack 支持配置入口文件和出口文件。

配置入口文件。

咱們能夠在 webpack 後增長一個參數表明入口文件webpack {入口文件}

webpack ./src/app.js
複製代碼

webpack 後的第一個參數表明入口文件,咱們將它改成 ./src/app.js,執行命令會發現,webpack 將該文件編譯到了默認的出口文件dist/main.js。

改變出口文件

改變出口文件可使用以下命令實現:webpack {入口文件} -o {出口文件}

webpack ./src/app.js  -o ./bundle/main.js
複製代碼

執行命令會發現,輸出文件是 bundle 目錄下的 main.js 。

配置 babel

和webpack 結合的最緊密的當屬 babel 了。babel 分爲 babel-corebabel-loader 兩個包。即便分紅了兩個包,這兩個包在版本使用上要注意配套。

請注意:babel-core 7.x 版本的包名是 @babel/core。

babel-loader 7.x 和 babel-core 6.x。

採用babel-loader 7.x 時,須要安裝 babel-preset-env 和 babel-preset-react插件,進行 ES6 和 React 的轉譯工做。

cnpm install babel-loader babel-core babel-preset-env babel-preset-react -D
複製代碼
  • .babelrc 中配置
    • env
    • react

babel-loader 8.x 和 @babel/core 7.x。

採用babel-loader 8.x 時,須要安裝 @babel/preset-env 和 @babel/preset-react插件,進行 ES6 和 React 的轉譯工做。

cnpm install babel-loader @babel/core @babel/perset-env @babel/preset-react -D
複製代碼
  • .babelrc 中 配置
    • @babel/preset-env
    • @babel/preset-react 配置好後就能夠很happy地使用 webpack4.x 進行開發了。

webpack-dev-server

配置好轉譯插件以後,咱們就可使用 ES6 開發 React 項目了,可是咱們仍是須要一些提升開發效率的工具,好比 webpack-dev-server,它可以

  • 在本地開啓一個靜態服務器,使得咱們能夠經過域名(localhost 或者127.0.0.1或者本身配置的 host 域名)的方式訪問本地開發目錄的頁面和靜態資源。
  • 讓咱們在保存文件的同時自動編譯。
  • 無刷新更新瀏覽器中的模塊。

咱們看下webpack-dev-server 如何配置

module.exports = {
    devServer: {
        contentBase: path.join(__dirname, "/dist")
  }
}
複製代碼

上例咱們只配置了一個屬性 contentBase,它表明了webpack-dev-server開啓的靜態服務器的根目錄,webpack-dev-server啓動一個服務器以後,默認端口是8080,當咱們訪問 localhost:8080 時,webpack-dev-server 會去 dist 目錄尋找靜態資源文件。

webpack-dev-server還有一些其餘配置,好比熱更新。

node_modules/.bin/webpack-dev-server --hot
複製代碼

固然 webpack-dev-server 還有不少特別棒的配置,這裏就不一一細說了,你們能夠去網上參考一些資料進行配置,若是有什麼不太懂的,能夠留言諮詢~~

完整的 package.json

如下是一個完整的 package.json。

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "node_modules/.bin/webpack-dev-server --hot"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.4.5",
    "@babel/preset-env": "^7.4.5",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.6",
    "css-loader": "^2.1.1",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "style-loader": "^0.23.1",
    "webpack": "^4.32.2",
    "webpack-cli": "^3.3.2",
    "webpack-dev-server": "^3.5.1"
  }
}

複製代碼

完整的 .babelrc

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}
複製代碼

完整的 webpack-config.json 文件

var path = require('path');
module.exports = {
  output: {},
  module: {
    rules: [
      {
        test: /(\.jsx|\.js)$/,
        exclude: '/node_modules',
        use: { loader: "babel-loader" }
      },
      {
        test: /\.css$/,
        exclude: '/node_modules',
        use: [{
          loader: 'style-loader'
        }, { loader: "css-loader" }]
      }
    ]
  },
  devServer: {
    contentBase: path.join(__dirname, "/dist")
  }

}
複製代碼

你們拷貝這三個配置文件以後,執行 npm install 便可安裝 webpack 4.x 的相關依賴了,省去了配置時的各類報錯信息,大大節約了配置時間,但願能給你們帶來幫助~

相關文章
相關標籤/搜索