javascript - 为什么 CommonJS 的 require 函数不是异步的?

标签 javascript node.js commonjs

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

更新:

我在客户端中见过并使用过 requireJS,并且能够体会到它的异步特性。我想知道的是,为什么在服务器中做这种事情并不普遍(我知道 requireJS 可以在 Node 中使用,但这不是重点)。

此外,我想知道在我的代码中要求内联模块是否会使我的代码阻塞,以及这是否是一种不好的做法并且应该避免。

最佳答案

要求模块通常是您在程序开始时执行的操作。如果您不在程序开始时执行此操作,结果无论如何都会被缓存。启动这样的程序:

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
    });
});

区别在于其中一个过于复杂。是的,可能会实现某种语法糖,但它仍然没有任何好处,除非在一些微小的边缘情况下。

关于javascript - 为什么 CommonJS 的 require 函数不是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903177/

相关文章:

javascript - 如何处理 commonjs 中的依赖循环

javascript - 如何查看 javascript 中当前定义了哪些函数和变量?

javascript - 在JS对象中使用变量名?

javascript - 当我想使用 adonis js 在 Windows 操作系统中上传图像时,我发现这个问题,我该如何解决这个问题

javascript - 定义整数类型的数据,但使用 node.js 模型返回字符串类型的数据

javascript - 是否有理由使用 __proto__ 而不是 setPrototypeOf

javascript - CommonJs模块系统中 "module.exports"和 "exports"之间的区别

javascript - Backbone - 集合不从 JSON 填充

javascript - 在 Node.js 中的函数和 JavaScript 文件之间隐式传递上下文

momentJS 上的 Typescript 模块系统表现异常