Node.js的打字稿AMD模块

时间:2013-05-06 14:27:05

标签: node.js typescript amd

我有以下使用AMD Modules编译的Typescript文件:

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                                                               ^ ReferenceError:未定义define     在对象。 (C:\ DB \回购\ TSMX \ TSMX \ TSMXTest \ app.js:1:63)     在Module._compile(module.js:456:26)     at Object.Module._extensions..js(module.js:474:10)     在Module.load(module.js:356:32)     在Function.Module._load(module.js:312:12)     在Function.Module.runMain(module.js:497:10)     在启动时(node.js:119:16)     在node.js:901:3

如何使这项工作并定义“定义”?我需要AMD模块,因为我将在浏览器中加载一些代码。

我来自C#和AS3,其中Imports / Namespaces更容易,如果这是一个业余问题,那就很抱歉。

编辑: 根据{{​​3}}的建议,我添加到文件顶部:

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

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

return function () { };
});

但是这会被typescript放在define调用中,这使得它无用。 然后我手动将它放在define调用之外,这导致了“无法找到模块'amdefine'”错误。

1 个答案:

答案 0 :(得分:1)

只是一个选项:您不需要在节点上使用AMD。将节点文件与浏览器文件分开编译。使用AMD浏览器。

如果您仍想在节点代码上使用AMD,这可能有所帮助:http://nodejs.org/docs/v0.5.0/api/modules.html

我还没有使用过节点,但是在浏览器中,define / require是在第三方库中定义的,例如requirejs:http://requirejs.org/ demo:http://www.youtube.com/watch?v=4AGQpv0MKsA