【问题标题】:Typescript AMD Modules for Node.js用于 Node.js 的 Typescript AMD 模块
【发布时间】:2013-04-30 08:00:40
【问题描述】:

我有以下使用 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:定义未定义 在对象。 (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,其中导入/命名空间要容易得多,如果这是一个业余问题,请见谅。

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

【问题讨论】:

  • 这是否有帮助(您的编辑中描述的问题):stackoverflow.com/a/16214223/1014822?否则,为什么不拥有一个具有核心功能的基类,并将其扩展为 web 的 amd 模块和 node 的 commonjs?

标签: node.js typescript amd


【解决方案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

【讨论】:

  • 我更喜欢单一的模块类型以保持简单。而且 CommonJS 似乎不适合浏览器。所以 AMD 似乎是要走的路
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多