鍍金池/ 問答/HTML/ babel如何根據(jù)不同瀏覽器編譯不同js

babel如何根據(jù)不同瀏覽器編譯不同js

問題描述
babel中babel-preset-env可以根據(jù)不同的瀏覽器版本針對這些版本進行選擇性編譯
例如

{
"presets": [
    ["env",{
        "targets": {
            "chrome": 25,
            "browsers": ["last 2 versions","safari 7"]
        }
    }]
]
}

上邊的意思就是針對大部分瀏覽器最新的兩個版本以及IE 7+以及chrome25版本進行轉(zhuǎn)碼編譯
但是這樣只是針對需要轉(zhuǎn)碼的瀏覽器做的一套適配,像高版本chrome瀏覽器已經(jīng)支持了es6,那么肯定就不需要轉(zhuǎn)碼了,所以我想問下怎么針對不同瀏覽器做轉(zhuǎn)碼與不轉(zhuǎn)嗎或者部分轉(zhuǎn)碼的適配

說下自己的理解
1 針對不同瀏覽器版本每次手動配置babel并且編譯出不同的js,然后頁面中有個初始檢查模塊用來檢測當前瀏覽器版本,然后調(diào)用不同的js(支持es6的使用最新語法js,不支持的使用轉(zhuǎn)碼的js)
2 針對不同瀏覽器版本每次手動配置babel并且編譯出同一個js,但是這個js里面可以根據(jù)不同瀏覽器選擇不同的方法來執(zhí)行(目測這種方式肯定不行,為了適配增加了不必要的代碼,而且實行起來可能也很麻煩)

總結(jié):所以babel是如何做到真正按需分配的?

回答
編輯回答
舊酒館

babel只是按照你配置的環(huán)境進行轉(zhuǎn)碼了啊,所謂的轉(zhuǎn)碼其實也就是把一些瀏覽器不支持的新語法,轉(zhuǎn)換成老語法.

你的問題是問你要如何做到兼容所有版本瀏覽器嗎? 還是不知道babel如何按照瀏覽器轉(zhuǎn)碼?

  1. 兼容所有瀏覽器只需要兼容低版本就可以了,因為js大部分特性是可以做到向下兼容的.也就是新瀏覽器仍然支持老語法.

  2. babel按照你輸入的瀏覽器版本和其他條件,去查詢對應(yīng)的js支持版本,然后找到所有條件下支持的最高級別Js版本,轉(zhuǎn)碼到該版本.轉(zhuǎn)碼過程跟瀏覽器沒有任何關(guān)系,只是在node環(huán)境中進行.

2018年6月7日 20:18
編輯回答
晚風眠

本人新手,湊個熱鬧,說的不對的,請指正:你的主要的想法是不是,針對某一段代碼,如果運行環(huán)境(瀏覽器)支持新語法,則使用新語法來實現(xiàn),不然就用舊語法?見過一些兼容性的代碼里,在使用某一個新語法時,會先去判斷運行環(huán)境是不是支持,(一下子舉不出什么例子,但是印象深刻的是針對IE有很多),這可能是ployfill的作用了。

2017年12月14日 19:49