博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你所不知的Webpack-多种配置方法
阅读量:5734 次
发布时间:2019-06-18

本文共 1801 字,大约阅读时间需要 6 分钟。

除了通过最常见的导出一个 Object 来描述 Webpack 所需的配置外,还有其它更灵活的方式,以简化不同场景的配置。

下面来一一介绍它们。

导出一个 Function

在大多数时候你需要从同一份源代码中构建出多份代码,例如一份用于开发时,一份用于发布到线上。

如果采用导出一个 Object 来描述 Webpack 所需的配置的方法,需要写量个文件。

一个用于开发环境,一个用于线上环境。再在启动时通过 webpack --config webpack.config.js 指定使用哪个配置文件。

采用导出一个 Function 的方式,能通过 JavaScript 灵活的控制配置,做到只用写一个配置文件就能完成以上要求。

导出一个 Function 的使用方式如下:

const path = require('path');const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');module.exports = function (env = {}, argv) {  const plugins = [];  const isProduction = env['production'];  // 在生成环境才压缩  if (isProduction) {    plugins.push(      // 压缩输出的 JS 代码      new UglifyJsPlugin()    )  }  return {    plugins: plugins,    // 在生成环境不输出 Source Map    devtool: isProduction ? undefined : 'source-map',  };}

在运行 Webpack 时,会给这个函数传入2个参数,分别是:

  1. env:当前运行时的 Webpack 专属环境变量,env 是一个 Object。读取时直接访问 Object 的属性,设置它需要在启动 Webpack 时带上参数。例如启动命令是 webpack --env.production --env.bao=foo时,则 env 的值是 {"production":"true","bao":"foo"}
  2. argv:代表在启动 Webpack 时所有通过命令行传入的参数,例如 --config--env--devtool,可以通过 webpack -h 列出所有 Webpack 支持的命令行参数。

就以上配置文件而言,在开发时执行命令 webpack 构建出方便调试的代码,在需要构建出发布到线上的代码时执行 webpack --env.production 构建出压缩的代码。

本实例

导出一个返回 Promise 的函数

在有些情况下你不能以同步的方式返回一个描述配置的 Object,Webpack 还支持导出一个返回 Promise 的函数,使用如下:

module.exports = function(env = {}, argv) {  return new Promise((resolve, reject) => {    setTimeout(() => {      resolve({        // ...      })    }, 5000)  })}

导出多份配置

除了只导出一份配置外,Webpack 还支持导出一个数组,数组中可以包含每份配置,并且每份配置都会执行一遍构建。

注意本特性从 Webpack 3.1.0 版本才开始支持。

使用如下:

module.exports = [  // 采用 Object 描述的一份配置  {    // ...  },  // 采用函数描述的一份配置  function() {    return {      // ...    }  },  // 采用异步函数描述的一份配置  function() {    return Promise();  }]

以上配置会导致 Webpack 针对这三份配置执行三次不同的构建。

这特别适合于用 Webpack 构建一个要上传到 Npm 仓库的库,因为库中可能需要包含多种模块化格式的代码,例如 CommonJS、UMD。

转载地址:http://qrgwx.baihongyu.com/

你可能感兴趣的文章
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
Count and Say
查看>>
9.1(java学习笔记)正则表达式
查看>>
fopen打开文件失败的问题
查看>>
【HTTP协议】---HTTP协议详解
查看>>
参数请求post, get , delete中的基本使用(1)
查看>>
CABasicAnimation 脉冲效果
查看>>
用例分析技术
查看>>
Easy-mapper教程——模型转换工具
查看>>
多平台同步更新博客
查看>>
VR_物体边框高亮(变红)
查看>>
卡尔曼滤波——20.卡尔曼预测
查看>>
servlet(4) - servletAPI - 小易Java笔记
查看>>
php给app写接口进行接口的加密
查看>>
django基础-Form组件
查看>>
结对编程之数组长度要求和大数溢出
查看>>
图形化设备管理器
查看>>
request.getRequestDispatcher("")跳转的一些理解
查看>>
css3渐变
查看>>
第六章-linux磁盘管理
查看>>