2

我有以下使用 AMD 模块编译的 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 is not defined at Object. (C:\DB\Repo\TSMX\TSMX\TSMXTest\app.js:1:63 ) 在 Module._compile (module.js:456:26) 在 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 要容易得多,如果这是一个业余问题,请见谅。

编辑:按照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'”错误。

4

1 回答 1

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

于 2013-05-06T14:49:35.483 回答