2013-10-14 29 views
0

我是require.js的新手,嘗試在我的頁面上使用RosLib.js加載require.js。 RosLib.js依賴於EventEmitter2require.js Shim配置EventEmitter2

所以這是我的代碼:

require.config({ 
    shim: { 
     eventemitter: { 
      exports: 'EventEmitter2' 
     }, 
     roslib: { 
      deps: ["eventemitter"], 
      exports: "ROSLIB" 
     } 
    }, 
    paths: { 
     roslib: "https://raw.github.com/RobotWebTools/roslibjs/devel/build/roslib", 
     eventemitter: "https://raw.github.com/hij1nx/EventEmitter2/master/lib/eventemitter2" 
    } 
}); 

require(["roslib"], function (ROSLIB) { 
    var urlname = "ws://" + location.hostname + ":9090"; 
    ros = new ROSLIB.Ros({ 
     url : urlname 
    }); 
}); 

如果函數執行somhow eventemitter2.js有錯誤,EventEmitter2沒有定義:

Uncaught ReferenceError: module is not defined (eventemitter2.js:561)

Uncaught ReferenceError: EventEmitter2 is not defined (roslib.js:121)

下面是相應的JsFiddle示例,它不起作用:http://jsfiddle.net/mKyEA/1/

如何配置require.js以正確初始化EventEmitter2?

+0

你有拼寫錯誤:'rislib' - 'roslib' –

+0

謝謝!糾正它,但仍然有錯誤 – SailAvid

回答

1

有兩個問題:

的第一個問題是EventEmitter2資源庫中 我得到了Uncaught ReferenceError: module is not defined (eventemitter2.js:561)例外。

這個異常應該由固定此承諾:https://github.com/Pro/EventEmitter2/commit/f829a2571b4adc66d304cb9fd5a2a5698d41c107

接下來的問題是,RosLib沒有找到EventEmitter: Uncaught ReferenceError: EventEmitter2 is not defined (roslib.js:121)

我通過增加一個額外的要求設置全局EventEmitter2固定這一點。由於RosLib預計EventEmitter2是全球性的,但由於使用require.js沒有設置在windows.EventEmitter2

require(["eventemitter", ], function (EventEmitter2) { 
    window.EventEmitter2 = EventEmitter2; 
}); 

這是新的和工作小提琴:

http://jsfiddle.net/43dCV/1/

3

它看起來像你正在做requirejs正確。

看來您指定的EventEmitter2.js是問題... 單獨的腳本會引發錯誤。 「模塊未定義」。該變量顯然未在其腳本的底部定義。

我從網上抓取了一個不同版本的EventEmitter2,並對其進行了自定義,以暴露全局變量EventEmitter2,以便ROSlib可以看到它。

我不熟悉ROSlib,但它似乎缺少一個函數setMaxListeners。 因爲在放入新的EventEmitter2後出現以下錯誤。 「TypeError:this.setMaxListeners不是函數」

Jsfiddle給了我一些奇怪的錯誤。這個代碼應該是你想要的。爲了方便,我附上了一個pastebin。 pastebin example 它顯示固定的事件發射器。 http://jsfiddle.net/mKyEA/6/

require.config({ 
    shim: { 
     eventemitter: { 
      exports: 'EventEmitter2' 
     }, 
     roslib: { 
      deps: ["eventemitter"], 
      exports: "ROSLIB" 
     } 
    }, 
    paths: { 
     roslib: "https://raw.github.com/RobotWebTools/roslibjs/devel/build/roslib", 
     eventemitter: "http://yourjavascript.com/15010010093/eventemitter2" 
    } 
}); 
+0

感謝您的幫助!你從哪裏獲得EventEmitter2版本?因爲它看起來很舊。 'setMaxListeners'是從EventEmitter2調用的,看起來你的版本不包含這個函數。 (原始功能見這裏:https://github.com/hij1nx/EventEmitter2/blob/236b78f362050876204be3047c12f28f693a993a/lib/eventemitter2.js) – SailAvid

+0

添加該版本的代碼和上面的例子 – TheProdigy

+0

謝謝!現在它似乎工作正常。我不知道你到底改變了什麼...你可以用你的改變創建一個pull request給這個問題:https://github.com/hij1nx/EventEmitter2/issues/100也可以幫助別人!非常感謝。 – SailAvid