webpack3.6.0打包报错
moxiaozhou opened this issue · comments
已通过升级uglifyjs为uglifyjs-webpack-plugin解决该问题,但是该插件语法在微信pc端不支持
@moxiaozhou 微信pc端是什么鬼?你是如何在微信pc版使用本项目的?
就是微信pc版(windows7)。打开分享过来的链接,项目是直接在微信自带的浏览器上打开,场景就是这个样子的
我们遇到一样的问题,打包提示错误。
@moxiaozhou
我检查了微信pc版的 userAgent 如下:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.1021.400 QQBrowser/9.0.2524.400
也就是说微信pc版使用了 Chrome 39 的老内核(现在Chrome都出到74了)。
由于内核太老,我难以保证其兼容性。
已更新 README.md,注明了浏览器兼容性。
后续我将增加兼容性检测功能。在这个功能完成之前,本Issue将一直Open。
同遇到打包提示错误,不过不影响打包。报错如下
ERROR in bundle.js from UglifyJs
SyntaxError: Unexpected token: name (ctx) [./~/benz-amr-recorder/BenzAMRRecorder.js:284,0]
怀疑是ES6语法的问题导致。
@WingsLin @moxiaozhou 才看到你们都使用了 UglifyJs。
@imndx 你是不是也一样用了 UglifyJs?
本项目使用了ES6语法,即使是已压缩的 BenzAMRRecorder.min.js
也一样保留了部分ES6语法。
而 UglifyJs 只支持 ES5。它的官方 Github 页 有这个一句:
uglify-js only supports JavaScript (ECMAScript 5).
我之所以没有把它转换成ES5,是因为本项目使用了 Web Audio API,而支持 Web Audio API 的浏览器都已经原生支持了一部分ES6语法,浏览器直接执行 BenzAMRRecorder.min.js
是没有问题的。保留ES6可以让js体积更小。
建议你们改用 terser 打包,它的用法与 UglifyJs 基本相同。
或者把本项目加入 babel 的 include 选项中,让 babel 转换成 ES5。
更正一下,打包报错其实有影响到打包,就是打包出来的js文件没有进行压缩。现已把该项目加入babel的include选项,转换为ES5的语法,就不报错了。谢谢 @BenzLeung ,这个插件真心真心帮了大忙,使用起来非常简便。
@BenzLeung 这个是本地通过localhost访问时,会这样报错。我已经试过打包编译之后是可以用的,没有上面的错误。上面的三个“slice”错误就是因为我的语音文件有三个,所以会有三个错误信息。
我的webpack是3.12.0,aot也是报错了,如果更改压缩方式可能成本较大。对于楼上所说的升级为uglifyjs-webpack-plugin,目前平台里两个都有。加入 babel 的 include的方案也尝试过了,还是没有成功,或者是否可以贴出实际解决方案的代码。
@menglu628 或者试试把 uglifyjs-webpack-plugin
直接替换成 terser-webpack-plugin
?
请问cocos creator打包web mobile 报错:Build Failed: GulpUglifyError: unable to minify JavaScript!该如何处理?把uglifyjs改成uglifyjs-webpack-plugin和terser-webpack-plugin都尝试过了,无效
@DavidJone cocos用的不是webpack,而是gulp。你须把uglifyjs换成terser并寻找terser对应的gulp解决方案。