Node.js 是否可以在测试中设置amdefine以便我不';你不必在我所有的模块文件中定义它吗?

Node.js 是否可以在测试中设置amdefine以便我不';你不必在我所有的模块文件中定义它吗?,node.js,requirejs,mocha.js,amd,amdefine,Node.js,Requirejs,Mocha.js,Amd,Amdefine,我有一组对象,在浏览器端使用,但在服务器端使用mocha进行测试。我正在使用require.js加载AMD。Require.js网站建议在服务器端使用amdefine,让已定义的模块在node.js中工作,代码如下: if (typeof define !== 'function') { var define = require('amdefine')(module) } 嗯。但我必须把它放到我想在Node中使用的每个模块中。在我的例子中,这意味着我必须将它从我正在使用的客户端(大部分

我有一组对象,在浏览器端使用,但在服务器端使用mocha进行测试。我正在使用require.js加载AMD。Require.js网站建议在服务器端使用amdefine,让已定义的模块在node.js中工作,代码如下:

if (typeof define !== 'function') {
    var define = require('amdefine')(module)
}
嗯。但我必须把它放到我想在Node中使用的每个模块中。在我的例子中,这意味着我必须将它从我正在使用的客户端(大部分)的任何代码中去掉

我想知道是否有办法将这段代码放在我的测试中,这样我就不必把它放在客户端代码中。在我的文件中包含只用于测试的代码似乎很愚蠢——将其放在测试代码中更有意义。但是,当我这样做时,我会得到一个错误:

Error: amdefine with no module ID cannot be called more than once per file.
    at runFactory (/home/vmplanet/dev/alpha/web/node_modules/amdefine/amdefine.js:159:23)
    at define (/home/vmplanet/dev/alpha/web/node_modules/amdefine/amdefine.js:275:13)
    at Object.<anonymous> (/home/vmplanet/dev/alpha/web/assets/src/coffee/delta/dataLayer.coffee:4:3)
    at Object.<anonymous> (/home/vmplanet/dev/alpha/web/assets/src/coffee/delta/dataLayer.coffee:158:4)
    at Module._compile (module.js:456:26)
    at Object.loadFile (/usr/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:179:19)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
错误:每个文件不能多次调用没有模块ID的amdefine。
在runFactory(/home/vmplanet/dev/alpha/web/node_modules/amdefine/amdefine.js:159:23)
在define(/home/vmplanet/dev/alpha/web/node_modules/amdefine/amdefine.js:275:13)
反对。(/home/vmplanet/dev/alpha/web/assets/src/coffee/delta/dataLayer.coffee:4:3)
反对。(/home/vmplanet/dev/alpha/web/assets/src/coffee/delta/dataLayer.coffee:158:4)
在模块处编译(Module.js:456:26)
在Object.loadFile(/usr/lib/node_modules/coffee script/lib/coffee script/coffee script.js:179:19)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
at Module.require(Module.js:364:17)
根据需要(模块js:380:17)
这是一个奇怪的错误,因为amdefine代码只在一个地方——测试文件的顶部。有没有一种方法可以将这个amdefine代码放在我的测试中,并且只放在我的测试中,并且仍然让测试运行在服务器端——而不必去掉客户端的amdefine代码

如果使用,可以执行以下操作:

require("amd-loader");
var datatypes = require("../build/dist/lib/salve/datatypes");
var name_resolver = require("../build/dist/lib/salve/name_resolver");
就这样。你只需要amd加载器第一,然后你可以加载amd风格的模块在任何时候。(在上面的示例中,amd loader之后加载的两个模块是amd风格的模块。)并且amd风格的模块可以加载其他amd风格的模块


上面的代码片段是测试AMD风格的库的实际代码,这样就可以用RequireJS加载它,但在Node.js中进行测试。

这很有趣。我来看看。谢谢你回答了一个和这个问题一样多灰尘的问题。我想有人可能会受益。是的。通过npm安装时的包名,以及调用
require
时的模块名是amd loader,但在github上它被命名为node amd loader。