将 JS 与 rollup 和 Babel 捆绑在 IE11 中使用

hal*_*leo 4 javascript internet-explorer module babeljs rollupjs

我尝试捆绑两个 JavaScript 模块,以便生成的代码在 IE11 中工作。为此,我设置了一个 yarn/npm 项目,该项目使用rollup.js进行捆绑并使用Babel进行转译。一切正常,直到我添加(非开发)依赖项core-js

这里的细节:

1添加core-js之前的设置

JS文件

  • 源代码/main.js
  • 源代码/utils.js

配置文件

包.json

{
  "name": "rollup_for_ie",
  "devDependencies": {
    "@babel/core": "^7.11.1",
    "@babel/preset-env": "^7.11.0",
    "@rollup/plugin-babel": "^5.2.0",
    "@rollup/plugin-node-resolve": "^9.0.0",
    "rollup": "^2.24.0"
  },
}
Run Code Online (Sandbox Code Playgroud)

汇总配置文件

import resolve from '@rollup/plugin-node-resolve';
import babel from '@rollup/plugin-babel';

export default {
  input: 'src/main.js',
    output: {
        file: 'dist/main.js',
        format: 'iife'
    },
  plugins: [
    resolve({
      browser: true
    }),
    babel({
        exclude: "node_modules/**", // only transpile our source code
        babelHelpers: 'bundled'
    })
  ]
};
Run Code Online (Sandbox Code Playgroud)

babel.config.js

module.exports = {
  presets: [
    [
      "@babel/preset-env",
      {
        targets: {
          browsers: "> 0.5%, ie >= 11"
        },
        modules: false,
        spec: true,
        useBuiltIns: "usage",
        forceAllTransforms: true,
        corejs: 3
      }
    ]
  ],
};
Run Code Online (Sandbox Code Playgroud)

当我运行时,rollup -c我收到有关未解析依赖项的警告,但会生成一个dist/main.js包含src目录中(已使用)内容的捆绑文件。生成的文件甚至可以在 Chrome 等现代浏览器中使用。到现在为止还挺好。

添加core-js后的问题

然而,捆绑的文件尚未准备好 IE11:在 IE 中,我收到错误,如Object does not support property or method 'getOwnPropertySymbols'。所以需要添加来自core-js的 polyfill 。

为此,我将core-js安装为 prod 依赖项。现在rollup -c没有给我警告 - 但产生的dist/main.js开始像

(function (exports) {
  'use strict';

  var $ = require('../internals/export');
.
.
.
Run Code Online (Sandbox Code Playgroud)

作为脚本,Chrome 和 IE 都不能执行!看起来core-js库的存在以某种方式抛出了汇总打包器。

如何修复我的设置,以便结果dist/main.js在 Chrome 和 IE11 中作为非模块脚本工作?

tmh*_*005 6

我认为当您启用该选项时useBuiltIns: "usage",这意味着它会将代码附加corejs到您的模块文件中,这些文件是用cjs样式编写的。所以你必须添加这个插件@rollup/plugin-commonjs来转换回esm,然后它会起作用:

import commonjs from '@rollup/plugin-commonjs';

export default {
  // ...
  plugins: [
    // ...
    commonjs(),
  ]    
};
Run Code Online (Sandbox Code Playgroud)

  • 在 IE 中完美运行。再次感谢@tmhao2005!:-) (2认同)