webpack 如何同时输出压缩和未压缩的文件的实现步骤


Posted in Javascript onJune 05, 2020

有的时候我们想要同时生成压缩和未压缩的文件,比如我们构建 lib 包的时候,我们希望用户能够使用压缩过后的代码文件作为 cdn 文件,最简单的一个方式就是通过指定环境变量,比如指定 MINIFY,如下:

const path = require('path')

const isMinify = process.env.MINIFY

/**
 * @type {import('webpack').Configuration}
 */
const config = {
 entry: {

  index: './src/index.js'
 },
 output: {
  filename: isMinify ? '[name].min.js' : '[name].js',
  path: path.join(__dirname, 'dist')
 },
 devtool: 'cheap-source-map',
 optimization: {
  minimize: isMinify ? true : false
 }
}

module.exports = config

我们在使用的时候通过指定环境变量就可以打包成不同的版本:

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "build:min": "MINIFY=1 webpack --config=webpack.config.js",
  "build": "webpack --config=webpack.config.js"
 }

不过这样的缺点就是我们需要运行两次。

第二个方法是安装unminified-webpack-plugin,通过这个插件可以生成没有压缩的文件:

const path = require('path')
const UnminifiedWebpackPlugin = require('unminified-webpack-plugin');

/**
 * @type {import('webpack').Configuration}
 */
const config = {
 entry: {
  index: './src/index.js',
 },
 output: {
  filename: '[name].min.js',
  path: path.join(__dirname, 'dist')
 },
 devtool: 'cheap-source-map',
 plugins: [
  new UnminifiedWebpackPlugin({})
 ]
}

module.exports = config

不过这个有个缺点就是未压缩的文件没有 sourcemap。

第三种方法通过指定多个打包入口,然后手动指定压缩插件(uglifyjs、terser等)压缩哪些文件,如我们指定 index.min.js 这个文件才需要压缩,配置如下:

const path = require('path')
const TerserWebpackPlugin = require('terser-webpack-plugin');

/**
 * @type {import('webpack').Configuration}
 */
const config = {
 entry: {
  index: './src/index.js',
  'index.min': './src/index.js'
 },
 output: {
  filename: '[name].js',
  path: path.join(__dirname, 'dist')
 },
 devtool: 'cheap-source-map',
 optimization: {
  minimize: true,
  minimizer: [
   new TerserWebpackPlugin({
    include: /min/,
    sourceMap: true
   })
  ]
 }
}

module.exports = config

关键点如下:

webpack 如何同时输出压缩和未压缩的文件的实现步骤

这个时候生成的就完美了。

到此这篇关于webpack 如何同时输出压缩和未压缩的文件的文章就介绍到这了,更多相关webpack 如何同时输出压缩和未压缩的文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
JavaScript 盒模型 尺寸深入理解
Dec 31 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
js拖拽的原型声明和用法总结
Apr 04 Javascript
浅谈Angular中ngModel的$render
Oct 24 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
swiper 自动图片无限轮播实现代码
May 21 Javascript
security.js实现的RSA加密功能示例
Jun 06 Javascript
浅析JavaScript 函数柯里化
Sep 08 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 #Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 #Javascript
JS删除数组指定值常用方法详解
Jun 04 #Javascript
Vue项目接入Paypal实现示例详解
Jun 04 #Javascript
Paypal支付不完全指北
Jun 04 #Javascript
微信小程序学习总结(五)常见问题实例小结
Jun 04 #Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 #Javascript
You might like
简单的php中文转拼音的实现代码
2014/02/11 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
Js apply方法详解
2017/02/16 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
python中range()与xrange()用法分析
2016/09/21 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Flask之flask-script模块使用
2018/07/26 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
自立自强的名人事例
2014/02/10 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
2015年派出所工作总结
2015/04/24 职场文书
长江七号观后感
2015/06/11 职场文书