报错TypeError: mkdirp.sync不是函数,删node_modules重装依赖仍未解决
解决mkdirp.sync is not a function报错问题
问题场景
运行Node.js脚本抓取街道名称并生成HTML页面时,触发如下报错:
TypeError: mkdirp.sync is not a function
at createDirectory (/Users/name/Documents/WebDev/street-owl/page-generator.js:15:12)
at Element.(/Users/name/Documents/WebDev/street-owl/page-generator.js:65:5)
脚本已通过const mkdirp = require('mkdirp');引入依赖,且完成安装,删除node_modules重装后问题依旧,出错代码段:
// Helper function to create a directory if it doesn't exist function createDirectory(dirPath) { if (!fs.existsSync(dirPath)) { mkdirp.sync(dirPath); } }
问题原因
mkdirp在v2.x及以后版本调整了API结构,同步方法的调用逻辑或导出方式发生变化,旧写法无法适配新版本;另外Node.js原生API已支持递归创建目录,无需依赖第三方包也能实现需求。
解决方法
方法1:改用Node.js原生API替代mkdirp
Node.js v10.12.0及以上版本的fs.mkdirSync支持recursive参数,可直接递归创建目录,无需依赖mkdirp:
const fs = require('fs'); function createDirectory(dirPath) { // recursive: true 会自动创建不存在的父目录,无需提前判断目录是否存在 fs.mkdirSync(dirPath, { recursive: true }); }
方法2:调整mkdirp调用方式适配新版本
若坚持使用mkdirp,先查看当前安装版本:
npm list mkdirp
- 版本为v2.x/v3.x:同步方法调用逻辑正确,但可简化代码(mkdirp.sync会自动处理目录已存在的情况):
const mkdirp = require('mkdirp'); function createDirectory(dirPath) { mkdirp.sync(dirPath); } - 版本为v1.x及以下:原写法本身正确,若仍报错可强制安装指定稳定版本:
npm install mkdirp@1.0.4
内容的提问来源于stack exchange,提问作者Sam Jefferies
相关产品推荐
相关产品推荐

