webpack-china / webpack-issues

社区成立早期问题收集处
7 stars 0 forks source link

es3ify-loader解析到import()时会报错 #3

Closed et-hh closed 7 years ago

et-hh commented 7 years ago

import()为es6的一种模块规范,但是es3ify-loader识别到这个函数时会报错:unexpected import Identifier

why?

et-hh commented 7 years ago

怎么解决?不用es3ify-loader的话,default,catch等ie8特殊字段怎么处理?

et-hh commented 7 years ago

发现似乎可以用transform-es3-member-expression-literal和transform-es3-property-literals替代es3ify-loader. 但是问题又来了,ie8下会报错:例外被抛出且未被接住。我草! http://www.aliued.com/?p=3240,这个网站上有说这个问题,但是并不完全相同

et-hh commented 7 years ago

我这边这个问题的源头在__webpack_require_d中,说明这是wepack自身的代码

et-hh commented 7 years ago

我用的是webpack2.2.1,上面那个错误已经到webpack代码里面去了,说明webpack2已经不能使用上述两个插件了 找到了 https://github.com/xcatliu/react-ie8 说用es3ify或者es3ify-loader,既然es3ify-loader有问题,那么接下来试试es3ify

et-hh commented 7 years ago

妈的又发现坑:babelrc文件设置es2015的modules选项为false时,es3ify-loader同样会报unexpected import Identifier;

经过查阅,modules设为false的意思是不对模块化语句进行转义,比如:import;而es3ify-loader无法识别import,所以报错。而不设置这个属性,import XX from XX 会被转义为正常的es5语法,所以es3ify-loader不会对其报错

由此确定,最上面提出的问题并非由es3ify-loader导致,而是因为babel-loader没有把import()函数做转换

问题终于得到定位

et-hh commented 7 years ago

经过查阅,babel对import()的支持将在即将到来的stage-4中实现,但是现在还没有,还是只能依赖webpack本身去解析,这样一来,import()暂时还无法与es3ify-loader一起使用,或者说在一次webpack编译中两者不能共存