NodeJS子进程中无法找到sqlite3模块问题求助
解决子进程中无法引入sqlite3模块的问题
嘿,我刚好踩过类似的坑!你用child_process.fork()启动后台长任务时,子进程里找不到sqlite3模块,大概率是原生模块编译不完整或者路径配置的问题,给你几个靠谱的解决思路:
先确认子进程的工作目录与模块路径
fork出来的子进程默认会继承主进程的工作目录,如果你的主进程不是从脚本所在目录启动的,可能会导致子进程找不到项目里的node_modules。可以在fork时显式指定工作目录为脚本所在路径:// main.js里修改fork的代码 const child_process = require('child_process'); const fork = child_process.fork('./child.js', { cwd: __dirname });另外,你也可以在
child.js开头打印模块查找路径,看看有没有包含项目的node_modules:// child.js开头添加 console.log(module.paths); const path = require('path'); // 如果没找到node_modules路径,手动添加 module.paths.push(path.join(__dirname, 'node_modules'));重新编译sqlite3原生模块
sqlite3是需要编译的原生模块,有时候安装过程中编译不完整,或者主/子进程的Node版本不一致,都会导致模块找不到。先卸载再重新编译安装:npm uninstall sqlite3 npm install sqlite3 --build-from-source--build-from-source参数会强制针对当前Node环境重新编译模块,避免版本不兼容的问题。检查主/子进程的Node版本一致性
原生模块是绑定特定Node版本的,如果主进程和子进程用的是不同版本的Node(比如主进程用全局Node,子进程用nvm管理的另一个版本),就会出现模块找不到的情况。可以在main.js和child.js里分别添加:console.log(process.version);运行后确认两个版本完全一致,如果不一致,统一Node版本后再重新安装sqlite3。
内容的提问来源于stack exchange,提问作者Dago
相关产品推荐
相关产品推荐

