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 相关文章推荐
给Function做的OOP扩展
May 07 Javascript
始终在屏幕中间显示Div的代码(css+js)
Mar 10 Javascript
js弹出层之1:JQuery.Boxy (二)
Oct 06 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
javascript 对象数组根据对象object key的值排序
Mar 09 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
javascript实现2016新年版日历
Jan 25 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
前端构建工具之gulp的配置与搭建详解
Jun 12 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
少女风vue组件库的制作全过程
May 15 Javascript
简单了解three.js 着色器材质
Aug 03 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字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
python实现排序算法
2014/02/14 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
python的sorted用法详解
2019/06/25 Python
Python2与Python3的区别点整理
2019/12/12 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
网上卖盒饭创业计划书
2014/01/26 职场文书
大学军训感言300字
2014/03/09 职场文书
股权转让协议书范本
2014/04/12 职场文书
学生上课说话检讨书
2014/10/25 职场文书
跑出一片天观后感
2015/06/08 职场文书
人与自然观后感
2015/06/16 职场文书
德劲DE1108畅想
2021/04/22 无线电
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技