记录一个关于babel的问题

今天帮同事调试一个问题,发现iOS9下面不支持const的关键字。当然这不是什么问题,问题就是为什么babel没有将const转成var呢。起初怀疑的是presets没有配置好。

1
2
3
4
5
6
7
8
9
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],

然而无论怎么配置都还是没有结果。这个时候就不得不怀疑上是不是引用的库有问题。找上那个库,看了一下package.json。

1
2
3
4
{
"main": "dist/xxx.js",
"module": "src/index.js",
}

因为引用是通过模块的引用方式,所以就去看了一下src/index.js的源码。果然就是这地方的问题,index.js里面使用了let,const了,也就是说这个库没有经过babel转译。一般我们在webpack里面的babel-loader配置了exclude: node_modules,这就是为什么src/index.js没有经过babel转译的原因了。这时候只要配置一下include包含这个库就好。
解决完上面的问题之后,还是得反思一下。写这些发布在npm上的东西,无论是main入口还是module入口的js,最好还是提供es5版本的,免得出现不兼容的问题。当然如果明确了不支持那些相对较旧的浏览器这样就没啥问题了。
写这个主要还是为了提醒一下自己,在写库时提供es6模块版本的时候究竟要不要处理成es5再提供给使用者。i