logo
0
0
WeChat Login
feat: 创建标准的 Node.js CLI 项目,使用 NodeNext 模块标准

npc-play

一个标准的 Node.js CLI 项目,使用最新的 NodeNext 模块标准。

特性

  • NodeNext 模块标准: 使用最新的 Node.js 模块解析规则
  • TypeScript 5.x: 完整的类型安全和现代开发体验
  • ES2022 Target: 使用最新的 JavaScript 特性
  • Commander.js 14.x: 业界成熟的 CLI 框架
  • 安全的 JSON 导入: 通过 createRequire 在 ESM 中安全导入 package.json
  • 模块化设计: 清晰的代码结构,易于扩展和维护

项目结构

npc-play/ ├── src/ │ ├── cli.ts # CLI 主入口 │ ├── index.ts # 程序入口点 │ ├── utils/ │ │ └── logger.ts # 日志工具类 │ └── config/ │ └── default.config.ts # 默认配置 ├── dist/ # 编译输出目录 ├── package.json ├── tsconfig.json └── README.md

安装

# 克隆项目 $ git clone https://cnb.cool/beilinmo/CNB-NightStar/npc-play.git $ cd npc-play # 安装依赖 $ npm install

使用方法

构建项目

# 编译 TypeScript $ npm run build # 清理构建产物 $ npm run clean

运行 CLI

# 使用编译后的代码 $ npm start -- --help $ npm start -- greet Yu $ npm start -- greet Yu --title Mr $ npm start -- version # 开发模式(使用 ts-node) $ npm run dev -- --help $ npm run dev -- greet Yu $ npm run dev -- version

全局安装

# 构建项目 $ npm run build # 链接到全局 $ npm link # 现在可以在任意位置使用 $ npc-play --help $ npc-play greet Yu $ npc-play version

可用命令

greet

向某人问好,可选择添加称谓。

# 基本用法 $ npc-play greet <name> # 添加称谓 $ npc-play greet Yu --title Mr $ npc-play greet Alice --title Dr # 禁用表情符号 $ npc-play greet Yu --no-emoji # 详细输出 $ npc-play --verbose greet Yu

示例输出:

✅ Hello, Yu! 👋 ✅ Hello, Mr Yu! 👋

version

显示版本和系统信息。

$ npc-play version

示例输出:

npc-play v1.0.0 Node.js v18.17.0 Platform: linux-x64

全局选项

  • -v, --verbose: 启用详细输出
  • -c, --config <path>: 指定配置文件路径

开发

脚本命令

  • npm run build: 编译 TypeScript 到 dist/ 目录
  • npm run dev: 使用 ts-node 运行开发模式
  • npm start: 运行编译后的 CLI
  • npm run clean: 清理构建产物
  • npm test: 运行测试(待实现)

NodeNext 模块标准说明

NodeNext 是 Node.js 的新模块系统,它提供了:

  1. 严格的解析规则: 统一 CommonJS 和 ES Module 的行为
  2. 明确的文件扩展名: 导入时必须指定 .js.ts 等扩展名
  3. 安全的 JSON 导入: 默认不允许导入 JSON,需要使用 createRequire
  4. 未来兼容性: 面向未来的模块标准

在 ESM 中导入 JSON 的安全方式:

import { createRequire } from 'module'; const require = createRequire(import.meta.url); const pkg = require('./package.json');

配置

默认配置位于 src/config/default.config.ts,包含:

  • 应用程序设置
  • 日志配置
  • 输出格式化选项
  • 命令默认值
  • 文件路径配置

许可证

MIT License

作者

Yu

致谢