配置文件

在 webpack 中,我们一般使用 webpack.config.js 来定义 webpack的配置,有时候我们为了区分不同的环境,我们会以不同的文件名来区分,一般会分为三个文件:

  • webpack.common.config.js
  • webpack.dev.config.js
  • webpack.prod.config.js

这三个文件中,我们通常会把 公共的配置内容放在 webpack.common.config.js 中,而把生产专用的打包配置放在 webpack.prod.config.js 中,把开发使用的打包配置放在 webpakc.dev.config.js 中。在 webpack.prod.config.js 文件和 webpack.dev.config.js 中,我们会使用 webpack-merge 插件把 webpack.common.config.js 文件中的配置合并到最终的打包配置中。

webpack 的配置文件中,我们通常会导出一个 webpack 的配置对象,但除此之外,我们使用其它的方式。

使用 TypeScript配置Webpack

安装依赖

  1. npm i -D typescript ts-node @types/node @types/webpack
  2. npm i -D @types/webpack-dev-server

文件配置

新建 webpack.config.ts 文件:

  1. import path from 'path';
  2. import webpack from 'webpack';
  3. import 'webpack-dev-server';
  4. const config: webpack.Configuartion = {
  5. mode: 'production',
  6. entry: './foo.js',
  7. output: {
  8. path: path.resolve(__dirname, 'dist'),
  9. filename: 'bundle.js'
  10. }
  11. };

导出数组

我们还可以导出一个 webpack 的配置对象组成的一个数组,来配置一个打包的集合。

导出一个函数

当我们需要在同一个配置文件中,根据不同的环境变量来使用不同的打包配置的时候,我们就可以以函数的形式导出 webpack 的打包配置。形式如下:

  1. module.exports = function (env,args){
  2. return {}
  3. }

函数中接收的 env 来自于 webpack 执行中传递的参数。如下:
webpack --env prod :

  1. {
  2. WEBPACK_BUNDLE: true,
  3. WEBPACK_BUILD: true,
  4. prod: true
  5. }

webpack --env name=test :

  1. {
  2. WEBPACK_BUNDLE: true,
  3. WEBPACK_BUILD: true,
  4. name: 'test'
  5. }

webpack --env app.name="user" :

  1. {
  2. WEBPACK_BUNDLE: true,
  3. WEBPACK_BUILD: true,
  4. app: {
  5. name: "user"
  6. }
  7. }

导出为Promise

当我们的配置内容有一部分来自于异步的时候,我们可以在webpack的配置文件中返回一个 Promise 的方式来
配置 webpack,比如,我们的配置读取自文件或我们自己搭建的网络。配置形式如下:

  1. module.exports = ()=>{
  2. return new Promise((resolve, reject) => {
  3. setTimeout( () => {
  4. resolve({
  5. mode: "production"
  6. })
  7. }, 5000)
  8. } )
  9. }

基本配置

在 webpack中,常用的一级配置有这么几个字段:

  • mode
  • module
  • entry
  • output
  • plugins
  • devtool
  • devServer
  • resolve

    mode

    在 webpack 中,有三种 mode:

  • production

  • development
  • none

其中的 productiondevelopment 分别预设了生产环境和开发环境的通用配置,而 none 则表示为不使用任何的预设。
当我们在webpack的配置中没有使用任何值的时候,webpack会默认使用 production 配置。webpack查找 mode 的作用为:

webpack文件配置>process.env.NODE_ENV>默认的’production’

常用插件

HtmlWebpackPlugin

安装

  1. npm i -D html-webpack-plugin

常用Loader

ts-loader

安装

  1. npm i -D ts-loader

配置

  1. module.exports = {
  2. ...
  3. resolve: {
  4. extensions: [".ts",".tsx",".js"],
  5. },
  6. devtools: "inline-source-map",
  7. module: {
  8. rules: [
  9. {
  10. test: /\.tsx?$/,
  11. loader: "ts-loader"
  12. }
  13. ]
  14. }
  15. ...
  16. }

webpack-dev-server

要在webpack中使用webpack-dev-server开发,要安装相关的依赖—webpack-dev-server,如果使用的是 typescript的配置文件,还需要安装 @types/webpack-dev-server

  1. npm i -D webpack-dev-server
  2. npm i -D @types/webpack-dev-server // 可选安装,当配置文件使用的是 typescript语言的时候,需要安装这个。

在安装了webpack-dev-server之后,我们要修改启动webpack的方式,由npx webpack修改为npx webpack serve

配置

webpack-dev-server常用到的配置有:

  1. devServer: {
  2. contentBase: './dist',
  3. hot: true,
  4. historyApiFallback: true,
  5. noInfo: true,
  6. }