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,超强推荐share.js
Dec 23 Javascript
javascript &&和||运算法的另类使用技巧
Nov 28 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
Jun 08 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
JS实现iframe自适应高度的方法示例
Jan 07 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
Vue列表渲染的示例代码
Nov 01 Javascript
JavaScript实现无限级递归树的示例代码
Mar 29 Javascript
Node.js实现简单管理系统
Sep 23 Javascript
javascript对象3个属性特征
Nov 17 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
Python列表list数组array用法实例解析
2014/10/28 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
静态变量和实例变量的区别
2015/07/07 面试题
预备党员思想汇报范文
2014/01/11 职场文书
《火烧云》教学反思
2014/04/12 职场文书
班长演讲稿范文
2014/04/24 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
安全生产培训心得体会
2016/01/18 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫