CommonJS为什么不要求函数asynchronous?

在加载CommonJS模块时,我们使用require语句,它是同步的。 但是不加载模块涉及从磁盘读取它们并解释它们。 所以在一个我们提倡非阻塞I / O的设置中,如何实现同步?

更新:

我已经看到并在客户端使用requireJS,并可以欣赏它的asynchronous性。 我想知道的是,为什么在服务器上做这种事情并不普遍(我知道requireJS可以在Node中使用,但这不是重点)。

另外我想知道是否需要在我的代码内联模块使我的代码阻塞,如果这是一个不好的做法,应该避免。

require模块通常是你在程序开始时做的事情。 如果您在程序开始时没有这样做,结果将被caching。 像这样开始一个程序:

 var fs = require('fs'); var http = require('http'); var oranges = require('oranges'); // Do stuff 

会像这样开始一样工作:

 require('async', function(err, async) { async.map(['fs', 'http', 'oranges'], function(err, modules) { var fs = modules[0], http = modules[1], oranges = modules[2]; // Do stuff }); }); 

不同的是,其中之一是不必要的复杂。 是的,可能会实施某种语法糖,但除了可能存在一些微小的边缘情况外,它仍然没有任何好处。