2013-05-06 86 views
2

我有我與AMD模塊編譯下面的打字稿文件:打字稿AMD模塊的Node.js

import tsmx = module("../TSMX/tsmx"); 
tsmx.createServer(1337); 

產生以下JS:

define(["require", "exports", "../TSMX/tsmx"], function(require, exports, __tsmx__) { 
    var tsmx = __tsmx__; 

    tsmx.createServer(1337); 
}) 

當我嘗試加載它Node.js我得到以下錯誤:

(function(exports,require,module,__filename,__dirname){define([「require ^ R eferenceError:定義未在對象處定義爲 。 (C:\ DB \回購\ TSMX \ TSMX \ TSMXTest \ app.js:1:63) 在Module._compile(module.js:456:26) 在Object.Module._extensions..js(module.js (module.js:356:32) at Function.Module._load(module.js:312:12) at Function.Module.runMain(module.js:497:10):474:10) at Module.load ) 在啓動時(node.js中:119:16) 在node.js中:901:3

如何使這項工作,並得到 「定義」 定義?我需要AMD模塊,因爲我會在瀏覽器中加載一些代碼。

我來自C#和AS3其中進口/命名空間是輕鬆了很多很抱歉,如果這是一個業餘的問題。

編輯: 所推薦的http://requirejs.org/docs/node.html#nodeModules我添加到文件的頂部:

if (typeof define !== 'function') 
{ 
var define = require('amdefine')(module); 
} 

define(function (require) 
{ 
var dep = require('dependency'); 

return function() { }; 
}); 

但這被放置在由打字稿中定義調用這使得它沒用裏面。 然後我手動將它放在定義調用之外,這只是導致「無法找到模塊」amdefine'「錯誤。

+0

這是否有幫助(與您在編輯中描述的問題):http://stackoverflow.com/a/16214223/1014822?否則,爲什麼不能有一個基類的核心功能,並將其擴展爲網絡的AMD模塊,並再次爲CommonJS的節點? – JcFx 2013-05-06 20:11:32

回答

1

只是一種選擇:你不需要使用AMD的節點。將您的節點文件與您的瀏覽器文件分開編譯。使用AMD瀏覽器。

如果你仍然想使用AMD節點代碼,這可能幫助:http://nodejs.org/docs/v0.5.0/api/modules.html

我沒有使用節點還,但在瀏覽器中定義/需要在第三方庫中定義例如requirejs:http://requirejs.org/演示:http://www.youtube.com/watch?v=4AGQpv0MKsA

+1

我優先考慮單個模塊類型以保持容易。 CommonJS似乎不適合瀏覽器。因此,AMD似乎是走 – TobiHeidi 2013-05-06 15:00:13

+2

的方式,這可能是有用的:https://github.com/jrburke/amdefine – JcFx 2013-05-06 17:25:39