当前位置: 首页 > 知识库问答 >
问题:

将JS与rollup和Babel捆绑在一起,以便在IE11中使用

凌俊材
2023-03-14

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

这里的细节:

  • src/main。js
  • src/utils。js

package.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"
  },
}

rollup.config.js

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'
    })
  ]
};

巴贝尔。配置。js

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

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

但是捆绑的文件还没有准备好IE11:在IE中,我收到错误,例如Object不支持属性或方法“getOwnProperty ty符号”。因此需要添加来自core-js的多边形。

为此,我将core js安装为prod依赖项。现在,rollup-c不会给我警告,但结果是dist/main。js的开头像

(function (exports) {
  'use strict';

  var $ = require('../internals/export');
.
.
.

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

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

共有1个答案

子车鸿才
2023-03-14

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

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

export default {
  // ...
  plugins: [
    // ...
    commonjs(),
  ]    
};
 类似资料:
  • 我有一个基于TypeScript的Vuejs项目,使用Vite编译并打包。 我正在尝试配置构建系统,以编译我的定制服务工作者(src/service worker.ts),并将输出放在dist/service worker中。js。特别是,我不希望它作为应用程序JS包的一部分,因为它需要作为静态网站的一部分,在那个众所周知的URL上提供。 现有结构如下: 我希望输出是这样的: 如果Service

  • 我正在使用来帮助解决我的LitElement项目中的svg导入,推荐如下:https://github.com/rollup/plugins.我还在custom.d.ts中声明了'*. svg'模块,因为我使用的是打字稿。 问题是我不知道如何在rollup的捆绑输出中包含SVG文件,这意味着我的浏览器以后无法导入这些文件,我在控制台中看到401个错误。为了暂时解决这个问题,我只需在需要在自定义Li

  • 问题内容: 我了解launch4j不会将JRE捆绑在中,但是您必须将其放置在它旁边。我的问题是,我应该怎么做?Maven是否有一种方法可以自动找到并复制我用来构建应用程序的JDK的JRE并将其复制到给定目录? 我试图做这样的事情: 但是程序无法启动。它显示了一个小对话框,该对话框立即消失了(它似乎是空白的,但是消失得太快了,我无法真正注意到它)。 问题答案: 更新:删除了我以前的答案,并用经过测试

  • 我有以下结构: 我不知道如何构建一切,以便: 在本地运行服务器,以便调试 制作生产tar(例如使用应用程序插件) 生产应如下所示: ktor作为主服务器 ktor应用程序有API 所有反应JS/超文本标记语言文件也由ktor提供 换句话说,我想从单个Web应用程序提供所有服务。 我知道我可以制作两个独立的服务——一个用于反应,一个用于应用编程接口。但是我想把它捆绑到一个应用程序中。 地方发展要快。

  • 背景: 在我的组织中,有很多基于Java的Windows桌面应用程序。在我们的专有软件部署系统中,应用程序不包含单独的JRE/JDK。而是将一个通用的JRE(到目前为止,Oracle8 Java SE JRE)部署到用户机器上,该机器根据环境变量附加到各个应用程序。 此外,是否可以在JDK11上使用jlink来创建一个包含被删除的Java SE EE模块的运行时?我可以使用Java10中的jlin

  • 长期潜伏者,第一次海报。 基本原则如下: 受这篇博客文章的启发,我试图为我们的QA团队创建一个书签来快速填充表单。 bookmarklet在Chrome、IE 10和IE 9兼容模式下的my machine(TM)上运行非常完美。我已经在QA团队的机器上测试了bookmarklet,虽然它在Chrome浏览器和IE9上运行良好,但bookmarklet在运行IE11的两台机器上不起作用。 详情: