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 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
验证javascript中Object和Function的关系的三段简单代码
Jun 27 Javascript
jquery根据name属性查找的小例子
Nov 21 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
JavaScript动态数量的文件上传控件
Nov 18 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
Nov 25 Javascript
Angular 4.X开发实践中的踩坑小结
Jul 04 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
详解vue中在父组件点击按钮触发子组件的事件
Nov 13 Javascript
vue实现树状表格效果
Dec 29 Vue.js
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
合作指挥官:孟斯克
2020/03/16 星际争霸
php 保留小数点
2009/04/21 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
matplotlib作图添加表格实例代码
2018/01/23 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
Python语言进阶知识点总结
2019/05/28 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
考博自荐信
2013/10/25 职场文书
公司活动方案范文
2014/03/06 职场文书
成龙洗发水广告词
2014/03/14 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
三十年同学聚会感言
2015/07/30 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
MySQL数据库事务的四大特性
2022/04/20 MySQL