是否有可能在testing中设置amdefine,以便我不必在所有模块文件中定义它?

我有一套使用浏览器端,但testing服务器端与摩卡的对象。 我使用require.js进行AMD加载。 Require.js网站build议在服务器端使用amdefine来获取定义的模块在node.js中的这一点代码:

if (typeof define !== 'function') { var define = require('amdefine')(module) } 

好。 但是我必须把它放到我想在Node中使用的每个模块中。 在我的情况下,这意味着我不得不从我使用客户端(大部分)的任何代码中删除它。

我想知道是否有任何方法把我的testing中的代码块,所以我不必把它放在我的客户端代码。 在我的文件中只有testing需要的代码似乎很愚蠢 – 把它放在testing代码中更有意义。 但是,当我这样做,我得到一个错误:

 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) 

这是一个奇怪的错误,因为amdefine代码只在一个地方 – testing文件的顶部。 有没有办法把这个amdefine代码在我的testing,只有我的testing,仍然得到testing运行服务器端 – 而不必去掉客户端的amdefine代码?

如果你使用amd-loader ,你可以这样做:

 require("amd-loader"); var datatypes = require("../build/dist/lib/salve/datatypes"); var name_resolver = require("../build/dist/lib/salve/name_resolver"); 

而已。 你只需要amd-loader,然后你可以随意加载AMD风格的模块。 (在上面的例子中,amd-loader之后加载的两个模块是AMD风格的模块)。而AMD风格的模块可以加载其他AMD风格的模块。

上面的代码片段是来自我的一个testing套件的实际代码,这个testing套件testing了一个AMD风格的库,这样它可以加载RequireJS,但是在Node.js中testing。