我有以下使用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'”错误。
答案 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