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获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
js判断滚动条是否已到页面最底部或顶部实例
Nov 20 Javascript
js判断鼠标左、中、右键哪个被点击的方法
Jan 27 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
Sep 23 Javascript
AngularJS实现星星等级评分功能
Sep 24 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
vuex存储token示例
Nov 11 Javascript
vue实现打地鼠小游戏
Aug 21 Javascript
k8s node节点重新加入master集群的实现
Feb 22 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 Session存储到Redis的方法
2013/11/04 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
js表单验证实例讲解
2016/03/31 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
python网络编程之五子棋游戏
2020/05/14 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
html5开发之viewport使用
2013/10/17 HTML / CSS
加拿大最大的书店:Indigo
2017/01/01 全球购物
竞聘上岗演讲稿
2014/05/16 职场文书
党员个人整改措施
2014/10/24 职场文书
运动会闭幕词
2015/01/28 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
vue实现在data里引入相对路径
2022/06/05 Vue.js