CommonJS是同步的,但如果调用asynchronous函数会发生什么情况

CommonJS使用一个require()语句,它是同步的,但是如果你有一个像这样的模块:

 function asyncFunction() { var promise = ...; return promise; } module.exports = asyncFunction(); 

这里可能会出现什么样的问题? 你应该总是有同步代码返回module.exports对象? 例如,如果module.exports = {}它将始终是同步的,但在上述情况下module.exports是一个承诺,这是假设是不被认为是同步的。 如果你需要导入一个本质上是asynchronous的模块,在服务器端是否有充分的理由使用requireJS?

这里可能会出现什么样的问题?

这违反了CommonJS的惯例,对于开发者来说将会是令人惊讶的。 它显示你不区分代码和数据。 服务器上的节点中的代码可以并且应该同步加载。 数据可以并且应该使用承诺,callback等

有没有好的理由在服务器端使用requireJS

不是我见过的。 requireJS是非常糟糕的,如果你的模块引入了它,我绝对没有机会在我的节点项目中使用它。

如果你需要导入一个本质上是asynchronous的模块?

你需要提供具体细节。 我从来没有见过一个“asynchronousasynchronous”的节点模块,至less不是理解代码和数据之间的区别的人,并意识到dynamic加载远程代码到正在运行的节点.js服务器应用程序是大多数部署需要的东西避免包括可靠性和安全性在内的充分理由