2012-08-17 33 views
1

我想在CoffeeScript代碼中重用JavaScript庫(sim.js)。在sim.js的例子中,有3個文件,「sim-0.26.js」,「buffet_restaurant.js」和「buffet_restaurant.html」這樣連接在一起(我已經消除了一些簡化的參數):從CoffeeScript調用JavaScript「新」

裏面的 「buffet_restaurant.html」,有

<script type="text/javascript" src="./buffet_restaurant_files/sim-0.26.js"></script> 
<script type="text/javascript" src="./buffet_restaurant_files/buffet_restaurant.js"></script> 
<script type="text/javascript"> 
    $(function() { 
    $("#run_simulation").click(function() { 
     var results = buffetRestaurantSimulation(); 
... 

其中buffetRestaurantSimulation是buffet_restaurant.js內部的功能。在buffet_restaurant.js代碼開始了這樣的:

function buffetRestaurantSimulation() 
{ 
    var sim = new Sim(); 
... 

其中辛在SIM-0.26.js被定義,這樣的:

function Sim(){...}; 

本示例運行正常。我想在node.js的CoffeeScript文件中重複使用「Sim」。因此,我想這(從茉莉節點調用):

sjs = require "./sim-0.26.js" 

mysim = new sjs.Sim() 

那裏SIM-0.26.js是在同一個目錄中testsim.spec.coffee,包含此代碼的文件。當我調用此使用:

jasmine-node --coffee ./testsim.spec.coffee 

我得到這個:

mysim = new sjs.Sim(); 
     ^
TypeError: undefined is not a function 

我懷疑我做一噸的東西是錯誤的。我對這一切都很陌生。

任何想法?

回答

4

除非Sim添加到exports這將不可用時require d - 看the docs on modules有關方式的更多信息Node.js加載模塊需要被寫入。

如果需要在瀏覽器和在節點的工作,然後簡單地將其添加到代碼sim.js

var root = typeof exports === "object" ? exports : window; 

root.Sim = Sim; 
+0

你是說我不能再使用(調用)一個普通的老JavaScript庫,除非我修改它以使用「出口」? – 2012-08-17 02:25:59

+3

@DougKnesek:它不是一個「普通的舊JavaScript」,它是一個「node.js命名空間」的東西:如果你不導出它,它不會存在,不管CoffeeScript或JavaScript。 – 2012-08-17 02:30:25