webpack项目中,打包上线后出现报错 SyntaxError: Cannot declare a let variable twice :'e'

在webpack的使用中,问题真是接连不断、应接不暇、接二连三、一错再错。。。
在此之前完全没有系统的学习(虽然觉得系统学过也结果差不多),都是用到哪查到哪,一步一个坑的这么来搞,这不,前两天才刚填过一个,这就又出一个。。。

某个页面开发过程中,webpack-dev-server版本(测试环境)下,测试已经完全ok,完美的项目结束了,结果一上线出现了问题–js报错:

1
SyntaxError: Cannot declare a let variable twice :'e'.

此问题只会出现在ios 10中

反复切换测试和线上环境代码,分析半天源码,确实找不出什么问题,完全摸不着头脑

google一下,还真发现了有同样问题的文章:

文里提到ios 10下的Safari有两个bug,其中一个问题跟我遇到的特别特别像,至少报错一样,而且对此问题的描述是:”其实我们都没有错,我们也没写错,uglify也没搞错,错的是Safari本身。“
这就恶心了。

对于此问题的解决方案:

1
2
3
4
5
6
7
8
9
10
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
},
mangle: {
safari10: true
}
},
})

照着此方法修改了配置文件,重新打包了一下,本以为会解决的问题,却完全没变化。。。

好吧,继续找

回到源码,一个模块一个模块的删掉,反复重新打包(这种调试还真是痛苦)

折腾了好久好久,终于定位到引起问题的模块,是一个swiper的应用,连同swiper一块删掉之后,页面就正常了。

于是,想到,是不是swiper版本有什么问题呢,尝试着换了一个版本,还真的可以了。。。

之前出现问题的版本是npm包托管的最新版swiper,最终改成引入本地lib的4.0.5版。

问题解决,完美上线~

最后,至于为什么webpack-dev-server承载的代码没出现问题,这个还不清楚,后期再慢慢研究吧

本文永久链接: https://www.mulianju.com/cannot-declare-a-let-variable-twice-e/