TypeScript引入node的fs模块报Uncaught TypeError错误求助
报错原因
- 该错误属于运行时错误,并非TypeScript编译阶段抛出的类型错误,与
@types/node类型包安装状态、类型配置没有关联。 - 你的代码当前实际运行在浏览器环境中:浏览器未内置
fs这类Node.js原生核心模块,且浏览器遵循的ES模块解析规则要求导入路径必须以/、./、../开头,无法识别fs这类无路径前缀的裸模块名。 - 如果你使用Vite、Webpack等前端打包工具构建项目,这类工具默认也不会将Node.js核心模块打包到前端产物中,同样会触发该报错。
解决方案
根据你的代码实际运行场景选择对应方案:
场景1:代码预期运行在Node.js服务端
修改相关配置适配Node.js运行规则:
- 调整
tsconfig.json配置,新增Node模块解析规则,将模块规范改为Node原生支持的CommonJS:
{ "compilerOptions": { "target": "es5", "module": "CommonJS", "rootDir": "./src", "outDir": "./dist", "moduleResolution": "Node", "types": ["node"] } }
如果要使用ESModule规范,需要额外在项目package.json中新增配置项"type": "module"。
2. 编译完成后使用node dist/你的入口文件名.js命令运行产物,不要直接在浏览器打开或者用前端开发服务器运行。
3. 如果使用esbuild、rollup等打包工具处理Node.js代码,需要在打包配置中将fs等Node核心模块标记为external外部模块,避免打包工具尝试解析这类模块。
场景2:代码为前端项目,需要操作本地文件
浏览器环境禁止直接操作本地文件系统,不能使用fs模块,换用浏览器兼容的实现方案:
- 若需要读取用户手动选择的本地文件,使用浏览器原生
FileReaderAPI实现 - 若需要读取项目内置的静态资源文件,将资源放到项目静态资源目录下,通过
fetch请求资源的相对路径读取内容 - 若为Electron类跨端桌面项目,
fs模块只能在主进程中直接使用,渲染进程需要通过IPC通信调用主进程封装的文件操作能力,或手动开启渲染进程的nodeIntegration配置。
内容的提问来源于stack exchange,提问作者Sakaggi
相关产品推荐
相关产品推荐

