问题描述
babel中babel-preset-env可以根据不同的浏览器版本针对这些版本进行选择性编译
例如
{
"presets": [
["env",{
"targets": {
"chrome": 25,
"browsers": ["last 2 versions","safari 7"]
}
}]
]
}
上边的意思就是针对大部分浏览器最新的两个版本以及IE 7+以及chrome25版本进行转码编译
但是这样只是针对需要转码的浏览器做的一套适配,像高版本chrome浏览器已经支持了es6,那么肯定就不需要转码了,所以我想问下怎么针对不同浏览器做转码与不转吗或者部分转码的适配
说下自己的理解
1 针对不同浏览器版本每次手动配置babel并且编译出不同的js,然后页面中有个初始检查模块用来检测当前浏览器版本,然后调用不同的js(支持es6的使用最新语法js,不支持的使用转码的js)
2 针对不同浏览器版本每次手动配置babel并且编译出同一个js,但是这个js里面可以根据不同浏览器选择不同的方法来执行(目测这种方式肯定不行,为了适配增加了不必要的代码,而且实行起来可能也很麻烦)
总结:所以babel是如何做到真正按需分配的?
babel
只是按照你配置的环境进行转码了啊,所谓的转码其实也就是把一些浏览器不支持的新语法,转换成老语法.你的问题是问你要如何做到兼容所有版本浏览器吗? 还是不知道
babel
如何按照浏览器转码?兼容所有浏览器只需要兼容低版本就可以了,因为js大部分特性是可以做到向下兼容的.也就是新浏览器仍然支持老语法.
babel按照你输入的浏览器版本和其他条件,去查询对应的js支持版本,然后找到所有条件下支持的最高级别Js版本,转码到该版本.转码过程跟浏览器没有任何关系,只是在
node
环境中进行.