@babel/pollyfill 的兼容性

@babel/polyfill使用的坑还是比较多的:

最需要理解的是,babel只会转换E6语法,而不会转换新的api,让新的api生效的方法是使用传统的polyfill,为此需要引入这个模块
安装的时候必须用 --save 保证引用到生产环境而不是开发环境,当然,弄错了,自己手动在package.json中修改也是可以的。
浏览器环境下使用,用script标签引用模块下的polyfill.min.js文件,即可实现polyfill的导入
坑主要在于:

有些人不理解@babel/polyfill到底做了什么,以为运行了命令行工具也会将新的api转换成原有代码,事实上只是引入了大量的polyfill而已
浏览器环境下使用@babel/standalone动态的将ES6转换成ES5,针对IE11,模块引用了Object.assign这个新的api,因此需要使用@babel/polyfill。当然,自己写一个polyfill实现也是可以的。
以下的官方文档翻译:最后,我会给出一个在IE11下使用@babel/standalone和@babel/polyfill的例子,不过还是要强调一点,真实开发还是使用命令行工具,直接转成ES5再运行,这样效率会更高,也不会耦合。

兼容IE浏览器的ES新方法,比如Array.from()、Object.assgin()方法、Promise等方法,需要引入@babel/pollyfill 来转换ES语法兼容IE,但是直接引入的话,导致sdk文件过大,常规应该使用 

const presets = [
    [
      "@babel/preset-env", {
        "targets": {
          "chrome": "70",
          "ie": "11"
        },
        "useBuiltIns": "usage"
      }
    ]

但是配置往往需要排除node_modules 文件夹中的内容,如果依赖包中有不兼容IE新语法,则也会导致发生错误,所以找到了script标签的cdn资源,在ie浏览器中引入即可,不影响其他环境的sdk大小

https://cdn.bootcss.com/babel-polyfill/7.6.0/polyfill.js

 

posted @ 2022-11-14 18:45  小猪冒泡  阅读(132)  评论(0编辑  收藏  举报