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 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
js+FSO遍历文件夹下文件并显示
Mar 07 Javascript
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
javascript attachEvent和addEventListener使用方法
Mar 19 Javascript
JQuery 小练习(实例代码)
Aug 07 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
vue-router 导航钩子的具体使用方法
Aug 31 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
JS实现图片旋转动画效果封装与使用示例
Jul 09 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
vue实现pdf文档在线预览功能
Nov 26 Javascript
React 父子组件通信的实现方法
Dec 05 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模拟实现斗地主发牌
2020/04/22 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
js有序数组的连接问题
2013/10/01 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
用Python shell简化开发
2018/08/08 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python中拆分字符串的操作方法
2019/07/23 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Python timeit模块原理及使用方法
2020/10/10 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
UNIX文件系统分类
2014/11/11 面试题
文明倡议书
2015/01/19 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
独生子女证明范本
2015/06/19 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS