VSCode终端“找不到模块”主因是工作目录非项目根,Node.js仅在当前及祖先目录查找node_modules;需确认左下角路径含package.json,用cd切换至正确目录,或通过npm start运行(已配环境),避免直接node xxx.js。

终端里 node 命令报错“找不到模块”?先确认工作目录
VSCode 终端默认启动路径是当前打开的文件夹(即工作区根目录),不是你写爬虫脚本的子目录。如果 package.json 和 node_modules 在 ./src 或 ./crawler 里,而你在根目录下执行 node index.js,Node 就找不到 require 的包——因为 node_modules 不在当前目录或其祖先路径中。
实操建议:
- 在 VSCode 左下角点击当前路径,快速跳转到含
package.json的目录;或用cd ./crawler切过去 - 运行
npm start比直接node xxx.js更可靠,因为scripts.start通常已配好入口和环境 - 检查
package.json中"main"字段是否指向正确入口文件(比如"main": "index.js")
node 运行时报 ERR_REQUIRE_ESM?ESM 和 CommonJS 混用要小心
很多爬虫库(如 puppeteer、cheerio 最新版)已默认发布为 ESM 模块,而你的主文件若用 require() 加载它们,就会触发这个错误。这不是路径问题,是模块系统不匹配。
实操建议:
- 看报错堆栈里哪一行出的错:如果是
require('puppeteer'),说明你在 CommonJS 环境里加载了 ESM 包 - 两种解法任选其一:
– 改用import语法,并在package.json加"type": "module";
– 或降级使用支持 CommonJS 的旧版(如puppeteer@19.11.1),但注意安全与维护性 - 临时验证:在终端运行
node --version,确保 ≥ v14.13(ESM 基础支持),但别指望它自动兼容混合写法
爬虫跑着就卡住或没输出?检查终端编码和代理设置
VSCode 内置终端(尤其是 Windows 的 PowerShell 或 CMD)有时会因字符编码或代理策略拦截 HTTP 请求,表现为 axios 或 node-fetch 卡在 pending,控制台无任何日志,连 console.log('start') 都不打印。
实操建议:
- 在终端执行
chcp 65001(Windows)强制 UTF-8,避免中文路径/参数解析失败 - 如果用了公司网络或设置了系统代理,加环境变量再运行:
NODE_OPTIONS=--no-proxy node index.js或http_proxy= https_proxy= node index.js - 加一句
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';(仅测试环境)绕过自签名证书问题,但别提交到代码库
想让爬虫后台持续跑?别依赖 VSCode 终端窗口
VSCode 关闭、切换标签、甚至终端被误点清屏,都会中断正在运行的 node 进程。爬虫类任务往往需要几小时甚至跨天,靠终端直连不可靠。
实操建议:
- 用
pm2管理:全局安装后,进项目目录运行pm2 start index.js --name my-crawler,进程就脱离终端存活 - Windows 用户可用
node-windows把脚本注册成系统服务,比手动开 cmd 窗口稳定得多 - 如果只是调试阶段不想关终端,至少加个
try/catch+process.on('uncaughtException'),防止一次请求失败导致整个进程退出
node -v 结果,完全取决于系统 PATH 里的第一个 node 可执行文件——它可能和你用 nvm/nvs 切换的版本不一致,也可能和 CI 环境不同。跑爬虫前,先确认终端里 which node(macOS/Linux)或 where node(Windows)输出的路径对不对。


















