Webpack 4.x 配置教程

3,695 阅读5分钟

Webpack进入了 4.x 版本,紧跟着对开发者的配置能力有了一些新的要求。今天我们看一下 Webpack 4.x 下的配置工作该如何进行。

安装 webpack 和 webpack-cli

安装 npm 包,分为全局安装和本地安装。区别是全局安装后,可以通过 webpack 命令直接执行 webpack 程序,如下:

webpack -v

本地安装完,接下来需要通过 npm 包路径的形式执行 webpack 命令,如下:

node node_modules/webpack/bin/webpack -v
//或者
node_modules/.bin/webpack -v

通常情况,我们一般都会同时进行全局安装和本地安装,至于你选用本地包还是全局包,就看个人习惯了~总之,只要能找到正确的 webpack 路径,都是能够正常编译的。

全局安装

4.x 版本,webpack 安装过程被拆分为 webpack 和 webpack-cli 两个包。

npm install webpack webpack-cli -g

如果你想追求速度,可以通过安装 cnpm 工具,从中国淘宝镜像源进行安装。

cnpm install webpack webpack-cli -g

本地安装

npm install webpack webpack-cli -D

或者

cnpm install webpack webpack-cli -D

验证安装

成功安装之后,我们可以验证下是否成功。

  • 验证全局
webpack -v
  • 验证本地
node_modules/.bin/webpack -v
//或者
node node_modules/webpack/bin/webpack -v

执行完能够正常打印版本号,说明安装成功。

第一次使用。

webpack4.x 默认的入口文件是 src目录下的 index.js 文件,默认的出口文件是dist 目录下的 main.js 文件。

简单使用

1、新建src目录,增加一个 index.js 文件。

mkdir src & touch index.js

2、编辑 index.js,随便输入两句代码:

console.log('第一次')。

3、执行全局 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 的相关依赖了,省去了配置时的各种报错信息,大大节约了配置时间,希望能给大家带来帮助~