【问题标题】:How to handle IE11 compatibility on each dependent packages?如何处理每个依赖包的 IE11 兼容性?
【发布时间】:2021-11-04 05:36:21
【问题描述】:

我正在构建一个使用 React(v.17.0)、Next.js(v11.1.2) 和其他堆栈的应用程序。

Next.js 可能默认支持 IE11。

在我将一些包添加到我的项目后,它在 IE11 上失败了。它说,在控制台中,不支持传播运算符和其他一些东西。

我猜原因是出现问题的包没有正确设置。例如,包是在 typescript 中构建的,但它们没有将 tsconfig.compilerOptions.target 指定为 es5。我查了源码。

我试过了

  1. 在 pages/_app.js 中添加 react-app-polyfill/ie11

我应该试试吗……

  1. 贡献每个包,使其与 IE11 兼容。

  2. Webpack 或 babel 设置:我以前从未做过自定义 webpack 或 babel 设置。我总是使用默认设置。我没有尝试过,因为我知道 webpack 和 babel 会影响项目源,但不确定它是否也会影响依赖包。

【问题讨论】:

    标签: reactjs webpack next.js babeljs internet-explorer-11


    【解决方案1】:

    正如您所提到的,展开运算符在 IE 中无法正常工作。这是因为它是 ES6 的一部分,而 IE 不支持此功能。浏览器兼容性表可以从这个文档查看:Spread syntax (...)-Browser compatibility

    所以你可能需要把它转成ES5,通常你可以使用像Babel这样的转译器,简单的配置示例:

    {
     test: /\.js$/, //Regular expression 
     exclude: /(node_modules|bower_components)/,//excluded node_modules 
     use: {
     loader: "babel-loader", 
     options: {
       presets: ["@babel/preset-env"]  //Preset used for env setup
      }
     }
    }
    

    另一种选择是根据情况定义自己的函数。

    【讨论】:

    • 感谢您的回答!我应该在我的情况下包含 node_modules 吗?问题出现在我导入的库中。
    • 我发现你提到tsconfig.compilerOptions.target在项目中没有设置为es5。我认为这可能是问题的原因。可以适当参考this case。所以你可以将此属性设置为es5进行测试,也可以尝试使用babel将es6翻译成es5。
    猜你喜欢
    • 2016-11-23
    • 2018-02-23
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2021-12-14
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多