Node.js中require("node:<模块名>")与require("<模块名>")的区别?
Node.js中
require("<module>")与require("node:<module>")的区别 功能完全等价
两种写法加载的是同一个Node.js核心模块,运行起来没有任何差异,比如require("http")和require("node:http")最终都会拿到官方内置的HTTP模块对象。node:前缀的核心价值- 避免模块命名冲突:如果你的项目里刚好有和核心模块同名的本地文件、第三方包,
require("http")可能会优先加载项目里的自定义模块,而require("node:http")会直接跳过这些,强制加载Node.js官方的核心模块,彻底杜绝歧义。 - 代码意图更清晰:这个前缀是官方后来推出的规范写法,相当于给核心模块加了专属命名空间,别人看代码时一眼就能知道你用的是官方内置模块,不用再去猜是第三方包还是自定义模块。
- 避免模块命名冲突:如果你的项目里刚好有和核心模块同名的本地文件、第三方包,
兼容性与文档说明
- 这个写法从Node.js v14.13.0开始支持,低于这个版本的Node.js会报错,所以如果你的项目需要兼容低版本,还是用不带前缀的写法更稳妥。
- 文档里没全面替换旧写法是因为要兼容历史内容,而且官方也没打算废弃旧写法,两种写法都属于合法用法。
内容的提问来源于stack exchange,提问作者Adrian Constantinescu
相关产品推荐
相关产品推荐

