JavaScript 借助 Node.js 可开发 CLI 工具:需添加 #!/usr/bin/env node、设可执行权限,用 process.argv 或 commander 解析参数,fs 操作文件,child_process 调用外部命令,os 获取系统信息,注意权限限制与跨平台适配。

JavaScript 本身没有内置的“命令行工具开发”能力,但借助 Node.js 运行时,你可以用 JavaScript 编写可直接在终端中运行的 CLI(Command-Line Interface)工具。核心在于利用 Node.js 提供的系统级 API 和标准输入输出接口,而非浏览器环境中的 DOM 或 Web API。
如何开发一个基础 CLI 工具
Node.js 提供了开箱即用的 CLI 开发支持:
-
入口文件 + 可执行权限:创建一个 JS 文件(如
mycli.js),顶部添加#!/usr/bin/env node,并用chmod +x mycli.js赋予执行权限,即可像命令一样运行(./mycli.js --help) -
解析命令行参数:使用内置的
process.argv获取原始参数,或更推荐用成熟库如commander、yargs或clipanion处理选项、子命令和自动帮助文档 -
读取用户输入:通过
process.stdin监听数据流,或用readline模块实现交互式输入(例如询问用户名、确认操作) -
输出内容到终端:用
console.log()、process.stdout.write(),甚至支持 ANSI 转义序列控制颜色(如\x1b[32m绿色\x1b[0m)
Node.js 可调用的关键系统 API
Node.js 内置模块封装了大量操作系统能力,常见且实用的包括:
-
文件系统操作:
fs模块支持同步/异步读写文件、创建目录、删除、重命名、监听文件变化(fs.watch)。注意:需处理权限错误和路径跨平台问题(用path.join()) -
进程与子进程控制:
process对象提供当前进程信息(PID、环境变量process.env、退出码)、标准流(stdin/stdout/stderr);child_process可执行 shell 命令(exec、spawn、execFile),适合调用 git、curl、ffmpeg 等外部工具 -
网络请求与服务:
https、http模块发起 HTTP 请求;net创建 TCP 客户端/服务器;dns进行域名解析——可用于构建 API 测试工具或轻量代理 -
操作系统信息:
os模块获取 CPU 核心数、内存总量、主机名、平台类型(os.platform()返回 'win32'/'linux'/'darwin')、临时目录路径等,对跨平台适配很关键 -
定时与事件循环控制:
setTimeout、setInterval、process.nextTick、queueMicrotask,可用于实现重试逻辑、延迟执行或避免阻塞 CLI 响应
注意事项与边界
不是所有系统功能都开放给 Node.js CLI:
JTBC CMS(5.0) 是一款基于PHP和MySQL的内容管理系统原生全栈开发框架,开源协议为AGPLv3,没有任何附加条款。系统可以通过命令行一键安装,源码方面不基于任何第三方框架,不使用任何脚手架,仅依赖一些常见的第三方类库如图表组件等,您只需要了解最基本的前端知识就能很敏捷的进行二次开发,同时我们对于常见的前端功能做了Web Component方式的封装,即便是您仅了解HTML/CSS也
立即学习“Java免费学习笔记(深入)”;
- 无法直接访问硬件设备(如串口、GPU、摄像头),需依赖原生插件(C++ addon)或调用系统命令(如
lsusb、system_profiler)再解析输出 - 无权绕过操作系统权限模型:写入
/etc、修改系统服务、读取其他用户进程内存等操作会失败,需用户主动以sudo运行(应明确提示并最小化提权范围) - 不能调用浏览器专属 API(
localStorage、fetch的某些模式、WebRTC),但可用node-fetch或undici替代fetch - 全局安装后需配置
bin字段(package.json中),npm 才能将脚本链接到$PATH,让用户直接输入命令名(如mycli init)
快速起步示例
新建 hello-cli.js:
const { argv } = process;
if (argv.includes('--name')) {
const name = argv[argv.indexOf('--name') + 1] || 'World';
console.log(`Hello, ${name}!`);
} else {
console.log('Usage: hello-cli --name
}
然后运行:chmod +x hello-cli.js && ./hello-cli.js --name Alice → 输出 Hello, Alice!










