在 Require.js 中填充一个使用 module.exports 的模块可能吗?

2024-03-04

我有一个模块想要包含在 Require.js 链中。 (进一步来说:https://github.com/component/emitter https://github.com/component/emitter)

在浏览器上我得到:uncaught reference error: module is not defined

对于模块导出,它定义:module.exports = Emitter;

我猜这就是所谓的 AMD/Node 方式。如有错误请指正。

无论如何,我希望 require.js 能够以某种方式在浏览器中进行模块。 我原以为 Require.js 的声明式填充选项可以帮助我,但我仍然看到上述错误。

如果不手动修补模块,如何解决这个问题? (因为我想保留我设置的自动构建过程)


组件是 CommonJS 模块

组件框架是以 CommonJS 模块格式编写的组件的集合。模块的预期值被简单地分配给一个名为“神奇属性”的module.export,旨在由 JS 运行时提供。

这不是 Web JS 运行时的工作方式,因为 CommonJS 模块会对特定的工作流程做出假设。如果无法同步保证文件已加载(或在未加载时发生灾难性失败),浏览器就无法支持与独立环境相同的工作流程。因此,以 CommonJS 格式编写的任何内容都必须进行包装以考虑到这一点。

为了将 CommonJS 模块与 RequireJS 等 AMD 风格的模块加载器一起使用,您可以自己包装所需的模块,也可以使用 r.js 构建工具。

手动包装 CommonJS 模块

define(function(require, exports, module) {
  //Put traditional CommonJS module content here
});

From: CommonJS 注释 http://requirejs.org/docs/commonjs.html#manualconversion

使用 r.js 自动包装

r.js -convert path/to/commonjs/modules path/to/converted/modules

鉴于您已经安装了r.js with npm -g i requirejs.

解决具体问题

然而,这一切只是解决更普遍的问题“如何在异步工作流程中使用 CommonJS 模块?”看来您实际上想要实现的目标只是能够获得一个事件系统,而无需自己编写它。

由于您要在客户端加载此功能,因此有很多客户端库已经提供了此功能。提供此服务的最受欢迎的库可能是Backbone.js 的事件 http://backbonejs.org/#Events。使用 Backbone 事件的好处是 Backbone 得到了很好的支持,并且有很好的文档记录。缺点是 Backbone 是您必须加载的另一个依赖项(包括它自己的依赖项 Underscore)。此外,Backbone 导出到全局变量,因此您需要声明一个 RequireJS shim 配置才能require() it.

真正的AMD

圣杯将是一个小型且与 AMD 兼容的 EventEmitter 类型库。为此,您可以尝试使用微型图书馆,例如pubsub.js https://github.com/federico-lox/pubsub.js or nbd.js https://github.com/behance/nbd.js(披露:我是 nbd.js 的作者)。

如果您确实使用 nbd.js,它提供的不仅仅是 pubsub 功能。但你可以具体require()只是 pubsub 模块。

如果您使用 git 进行源代码控制,最简单的方法是将其用作子模块。

git submodule add [email protected] /cdn-cgi/l/email-protection:behance/nbd.js.git path/to/nbd

Then, requirepubsub 模块并做你想做的事!

require(['nbd/trait/pubsub'], function(pubsub) { /* do whatever */ });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Require.js 中填充一个使用 module.exports 的模块可能吗? 的相关文章

  • 获取画布上下文的最后一个点的坐标

    我想创建一个arrowTo功能与CanvasRenderingContext2D prototype 为此 我需要获取最后一个点的坐标 例如 var ctx someCanvas getContext 2d ctx moveTo 10 40
  • 如何使弹出窗口出现在我的鼠标进入悬停目标的位置?

    这是一个示例代码 用于显示我的按钮下方的弹出窗口 fn popover defaults extend fn tooltip defaults placement bottom content 现在我希望弹出窗口出现在光标移动的位置 不仅是
  • 将 Laravel 集合/数组转换为 Javascript 数组

    我想将 Laravel 中的数组分配给 JavaScript 数组 我已经从我的AppServiceProvider和 json decoded 它像 View composer function view users Users all
  • 在 Angular 单元测试中应该如何处理运行块?

    我的理解是 当您在 Angular 单元测试中加载模块时 run块被调用 我认为如果你正在测试一个组件 你不会想同时测试run块 因为unit测试应该只是测试一个unit 真的吗 如果是的话有什么办法可以防止run阻止运行 我的研究让我认为
  • 向 JS 计算器添加键盘支持时出现的问题

    我想为我的计算器添加键盘支持 当我用键盘按下操作 即 或 时 js将其视为数字 而不是操作 例如 当我通过点击计算 10 11 时 我将得到 21 作为结果 当我通过键盘输入时 我会得到 10 为什么会发生这种情况 是否可以改变它 div
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • Twitter Bootstrap 轮播在加载时自动播放

    使用twitter bootstrap框架 如何调用轮播来 自动滑动 这意味着当页面加载时 轮播会自动滚动 我尝试过 javascript onLoad click 函数 a 下一个链接的 但这不起作用 你应该这样做Twitter Boot
  • 禁用整个站点的 IE8 加速器

    是的 我知道有类似的问题 https stackoverflow com questions 499565 is it possible to disable ie8 accelerators on my website在 SO 上 但它已
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中

    自 2012 年 6 月 12 日 11 20 TU 起 我在我的 varnish apache 日志中看到非常奇怪的错误 有时 当用户请求一页时 几秒钟后我会看到类似的请求 但 url 中最后一个 之后的所有字符串已被 未定义 替换 例子
  • 添加选项以选择框而不用 Internet Explorer 关闭该框?

    我正在尝试构建一个包含多个下拉选择框的网页 这些下拉选择框在首次打开时异步加载其选项 这在 Firefox 下工作得很好 但在 Internet Explorer 下则不然 下面是我想要实现的目标的一个小例子 基本上 有一个选择框 ID 为
  • 如何正确删除动画集中引用的 Raphael SVG 元素?

    我有一组动画 Raphael SVG 元素 我正在通过用户发起的 ajax 调用添加新元素并删除旧元素 我 set push 新元素 但因为我需要删除的元素通常不是集合中的最后一个元素 所以我使用 element remove 而不是 se
  • 当表格在 IE 中获得焦点时,表格滚动条会向上跳跃

    问题 我有一个table有包装的div with overflow y auto 一旦table获得焦点 滚动条向上跳 我怎样才能防止这种情况发生 我经历过这种行为IE9 不在 Chrome 中 请注意 我已添加tabindex到桌子上 以
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • Promise 构造函数回调的主体何时执行?

    假设我有以下代码构造一个Promise function doSomethingAsynchronous return new Promise resolve gt const result doSomeWork setTimeout gt
  • 当选项卡重新加载(chrome 扩展)时,如何运行此脚本?

    所以我想在指定 URL 中重新加载选项卡时运行脚本 它几乎可以工作 但实际上 id 不能 这是我的清单文件 manifest version 2 name Sample Extension description Sample Chrome
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网

随机推荐