我按 https://blog.csdn.net/winter_... 这样的方法去兼容 IE9+ ,执行
npm run build 后,将生成的文件用服务器去访问,打开IE调试工具,其中看到生成的一个js里面报错如下:
点击报错的地方直接光标处在箭头函数那,难度没兼容到?
关于js的rule配置:
{
test: /\.js$/,
loader: "babel-loader",
include: [utils.resolve('src')],
exclude: /node_modules/
},
求指点,没有思路!
这是由于IE不认识ES6语法当中的箭头函数导致的。虽然你用了babel,但是babel缺省设置中的一项
exclude: /node_modules/
是把node_modules下的文件排除在外的,因为node_modules中有很多文件,如果每次都babel的话,编译时间会非常长,所以babel要求这些模块提供厂商在dist文件夹下应该放入babel之后的文件,但是有些模块厂商偷懒或者什么原因,把未经babel的文件交给了node_modules,这样就混入了ES6语法,例如箭头函数等,node_modules编译之后的结果是vendor.js,所以你会看到错误出现在vendor.js里。解决方法之一是试图找出到底是哪个依赖包导致混入了ES6语法,然后把这个包从exclude中再排除出去,例如
exclude: /node_modules\/(?!qs)/
就是把模块名中包含有qs字符串的包排除出忽略名单,也就是让babel对node_modules中的qs文件也进行编译。但据有些人说是vue的核心代码混入了ES6,我对此深表怀疑,但如果确实如此的话,恐怕你需要将vue包整个进行babel编译,这个似乎不太可能。但如果确实是这样的话,只好用一下这个工具,但是副作用是打包时间会成倍延长。
所以最好的方法还是找一下到底这段代码来自哪个包,而不是对node_modules下的所有包都进行babel编译,而且这种编译可能会导致更加大的副作用。