Rollup.js 如何导入js文件(不是es6模块)而不进行任何更改(myvar$extrastring)

2024-06-03

首先,我理解为什么 rollup.js 需要在某些变量的末尾附加额外的字符串以避免冲突,但是...... 我不明白如何“连接/导入”一个简单的 javascript 文件,该文件不是 amd/commonjs/es6,而是简单的揭示模块!

我有以下文件结构:

foo.js

var Foo = (function () {

    var someMethod = function () {};

    return {
        someMethod: someMethod
    };

})();

bar.js

(function(module) {

    module.bar = "bar";

})(Foo);

main.js

import "foo.js"
import "bar.js"

构建后,我得到:

build.js

var Foo$1 = (function () { // Here the problem

    var someMethod = function () {};

    return {
        someMethod: someMethod
    };

})();

(function(module) {

    module.bar = "bar";

})(Foo); // Ouupss !

那么我怎样才能得到 Foo 而不是 Foo$1 呢?或者 Foo$1 而不是 bar.js 的 Foo ?

Edit:

如果在 main.js 中,我在视图中使用默认导入来覆盖默认名称:

import Foo from "foo.js"

我收到这样的错误(正常!):

不存在的导出“default”是由 main.js 从 foo.js 导入的

这是一个误解,但在研究了 stackoverflow 和互联网之后,我没有发现如何解决这个棘手的问题。

所以...提前致谢!


Rollup 不会连接 JavaScript 文件;它将一组 ES2015 模块转换为功能等效的单个脚本。 ES2015 模块的功能与大多数其他语言中的模块不太一样(当然不像 C/C++#includes!), 我建议在这里阅读有关它们的内容。 http://exploringjs.com/es6/ch_modules.html如果您想导入常规 JavaScript 文件,则必须将其转换为 ES2015 模块,在紧要关头可以使用汇总插件 https://github.com/rollup/rollup/wiki/Plugins。例如,这是一个糟糕的通用解决方案,但您可以在 rollup.config.js 中添加类似的内容:

import replace from 'rollup-plugin-replace';

export default {
  entry: './src/main.js',
  dest: './dist/bundle.js',
  plugins: [
    replace({
      include: './src/main.js',
      values: {
        'var Foo =': 'export default'
      }
    })
  ]
};

也许应该有一个插件可以自动导出东西,但似乎没有。

ES2015 模块不共享范围。因此,当你声明一个变量时Foo在 foo.js 中,该变量在 bar.js 中不存在。当您尝试访问名为的变量时Foo在 bar.js 中,它将它作为全局变量查找,就好像您没有在任何文件中声明它一样。通过重命名 foo.jsFoo to Foo$1,Rollup 通过阻止 foo.js 的本地行为来确保正确的行为Foo以免影响全球Foo.

为了在模块之间共享数据,您需要导出内容。这是重写示例的一种方法:


foo.js

export default (function () {

    var someMethod = function () {};

    return {
        someMethod: someMethod
    };

})();

bar.js

import module from './foo.js';

module.bar = "bar";

main.js

import "./bar.js"

但该代码不能很好地利用模块。你更有可能写这样的东西:


foo.js

export function someMethod () {}

bar.js

export { someMethod } from './foo.js';

export const bar = "bar";

main.js

import * as Bar from "./bar.js";

由于 Rollup 可以更多地推断通过导入和导出共享代码时如何使用代码,因此它可以做出更明智的决策,决定哪些代码必须保留,哪些可以在输出中丢弃,而不会影响功能。对于第二个示例,它根本不输出任何代码,这一事实证明了这一点。两者实际上都没有做任何事情,但 Rollup 无法确定第一个,因为它用数据做了复杂的事情,而不仅仅是使用导出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rollup.js 如何导入js文件(不是es6模块)而不进行任何更改(myvar$extrastring) 的相关文章

  • 克隆表行

    我怎样才能使用javascript 我假设 来克隆一个表格行 就像下图所示的那样 您可以将现场活动连接到所有按钮 例如 如果您给他们一类克隆 则以下内容将起作用 input clone live click function put jqu
  • 用玩笑模拟高阶组件

    我想确保 HOC 组件被开玩笑地调用 但我似乎无法理解jest mock上班 我的 HOC 是这样的 const withEntity args gt const wrappedComponent WrappedComponent gt c
  • 如何在 Jasmine JS 中重用 beforeEach/afterEach?

    当使用 JasmineJS 编写测试时 我有许多具有类似 beforeEach afterEach 代码的测试 有没有办法使用 JasmineJS 测试套件实现继承模型 我可以将所有测试分组为一个describe但在这种情况下 我将以包含所
  • 角度单元格 xlsx 着色

    我有一个问题 我想根据一个值在我的 exel 行中添加红色或绿色来下载 如何在工作表中设置指定单元格的颜色 这是处理 exel 格式的 ts 类 表达 import Injectable from angular core import a
  • 计算两列中两个总和的平均值,并将其显示在 JQGrid 的下一列中

    I m using Jqgrid with summery row at grouping level Now I want to know one thing that Is it possible to show average cal
  • 如何捕获jquery中的任何点击事件[重复]

    这个问题在这里已经有答案了 我有一个按钮 当单击它时 会显示一个带有图像的 div 例如聊天的表情符号面板 如果我再次单击它 div 会隐藏 但我想要做的是 如果 div 已经显示 然后我单击页面的任何其他内容 我想隐藏它 我试过这个 my
  • 防止 Node.js 中的 SQL 注入

    是否有可能以与 PHP 具有防范 SQL 注入的预准备语句相同的方式防止 Node js 中的 SQL 注入 最好使用模块 如果是这样 怎么办 如果不 有哪些例子这可能会绕过我提供的代码 见下文 一些背景 我正在制作一个 Web 应用程序
  • 如何在 Chrome 中将 Set 转换为数组?

    如何将集合转换为数组 https stackoverflow com questions 20069828 how to convert set to array给出了将 Set 转换为 Array 的三个答案 目前在 Chrome 浏览器
  • `forEach` 函数中的 `return` 关键字是什么意思? [复制]

    这个问题在这里已经有答案了 button click function 1 2 3 4 5 forEach function n if n 3 it should break out here and doesn t alert anyth
  • 为什么 jQuery 对损坏标记的解释与浏览器不同?

    我之前已经回答过这个问题 https stackoverflow com a 19101905 1253312 但我并不完全理解why答案是正确的 答案的要点 p p function jqrender html a href http w
  • 将“http://”添加到尚未包含“http://”的 URL 前面

    我有一个input保存 URL 的字段 我希望这个保存的输入能够识别变量开头不存在 Http 但不知道从哪里开始 是否可以仅检查字符串的一部分 然后有一个在必要时追加的函数 如果您还想允许 https 我会使用如下正则表达式 if http
  • 如何在传单地图上显示热图

    我想在我的传单地图上显示热图 我使用了 heatmap jshttps github com pa7 heatmap js https github com pa7 heatmap js但它最终只是显示 未捕获的类型错误 无法分配给只读属性
  • 提交外部有 INPUT 的表单,并修改值后

    我有一个form 有几个
  • 从数组中删除空字符串,同时保持记录而不循环?

    这个问题在这里被问到 从数组中删除空字符串 同时保留非空字符串的索引记录 https stackoverflow com questions 18113243 remove empty strings from array while ke
  • Swiper 8 和笑话

    Swiper 8和Jest 支持ESM 必须使用import来加载ES模块在此输入图像描述 https i stack imgur com e3bB4 png 在此输入图像描述 https i stack imgur com nUmhq p
  • 尝试将远程图像转换为 Base64 数据时出现 CORS 错误[重复]

    这个问题在这里已经有答案了 我需要将远程图像转换为给定其 URL 的 base64 但我遇到了 CORS 错误 并且不确定如何解决 我遵循了这个问题的一些解决方案 如何使用javascript将图像转换为base64字符串 https st
  • 从组件刷新/重新加载 ember 路由

    我有一个组件 它实际上是一个模式对话框 当我完成该对话框并按 确定 按钮时 我想留在打开该对话框的停留页面上 这并不难 但问题是该对话框更改了数据 我通过 REST 调用获取数据 因此我需要刷新已经所在的路线以反映数据更改 因为我是从组件中
  • 过滤数据表中的行

    我目前的 JQuery 插件 DataTables 工作正常 并且我在页面顶部插入了一个按钮来进一步过滤列表 我还使用了 DataTables 内置的搜索栏 我希望按钮向下过滤表格 并只显示包含特定值的行 下面是我一直在做的事情 但似乎没有
  • 为什么我的数据没有存储到我的 Firebase 实时数据库中?

    我正在尝试为网络应用程序制作一个注册页面 这会将数据发送到 firebase 数据库 我已阅读官方 firebase 文档并按照说明写入数据 但什么也不会写 在我的数据库控制台中 它显示的所有内容都是空 而不是我的数据 我没有收到控制台错误
  • JavaScript 模板文字稍后替换变量(在知道值之前)

    是否可以在已知值之前以某种方式使用模板文字 JS 模板文字的每个演示都如下所示 var name John var s Hello name 但在现实世界中 模板是在我们知道变量值之前定义的 某处定义了模板 在页面加载时 var s Hel

随机推荐

  • 敏感性特异性图 python

    我正在尝试重现类似于此的灵敏度特异性图 其中 X 轴是阈值 但我还没有找到如何做到这一点 一些 skalern 指标 如 ROC 曲线 会返回真阳性和假阳性 但我还没有找到任何选项来制作此图 我试图将概率与实际标签进行比较以保持计数 我得到
  • Azure 机器学习 - CORS

    我已经搜索了几个小时 但找不到任何可以回答这个问题的东西 我创建并发布了新的 Azure 机器学习服务 并创建了一个终结点 我可以使用 Postman REST 客户端调用该服务 但通过 JavaScript 网页访问它会返回一个控制台日志
  • 使用 typeid 获取派生类的名称

    我正在创建一个资源管理器 它接受从该类派生的类Resource 我的问题是 typeid name 返回错误的类名称 我想将纹理等资源添加到地图中 如下所示 typedef std unordered map
  • 先下载数据,然后在TableViewcontroller上显示

    我有 tableviewcontroller 和从服务器获取的数据 我使用以下类来下载异步数据 但我的问题是当用户看到 tableViewcontroller 时正在加载数据 我希望在用户看到之前加载数据 import
  • 在同一迭代中过滤和映射

    我有一个简单的情况 我想过滤并映射到相同的值 如下所示 const files results filter function r return r file map function r return r file 为了节省代码行并提高性
  • 在 swift 中使用自定义字体[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个用于 swift sprite kit iOS 的字体 该字体用于商业目的 我正在尝试拥有一
  • 创建新应用程序时默认在 android 中创建线性布局而不是相对布局

    为什么当我在android中创建新应用程序时它使用相对布局而不是线性布局 当我默认创建新应用程序而不是相对布局时 如何创建线性布局 enter code here
  • 扩展功能是虚拟的以调度接收者?

    在科特林中将扩展程序声明为成员 https kotlinlang org docs reference extensions html 这是什么意思 此类职能的派遣是virtual关于调度接收器类型 但是static关于扩展接收器类型 这是
  • 内在数组访问比 std::vector 访问快得多——黑魔法?

    我已经设置了一个测试程序来将数组访问性能与 std vector 的访问性能进行比较 我发现了几个类似的问题 但似乎没有一个问题能解决我的具体问题 一段时间以来 我一直在摸不着头脑 为什么数组访问似乎比向量访问快 6 倍 而我过去读到它们应
  • 使用 AVAssetExportSession 导出延时会导致黑色视频

    我需要能够合并使用 iOS 上的相机应用程序中的延时拍摄功能拍摄的视频并导出为单个视频 但是 即使我尝试将单个未更改的延时视频导出到照片库 它也会保存为全黑视频 具有正确的持续时间 以下是我编写的示例代码 用于导出单个未更改的视频 其中大部
  • 一般处理枚举的 Scala 类

    我想创建一个通用类来保存枚举的值 并且还允许访问枚举的可能值 以属性编辑器为例 您需要知道属性的当前值 并且还需要能够知道该属性的其他合法值 并且枚举的类型不应该提前知道 您应该能够使用任何类型的枚举 我的第一个想法是这样的 class E
  • 在 ruby​​ 中获取多维数组的维度

    我刚刚开始学习红宝石 现在我需要计算出多维数组的维数 我查看了所有数组方法的 ruby docs 但找不到返回维度的方法 这是一个例子 For 1 2 3 4 5 6 维数应为 2 For 1 2 2 3 3 4 5 维度应为 3 简单的
  • Java8流操作有缓存吗? [复制]

    这个问题在这里已经有答案了 我在我的电脑上运行了下面的示例代码Intel R Xeon R CPU E5 2680 0 2 70GHz 2 CPUs 2 7GHz String format 7s run taken 6d micro se
  • IplImage 内的 IplImage

    是否可以使用 OpenCv JavaCv 将图像放置在图像内 例如我有一个 1000x1000 图像和一个 100x100 图像 在 600x600 的位置 我想将较小的图像放置在较大的图像内 假设蓝色框是 1000x1000 IplIma
  • 如何在测试期间强制锁定升级(以消除死锁问题)?

    在此发布问题和一个答案 也许有人有更好的答案 编写触发死锁的代码是可能的即使对于单个用户如果开发人员不小心打开了与数据库的第二个连接 而不是重用现有的连接 可能已经有一个打开的事务 某些 O RM 和 LINQ 框架很容易犯这个错误 以下是
  • 使用 lift-json 反序列化具有 Map[String,Any] 属性的案例类

    几天来我一直在努力解决一些通过 lift json 应该很简单的事情 将映射序列化为 JSON 我知道 我知道 根对象还不能是 List 或 Map 但我愿意暂时包装在一个案例类中 但我仍然无法让它工作 感谢一些堆栈溢出帮助 我已经可以进行
  • PHP,JSON 解码中的无效字符

    我在让 json decode 处理我收到的特定字符串时遇到问题 我已将其范围缩小到这一行 systemNotes 6 2013 年 1 月 9 日 12 52 PM 测试名称 帐单地址 2 已更改为送货姓名 送货姓氏 电子邮件地址 送货地
  • 具有 3 路划分的快速排序

    什么是三向分区快速排序 画一个数组 3 5 2 7 6 4 2 8 8 9 0 A 两分区快速排序会选择一个值 比如 4 并将每个大于 4 的元素放在数组的一侧 将每个小于 4 的元素放在另一侧 就像这样 3 2 0 2 4 8 7 8 9
  • 无法执行dex:多个dex文件定义了Landroid/support/v7/util/ThreadUtil$MainThreadCallback;

    我无法执行 dex 多个 dex 文件错误 控制台错误 2015 12 22 16 39 38 Dex Loader Unable to execute dex Multiple dex files define Landroid supp
  • Rollup.js 如何导入js文件(不是es6模块)而不进行任何更改(myvar$extrastring)

    首先 我理解为什么 rollup js 需要在某些变量的末尾附加额外的字符串以避免冲突 但是 我不明白如何 连接 导入 一个简单的 javascript 文件 该文件不是 amd commonjs es6 而是简单的揭示模块 我有以下文件结