node:process 和 process 有什么区别?

8

当我导入node:process时,它运行正常。然而,当我尝试使用require导入时,它会报错。

以下代码可以正常运行:

import process from 'node:process';

但是当我尝试要求相同的时候,它会报错:

const process = require('node:process');

错误: 找不到模块 'node:process'

我很好奇 processnode:process 之间有什么区别,前者在 commonjs 和 module 中都可以使用。

另外,我正在使用 webpack 来打包我的 js,当我尝试运行我的打包代码时,我发现了这个错误,并意识到 chalk 导入了 node:processnode:osnode:tty。现在该怎么解决呢?

2个回答

4

import process from 'node:process';import process from 'process';是等效的。

自版本12以来,node:已经存在于import中。

node: URL作为加载Node.js内置模块的替代方法得到支持。该URL方案允许引用有效的绝对URL字符串来引用内置模块。

node:背后的想法是明确它实际上是一个内置模块,而不是安装的模块,并避免与第三方模块的名称冲突。

node:协议最初仅为import添加,因此特定的Node版本可能支持使用importnode:,但不支持使用require

在v16.13.0(不确定从哪个v16版本开始),您也可以将其与require一起使用。并且自v14.18以来已回溯到v14:module: add support for node:‑prefixed require(…) calls


1
"node:"是用于加载ECMAScript模块的URL方案。因此,它是为"import"而不是"require"而开始的。
"node:process"只是加载内置的"process"模块的替代名称。
请参见Node.js文档 - 您可以在"History"标记内找到最低支持的Node.js版本(12.20.0、14.13.1)。
在更新的Node.js中,它也应该可用于"require"(14.18.0、16.0.0)。
更多细节可以在这里找到:node:process始终优先使用内置的核心模块,而process可以从文件中加载。

如果您安装了与核心模块同名的节点模块包,那么导入 'process' 似乎仍将加载本地内置模块并忽略节点模块目录中的模块。但是,如果 nodejs 运行时(或其他 JS 运行时)没有内置 process 模块,则它将从节点模块目录中加载它,如果它理解 commonjs/ES 模块标准的话。 - CMCDragonkai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接