在使用require('some_module.js')时运行脚本 – 好的做法?

我正在谈论服务器端JS(与node.js和require.js)我有三个文件

//1) app.js - main entry point: //======================================================= var myservice = require('./myservice'); rt.register('someKey', require('./XYZhandler').handler); //2) myservice.js: //======================================================= var handlers = {}; exports.register = function(key, handler) { handlers[key] = handler; }; //3) and finally XYZhandler.js: //======================================================= exports.handler = function() { //...do something }; 

所以,在上面的设置中,我已经在app.js中实际执行了所有脚本

我select的是:

 //1) app.js - main entry point: //======================================================= var myservice = require('./myservice'), rt = require('./XYZhandler'); //2) myservice.js: unchanged from above //3)and finally XYZhandler.js: //======================================================= require('./myservice').register(function() { //...do that same thing }; 

在后面的设置中,我在XYZhandler.js中有一个脚本,在第一次requirejs遇到它的时候会被执行(请注意,XYZhandler.js不会导出任何东西)。 我(作为一个Java开发人员)将此比喻为静态初始值设定项 。 但是,上述哪一项被认为是更好的做法呢? 谢谢。

第一种方法更好,因为它是正确的分离。

在第二种方法中, XYZhandler.js依赖于myservice.js 。 如果你的yourhandler.js或者hishandler.js想要register XYZhandler.js ,那么它们也必须被硬编码。很快,你所有的模块都将相互依赖,你将不会有任何单独重用它们的能力,这就是将这些function抽象为模块的完整点。

这是一个化妆品的差异,但我可能会这样写你的第一个例子:

 //1) app.js - main entry point: //======================================================= var myservice = require('./myservice'); var myhandler = require('./XYZhandler').handler; rt.register('someKey', myhandler); 

一步载入模块,然后初始化它们,帮助我澄清它们之间的关系。

希望有所帮助!