一键获取Node.js进程信息:实用工具函数分享

一键获取Node.js进程信息:实用工具函数分享

nodejs,mjs,当一个脚本启动其他脚本时,关于当前执行脚本的路径问题,答案如下:

在日常的Node.js开发中,我们经常需要获取当前运行环境的各种信息,比如脚本路径、Node.js版本、命令行参数等。今天分享一个实用的工具函数,可以一键获取所有这些信息。

核心代码:system-info.mjs

javascript 复制代码
// system-info.mjs
import { fileURLToPath } from 'url';
import { execPath, version, argv, cwd, pid, ppid, platform, arch } from 'process';
import { readFileSync } from 'fs';

function getSystemInfo() {
  console.log('=== 系统信息 ===');
  
  // 当前脚本信息
  const currentFile = fileURLToPath(import.meta.url);
  console.log('📄 当前脚本文件:', currentFile);
  
  // 进程启动信息
  const mainScript = argv[1];
  console.log('🚀 启动脚本:', mainScript);
  console.log('🔧 命令行参数:', argv.slice(2));
  
  // Node.js 信息
  console.log('🟢 Node.js 版本:', version);
  console.log('📁 Node.js 执行路径:', execPath);
  
  // 系统信息
  console.log('💻 平台:', platform);
  console.log('🏗️  架构:', arch);
  console.log('📂 当前工作目录:', cwd());
  console.log('🔢 进程ID:', pid);
  console.log('👨‍🔧 父进程ID:', ppid);
  
  // 包信息(如果有)
  try {
    const packageJson = JSON.parse(readFileSync('./package.json', 'utf8'));
    console.log('📦 项目名称:', packageJson.name || '未设置');
    console.log('🏷️  版本:', packageJson.version || '未设置');
  } catch (error) {
    console.log('📦 包信息: 未找到 package.json');
  }
}

// 运行函数
getSystemInfo();

// 导出信息获取函数
export function getProcessInfo() {
  return {
    currentFile: fileURLToPath(import.meta.url),
    mainScript: argv[1],
    nodeVersion: version,
    nodeExecPath: execPath,
    args: argv.slice(2),
    workingDirectory: cwd(),
    platform,
    arch,
    processId: pid,
    parentProcessId: ppid
  };
}

// 如果需要以编程方式使用
export default getProcessInfo;

功能特点

这个小工具提供了两大类功能:

1. 直接控制台输出

运行脚本时,会自动在控制台输出格式化的系统信息,包括:

  • 📄 当前执行的脚本文件路径
  • 🚀 启动进程的入口脚本
  • 🔧 命令行传入的参数
  • 🟢 Node.js版本信息
  • 📁 Node.js可执行文件路径
  • 💻 运行平台和架构
  • 📂 当前工作目录
  • 🔢 进程ID和父进程ID
  • 📦 项目包信息(如果存在package.json)

2. 编程式API

通过导出的函数,你可以在代码中获取结构化的进程信息:

javascript 复制代码
import { getProcessInfo } from './system-info.mjs';

const info = getProcessInfo();
console.log(info);
// 输出:
// {
//currentFile: '/path/to/script.mjs',
//mainScript: '/path/to/main.mjs',
//nodeVersion: 'v18.17.0',
//nodeExecPath: '/usr/local/bin/node',
//args: ['--debug', '--port=3000'],
//workingDirectory: '/project/path',
//platform: 'darwin',
//arch: 'x64',
//processId: 12345,
//parentProcessId: 67890
// }

使用方法

直接运行

bash 复制代码
node system-info.mjs --debug --port=3000

作为模块导入

javascript 复制代码
// 在你的应用代码中
import getProcessInfo from './system-info.mjs';

// 获取信息对象
const processInfo = getProcessInfo();

// 使用这些信息
console.log(`运行在Node.js ${processInfo.nodeVersion}`);
console.log(`工作目录: ${processInfo.workingDirectory}`);

应用场景

这个工具函数在以下场景中特别有用:

  1. 调试和日志记录 - 快速获取运行环境信息并记录到日志中
  2. 系统监控 - 监控应用程序的运行状态和环境
  3. 配置管理 - 根据运行环境动态调整配置
  4. 错误报告 - 在错误信息中包含环境数据,便于排查问题
  5. 多环境部署 - 验证应用程序在不同环境中的运行情况

小结

这个简洁而强大的工具函数封装了Node.js进程的核心信息获取功能,无论是直接使用还是集成到更大的项目中,都能提供极大的便利。清晰的图标标识和完整的类型信息让它既美观又实用。

希望这个工具能帮助你在Node.js开发中更高效地获取和管理进程信息!

相关推荐
雨季mo浅忆16 小时前
记录Node.js安全漏洞及其内置Brotli解码器问题
node.js·安全性测试
tommyjiatong16 小时前
资安底座连环雷:从 PHP2Shell 到 Node2Shell
node.js·php
SEO_juper20 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
SEO_juper21 小时前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
Moshow郑锴1 天前
Ansible 批量部署 Node.js 服务:ZIP 直解与共享目录分发两种方案对比
node.js·ansible
少年的范儿2 天前
Windows 安装 Node.js 教程:nvm 版本管理 + pnpm 安装配置
windows·npm·node.js
peach2 天前
同样是装依赖,为什么 npm 长成 node_modules,Maven 长成 .m2
npm·node.js·maven
FungLeo2 天前
成为全栈·Go 后端篇·重写之前先锁基线:契约、Node 版本与行为清单
golang·node.js·go·openapi·契约测试·成为全栈
FungLeo3 天前
成为全栈·Go 后端篇·契约一致性与差分测试:两套实现如何互相校验
golang·node.js·go·合约测试·差分测试·成为全栈·api兼容
月夏3 天前
前端第一次接自己的后端:mock 切真接口踩了 2 个坑,组件只改了一行 import
前端·后端·node.js