Node.js报TypeError: fs.createWriteStream is not a function
错误原因
导入模块路径错误。fs/promises 是fs模块拆分出的、仅包含Promise风格异步文件操作API的子集,只提供readFile、writeFile、mkdir这类返回Promise的方法,完全不包含流相关、同步操作类的API。你调用的createWriteStream属于流API,只挂载在主fs模块的导出对象上,自然会在fs/promises导出的对象上找不到这个方法,抛出类型错误。
之前网上搜到的“浏览器环境调用fs”的场景和你这个完全不相关,你的问题就是导错了模块路径。
修复方法
根据编码习惯二选一即可:
- 方式1:分开导入主模块和promises子模块(语义最清晰,推荐)
流相关、同步方法从主fs模块取,Promise风格方法从fs/promises取:import fs from 'fs' import fsp from 'fs/promises' // 调用createWriteStream走主模块 const ws = fs.createWriteStream("example.png") // 要用Promise版API时走fsp即可,比如 await fsp.readFile('a.txt') - 方式2:直接从主fs模块取promises属性
主fs模块本身就挂载了promises属性,和单独导入fs/promises拿到的对象完全一致,不需要额外导子路径:import fs from 'fs' const fsp = fs.promises const ws = fs.createWriteStream("example.png")
补充验证:你可以直接在Node环境执行
console.log(Object.keys(await import('fs/promises')))打印fs/promises的所有导出方法,能看到里面确实没有createWriteStream、createReadStream、writeFileSync这类非Promise风格的API。
内容的提问来源于stack exchange,提问作者davidnagli
相关产品推荐
相关产品推荐

