Skip to content

为什么要写成 node:fs 这种方式导入研究与分析

最近我在学习 Vite 源码的时候, 发现它导入 Node 原生模块使用了一种我不熟悉的语法:import fs from 'node:fs'。起初我不太明白这种写法的来历, 所以我查阅了一些资料。

有一篇掘金文章分析说:

使用 node: 前缀可以标识 Node 核心模块, 绕过模块查找缓存, 比如 require('node:fs') 总是返回 Node 内置的 fs 模块, 即使存在同名的缓存模块也不会引入。

但是我认为这应该不是 Vite 采用这种语法的核心考量, 而是出于安全性的考虑。通过直接调用 Node 原生模块, 可以确保使用的是 Node 官方内置模块, 不会被可能存在的不信任模块所影响。

在前端工程中, 我们经常会引入各种第三方模块, 如果其中某个模块恶意修改了核心模块的行为, 那么可能会造成非常严重的安全问题。所以 Vite 选择使用 node: 前缀的语法, 可以避免这种风险。

当然, 这只是我个人的猜测和理解, 如果大家对此有更深入的见解, 欢迎在评论区指正。感谢大家的阅读, 预祝编程生活充实精彩!