使用LevelJS 8.0.0时出现TypeError: level is not a function错误求助
解决LevelDB导入后报错TypeError: level is not a function
问题原因
Level v5及以上版本采用ESM优先的发布策略,使用CommonJS的require导入时,得到的是一个包含default属性的对象,而非直接的构造函数,因此直接调用level()会触发类型错误。
解决方案
方案1:修改CommonJS导入方式,获取default导出
将导入代码调整为:
const level = require('level').default; const db = level('./db', { valueEncoding: 'json' }); db.put('key', { example: true }, function (err) { if (err) throw err; db.get('key', function (err, value) { if (err) throw err; console.log(value); }); });
方案2:改用ESM模块导入(推荐)
- 方法A:将脚本文件后缀改为
.mjs,使用import语法:
import level from 'level'; const db = level('./db', { valueEncoding: 'json' }); db.put('key', { example: true }, function (err) { if (err) throw err; db.get('key', function (err, value) { if (err) throw err; console.log(value); }); });
- 方法B:在项目
package.json中添加"type": "module",此时.js文件会被当作ESM处理,直接使用上述import代码即可。
方案3:降级到Level v4版本
若不想修改代码结构,可卸载当前版本并安装v4稳定版:
npm uninstall level npm install level@4
安装完成后,原有require代码即可正常运行。
验证版本
通过以下命令查看当前Level版本,确认是否为v5+:
npm list level
内容的提问来源于stack exchange,提问作者Cooper
相关产品推荐
相关产品推荐

