在执行启动npm start
正常,npm run build
失败的情况下,原因之一是 Uglifyjs
只能压缩es5
代码,遇到es6
代码会报错.
通常 webpack
在构建时,是不会让 node_modules
下的文件走babel tranpile
的,一是会慢很多,二是 babel@6
时编译编译过的代码会不安全(据说 babel@7 下没问题了),所以业界有个潜在的约定,npm
包发布前需要先用 babel 转出一份 es5 的代码。
但是有些 npm
包不遵守这个约定,没有转成 es5
就发上去,比如 query-string@6。
然后压缩工具uglify
又只支持 es5
的语法,遇到 const、let、()=>
类似的语法,就抛错了。
解决办法
umi
确保 umi
在 1.2.4 或以上,然后在.webpackrc
里配:
export default {
es5ImcompatibleVersions: true,
}
roadhog
确保 roadhog
在 2.4.0-beta.3
或以上,然后在.webpackrc.js
里配:
export default {
es5ImcompatibleVersions: true,
}
使用 uglify-es 进行压缩
uglify-es
支持 es6
语法,所以不会报错。但问题是如果你需要在 IE11 及以下,或者其他的低版本浏览器里跑时,就会报错、白屏了。
升级bable到bable7
由于 babel@7
可以保证编译编译过的代码不会出问题