【问题标题】:Importing OSC library using TypeScript AMD fails to build osc object correctly使用 TypeScript AMD 导入 OSC 库无法正确构建 osc 对象
【发布时间】:2015-07-21 00:14:49
【问题描述】:

我正在尝试在此处使用 OSC 库的浏览器部分:https://github.com/colinbdclark/osc.js 在我的 TypeScript AMD 网站中(使用 RequireJS。)

我打算至少在我使用它的范围内编写定义文件。但是,当我通过 require 导入(缩小与否)osc-browser js 文件时:

        //From the require config
        oscbrowser: ["/scripts/lib/osc.js/dist/osc-browser.min"],
...
        oscbrowser: {
            export: "osc"
        },
...
//From the typescript file
declare var osc;

Requirejs 在运行时给了我以下 javascript 错误:

未捕获的错误:模块名称“事件”尚未加载 语境: _。使用 require([])

我已根据下面 Colin 的评论更新到最新的库,并且错误更改为引用单库。

未捕获的错误:尚未加载模块名称“slip” 语境: _。使用 require([])

当我通过 require 配置拉入所有组件时:

    EventEmitter: ["/scripts/lib/eventEmitter/EventEmitter"],
    slip: ["/scripts/lib/slip.js/dist/slip.min"],
    osc: ["/scripts/lib/osc.js/src/osc"],
    osctransports: ["/scripts/lib/osc.js/src/osc-transports"],
    oscbrowser: ["/scripts/lib/osc.js/src/platforms/osc-browser"],

和 事件发射器:{ 导出:“事件发射器” }, osctransports:{ deps: ["slip", "EventEmitter"] }, 操作系统浏览器:{ 出口:“osc”, deps: ["slip","EventEmitter", "osc", "osctransports"] },

错误返回事件错误:

未捕获的错误:模块名称“事件”尚未加载 语境: _。使用 require([])

如果我将 osc-transports.js 中的行从

EventEmitter = EventEmitter || require("events").EventEmitter;

EventEmitter = EventEmitter || require("EventEmitter") || require("events").EventEmitter;

因为我相信之前的 require 仅适用于 EventEmitter 的 NPM 版本,所以 javascript 错误消失并且库似乎可以工作。

有没有比我更有 RequireJS 经验的人知道为什么我不能只使用库的 dist/ocs-browser 版本?

【问题讨论】:

  • @colin-clark 更新了库,现在唯一剩下的问题是 typescript 的模块导入代码的问题,因为它与此错误有关:github.com/Microsoft/TypeScript/issues/2192。作为一种变通方法,可以通过构造函数中的 require 语句来分配 osc。

标签: javascript requirejs typescript osc


【解决方案1】:

我是 osc.js 的创建者。直到最近,osc.js 还没有直接支持异步模块加载器。看到您的问题后,我添加了对 universal module definition 样式样板的库的支持,因此 osc.js version 1.1.3 及更高版本现在应该可以与 Require.js 一起使用。

【讨论】:

  • 您好,感谢您的更新。看起来更近了,尽管我在使用 dist/osc-browser.js 时仍然遇到错误。 Module name "slip" has not been loaded yet for context: _. Use require([]) 不知何故,slip 似乎在第 1659 行不可用,并且 require 找不到它。我正在继续深入研究,但我想我现在应该发表评论。
  • 抱歉格式化。恐怕我的做法也不正确。
  • 您还需要升级到 slip.js 1.0.2,它已更新为支持 AMD 模块加载器。
  • 我也更新到最新的slip版本了,谢谢。现在唯一看起来不寻常的是我必须修改引入 EventEmitter 的行。
  • 您根本不需要修改 osc.js 的源代码就可以将它与 Require.js 一起使用。在我看来,您的要求配置不正确;它应该导入的唯一 osc.js 文件是 osc-module.min,而不是单独的 osc、osc-transports 和 osc-browser 文件。相反,您的 require 配置应该看起来像 like this example in the osc.js unit test suite
猜你喜欢
  • 2011-07-26
  • 2011-01-09
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多