Node.js环境下导入SQLite触发ERR_MODULE_NOT_FOUND错误的技术求助
错误根因
你的导入语句加了多余的相对路径前缀,和ESM的模块解析逻辑不匹配。
- 只要导入路径以
./开头,Node的ESM解析器就会默认这是一个本地相对路径,直接从当前脚本所在目录找文件,根本不会去node_modules目录里检索已安装的第三方包。按照报错信息,Node现在正尝试在D:\WebPro\WebProg\cwCode\下找名为sqlite的本地文件,你项目根目录下根本没有这个文件,自然抛出模块找不到的错误。 - 你已经在
package.json里配置了"type": "module",项目本身的ESM规范声明没有问题,也确认过两个sqlite相关的包都正确安装在依赖里,问题完全出在导入路径的写法上。
修正方法
- 导入第三方npm包不需要加任何相对路径前缀,直接写包名就行。把原来的导入语句改成:
import * as sqlite from 'sqlite'; - 如果要直接用底层
sqlite3驱动的原生API,对应的导入写法是:import sqlite3 from 'sqlite3'; - 提个容易踩的ESM坑:后续如果要导入自己写的本地js文件,必须把文件后缀写全。比如同目录下有个自己写的
dbConfig.js配置文件,导入时必须写import dbConfig from './dbConfig.js',不能只写./dbConfig,不然照样报找不到模块的错。
可用代码示例
你装的sqlite@4.x是基于sqlite3做的异步封装,只要两个包都在依赖里,直接可以通过下面的代码初始化数据库连接:
import * as sqlite from 'sqlite'; import sqlite3 from 'sqlite3'; // 打开本地数据库文件连接 const db = await sqlite.open({ filename: './coursework.db', driver: sqlite3.Database });
改完导入路径之后再运行,之前的模块找不到错误就会消失。
内容的提问来源于stack exchange,提问作者Reix
相关产品推荐
相关产品推荐

