我有以下使用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未定义在Object . (C:\ DB \ Repo \ TSMX \ TSMX \ TSMXTest \ app.js:1:63) )在Function.Module的Module.load(module.js:356:32)处的Module._compile(module.js:456:26)处的Object.Module._extensions..js(module.js:474:10)处 . __(module.js:312:12)在函数.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 () { };
});
但这会被typescript放在define调用中,这使得它无用 . 然后我手动将它放在define调用之外,这导致了“无法找到模块'amdefine'”错误 .
1 回答
只是一个选项:您不需要在节点上使用AMD . 与浏览器文件分开编译节点文件 . 使用AMD浏览器 .
如果您仍想在节点代码上使用AMD,这可能有所帮助:http://nodejs.org/docs/v0.5.0/api/modules.html
我还没有使用节点,但是在浏览器中,define / require是在第三方库中定义的,例如requirejs:http://requirejs.org/演示:http://www.youtube.com/watch?v=4AGQpv0MKsA