在 Linux 环境下,JavaScript 日志中的常见错误通常与运行时环境、依赖管理或代码逻辑相关。以下是分类整理的高频错误类型及解决方案:
Error: Cannot find module 'xxx'
npm install xxx --save # 安装依赖
node -e "require.resolve('xxx')" # 验证模块路径
ERR_REQUIRE_ESM
require()
加载 ES Module 格式的包。import { foo } from 'xxx'; // 改用 ES Module 语法
或在 package.json
中添加 "type": "module"
。
EACCES: permission denied
bash
chmod 755 /path/to/file # 调整权限
sudo chown -R $USER /path # 修改所有者(谨慎使用)
FATAL ERROR: Ineffective mark-compacts near heap limit
bash
node --max-old-space-size=4096 app.js # 调整内存限制(单位MB)
或优化代码内存使用(如流式处理大文件)。process.env.XXX is undefined
bash
export API_KEY=value && node app.js # 临时设置
或使用 .env
文件配合 dotenv
包加载。ENOENT: no such file or directory
javascript
const fs = require('fs');
if (fs.existsSync(path)) { /* 操作文件 */ } // 检查路径是否存在
EADDRINUSE: address already in use :::3000
bash
lsof -i :3000 # 查看占用进程
kill -9 <PID> # 终止进程
或修改应用端口:
javascript
app.listen(3001, () => console.log('Port changed'));
SyntaxError: Unexpected token
node -c script.js
检查语法。TypeError: Cannot read property 'xxx' of undefined
const value = obj?.property; // 可选链操作符(Node.js 14+)
ETIMEDOUT
/ ECONNREFUSED
javascript
axios.get(url).catch(err => { if (err.code === 'ECONNREFUSED') retry(); });
tail -f /var/log/app.log | grep -i "error"
jq
(JSON 日志)、awk
/sed
(文本处理)bash
node --inspect app.js # 开启 Chrome DevTools 调试
bash
gcore <PID> # 生成核心转储文件
node-heapdump # 内存泄漏分析
通过系统化分类错误类型并结合日志上下文(如时间戳、进程ID),可以快速定位问题根源。建议在关键流程中添加结构化日志(如 log.level
、error.stack
),并配合监控工具(如 Prometheus + Grafana)实现主动预警。