关于新版本 webpack gulp 兼容 IE8- 的正确姿势

栏目: 编程工具 · 发布时间: 6年前

内容简介:关于新版本 webpack gulp 兼容 IE8- 的正确姿势

最近在使用 webpack 和 gulp 的时候发现压缩后的 js 在 IE8- 下各种报错,蛋蛋的忧桑。

于是花了几个小时整理了下问题及解决方案。

PS: webpack 的 es3ify-loader 插件因为所在层面不同 (解析层之后才是优化层,如压缩等),所以问题依旧。

问题的核心点

不论是 webpack 还是 gulp 或者是其他第三方压缩插件,基本上都是基于 uglify-js 来压缩代码的,所以问题的根本原因就是 uglify-js 版本过高,导致不兼容 IE8-。

虽然问题描述起来非常简单,但怎么解决呢?

  1. 工具版本回退 (将 gulp, webpack 回退到老版本)
  2. 在 gulp/webpack 处理完后在使用老版本 uglify-js 压缩
  3. 修改 工具 源码 (这是找死行为!!!)
  4. 基于node的模块系统劫持 (感觉不错)
  5. 暂时没想到…

确定兼容版本

既然知道了问题的关键点,那自然是找兼容的版本了。

经过测试后最终确定 uglify-js@2.6.4 版本兼容 IE8-,至于如何测试,最简单的方法用如下代码进行压缩测试。

var obj = {class: 'class'};

压缩后如果是 var obj={class:"class"} 那就是不兼容的,如果是 var obj={"class":"class"} 那就是兼容的。

针对性解决疑难杂症

我想到的第一个方法自然是 版本回退 ,因为这个方法最简单了,而且项目里确实也是这么用的。

比如 gulp-uglify 使用 1.5.4 即可兼容, webpack1 使用 1.12.15 版本即可,至于 webpack2 ,,相当麻烦。

以上是 gulp 和 webpack1 的版本回退方法,非常简单易用。

webpack2 稳定版本完全不兼容,我测试了各个版本确定了 2.1.0-beta.22 版本。

但这不是最终发布版本,肯定不会用这个,那怎么破?继续看下文了。

针对 webpack2 进行模块劫持

由于 node 模块是针对模块绝对路径进行缓存的,那就简单了,

我们直接写一个缓存进去,webpack 就会加载我们的缓存,这样就达到兼容目的。

这里就不解释模块加载原理,感兴趣的自己用 devtool 或者是 vscode 跟踪下 require 行为即可。

第一步,安装 webpack 和 uglify-js@2.6:

$ npm i -D webpack uglify-js@2.6

第二步,劫持webpack内的uglify-js模块:

var path = require('path');

/** 利用模块缓存劫持 webpack 内部的 uglify-js **/
const uglifyJs = require('uglify-js');
const moduleUglifyJs = module.children.filter(m => m.exports === uglifyJs);
const key = path.join(__dirname, 'node_modules/webpack/node_modules/uglify-js/tools/node.js');
module.constructor._cache[key] = moduleUglifyJs[0];
/** 劫持完成 **/

const webpack = require('webpack');

// 这里正常使用
module.exports = {
  entry: './src/*.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].bundle.js',
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: false,
    }),
  ],
};

小节

其实我一开始是打算用方案二的,因为这是传统思路嘛,大多数人应该会想到这个。

但我这个人比较懒,能不改就不改,所以花了点时间折腾下,一劳永逸。

如果之后又出什么幺蛾子,,我可能会采取方案二,毕竟传统、稳定嘛。


以上所述就是小编给大家介绍的《关于新版本 webpack gulp 兼容 IE8- 的正确姿势》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

矩阵计算

矩阵计算

Gene H.Golub、Charles F.Van Loan / 袁亚湘 / 人民邮电出版社 / 2011-3-1 / 89.00元

本书是国际上数值计算方面的权威著作,有“圣经”之称。被美国加州大学、斯坦福大学、华盛顿大学、芝加哥大学、中国科学院研究生院等很多世界知名学府用作相关课程的教材或主要参考书。 本书系统地介绍了矩阵计算的基本理论和方法。书中的许多算法都有现成的软件包实现,每节后还附有习题,并有注释和大量参考文献,非常有助于自学。一起来看看 《矩阵计算》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试