使用 Babel 转换 JavaScript 文件以在 IE11 中使用

Converting a JavaScript file with Babel for use in IE11

我有一个 JavaScript 文件 mystuff.js,它在 IE11 中抛出错误(由于 for..of 循环等)。

所以我尝试用 Babel 转换它以便在 IE11 中使用。然而,Babel 的输出似乎与 IE11 不兼容。 (IE 抱怨“SCRIPT5009:'require' 未定义”。)

看来 Babel 的结果并不是真正的 JavaScript for IE11...


这里参考我做的步骤:

  1. 我安装

     yarn add -D @babel/core @babel/cli @babel/preset-env
     yarn add @babel/polyfill
    
  2. 我创建了一个 babel.config.json,内容如下:

{
  "presets": [
    [
      "@babel/env",
      {
        "targets": {
          "edge": "17",
          "firefox": "60",
          "chrome": "67",
          "safari": "11.1",
            "ie": "11"
        },
        "useBuiltIns": "usage",
        "corejs": "3.6.4",
      }
    ]
  ]
}
  1. 我的 JavaScript 文件在 src 中,所以我 运行

     yarn babel src --out-dir lib
    
  2. 我从我的旧 HTML 文件创建了一个新的 HTML 文件,以便它从 lib 而不是 [=17] 加载 JavaScript =]:

     <div id = "info">...</div>
     <script src="./lib/mystuff.js"></script>
    
  3. 我在 IE11 中服务和查看 HTML 文件,但在 IE 的控制台中出现上述错误。

"require" 是 commonjs 模块导入函数,在浏览器中不可用 api(仅 nodejs),您可以在脚本标签和 ES6 模块导入上使用属性 type='module' 但它仅适用于较新的浏览器。 否则,如果你在源代码中使用导入并想将代码发送到旧浏览器,你需要使用打包器,如 webpack、rollup 或 parcel(比 webpack 更容易设置),Babel 仅 polyfills javascript 但不会捆绑模块。

您还需要确保 babel 不会将 ES6 模块转换为 commonjs 模块 (https://babeljs.io/docs/en/babel-preset-env#modules),因为正如我之前所说,浏览器不支持 commonjs