为什么你必须在 Node.js 中明确要求一些核心模块?

Why do you have to explicitly require some core modules in Node.js?

文档说有一些核心模块作为平台的一部分提供,并在 Node.js 源代码中定义。仔细观察细节,术语变得有点令人费解。 “这里的术语“全局对象”(或标准内置对象)不要与全局对象混淆。这里,'global objects' 指的是全局范围内的对象。”

据我了解,有一个全局对象可以通过显式写入 'global' 来访问,如:

console.log(global)

它包含一些您希望跨所有文件访问的内容,例如控制台或进程对象。还有其他一些东西可能看起来是全局的,但实际上不是,它们之所以存在是因为所有 Node.js 脚本都隐含在以下内容中:

(function (exports, require, module, __filename, __dirname) {
      // Userland code comes here
});

还有其他对象作为 Javascript 语言本身的 'implementation' 出现,例如对象、函数或布尔值。

以下是我不明白但似乎仍然很重要的内容。为什么 Node.js 附带的一些东西不需要任何第三方库就可以使用,但你仍然需要它们(比如 'events' 或 'fs' 模块) ?在我看来,拥有一个所有文件都可以访问的全局对象的全部原因是您可能使用的核心内容可以在那里公开。

我知道我的问题可能是基于意见的,但这只是另一个实现细节,还是有一些我在概念上没有理解并且应该在日常开发中考虑的东西?

The documentation says there are some core modules that are shipped as part of the platform and are defined within the Node.js source.

所有 核心模块随 Node.js 一起提供。这就是“核心”的定义。

其中绝大多数默认情况下不会加载到内存中,并且默认情况下不会分配全局标识符。要使用它们,您必须加载它们(通过 require 或在现代环境中 import。)这是一件好事。如果 运行 的代码不需要它,就没有充分的理由加载 fs 模块,并且 真的 没有充分的理由创建全局 fs 标识符 — 全局命名空间已经人满为患。