vscode中node -v能运行但require('mysql2')报错,根本原因是模块未安装到当前项目目录、ts项目缺少"type": "module"声明、语言服务缓存未刷新或launch.json中program路径指向错误的.ts源码而非编译后.js文件。

VSCode 里 node -v 能跑,但 require('mysql2') 报错
这不是 VSCode 配置问题,而是模块没装对位置或语言服务没识别。先确认当前终端所在目录就是 package.json 所在的项目根目录,再执行 npm install mysql2。如果用了 monorepo 或软链接(比如 npm link),require() 可能找不到模块——此时运行 npm ls mysql2,若输出带 extraneous 标记,说明安装路径不对。
常见踩坑点:
- 在错误目录下执行
npm install,导致模块装到父级或全局,而非当前项目 - TypeScript 项目里没配
"type": "module",却用import加载mysql2,触发 ESM/CJS 解析冲突 - VSCode 没重启,语言服务缓存了旧的
node_modules结构,删掉.vscode目录后重开即可刷新
launch.json 中 program 字段总连不上数据库
断点不生效、conn.connect() 报错或根本没执行,八成是 program 指向了错误路径。调试器只认 .js 文件,不认 .ts 或源码路径。
实操建议:
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 纯 JavaScript 项目:设
"program": "${workspaceFolder}/db.js",确保该文件存在且导出连接逻辑 - TypeScript 项目:
program必须指向编译后的.js(如"${workspaceFolder}/dist/db.js"),同时tsconfig.json含"sourceMap": true,且.js.map和.js在同一目录 - 加
"cwd": "${workspaceFolder}",避免require('./config')因工作目录错位而报Cannot find module - 别用
${file}调试多文件项目——它只跑当前打开的文件,不会加载依赖链
MySQL 连接报 ER_NOT_SUPPORTED_AUTH_MODE
这是 MySQL 8.0+ 默认认证插件变更导致的,Node.js 的 mysql 或旧版 mysql2 不支持 caching_sha2_password。不是代码写错,也不是 VSCode 问题。
解决方式只有改服务端配置(本地开发环境可接受):
- 进 MySQL 命令行,执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 然后
FLUSH PRIVILEGES; - 连接配置里保持
user: 'root'、password: 'your_password'不变,其他字段无需动 - 如果用 Docker,启动时加参数
--default-authentication-plugin=mysql_native_password
用 nodemon 调试时断点全失效
nodemon 自己起进程、热替换、拦截信号,VSCode 默认的 launch 模式根本抓不住它。硬在 launch.json 里写 runtimeExecutable: "nodemon" 是徒劳的。
正确做法是切换为 attach 模式:
- 终端手动运行:
nodemon --inspect-brk src/server.js(--inspect-brk让进程启动即暂停) - VSCode 里新增一个
launch.json配置,"request": "attach","port": 9229(默认值) - 确保
"skipFiles": ["<node_internals>"]</node_internals>存在,否则断点会卡在 Node 内部代码里 - 不要同时开两个调试会话——attach 之前,确保没有其他
node进程占着 9229 端口
require() 成功不代表调试器能加载,node db.js 跑通也不代表 F5 调试能走通。每次改完 launch.json 或 package.json,记得关掉所有 VSCode 窗口再重新用终端启动 code .。










