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

CommonJS is synchronous but what would happen if there was a call to an async function

CommonJS 使用同步的 require() 语句,但是如果您有这样的模块怎么办:

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

module.exports = asyncFunction();

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

what kind of problems could arise here?

这违反了 CommonJS 约定并且会让开发人员感到惊讶。它表明您不区分代码和数据。服务器上节点中的代码可以而且应该同步加载。数据可以而且应该使用承诺、回调等。

Is there ever a good reason to use requireJS on the server side

不是我见过的。就个人而言,requireJS 很糟糕,如果你的模块引入它,我绝对没有机会在我的节点项目中使用它。

if you need to import a module that is async by nature?

您需要提供具体信息。我从未见过 "async by nature" 的节点模块,至少没有人了解代码和数据之间的区别并意识到将远程代码动态加载到 运行 node.js 服务器应用程序中出于包括可靠性和安全性在内的充分理由,大多数部署都希望避免这种情况。