初始化项目
确保有
package.json
,通过npm init
创建。目录结构如下:
my-cli-tool/
├── bin/
│ └── cli.js # CLI 入口文件
├── utils/
│ └── logger.js # 日志工具
├── main.js # 核心逻辑
├── package.json # 项目配置文件
cli文件的的示范代码
#!/usr/bin/env node
const { program } = require('commander');
const path = require('path');
const fs = require('fs');
const Logger = require('../utils/logger');
const package = require('../package.json');
program
.version(package.version)
.description('将 Markdown 文件发布为草稿')
.argument('<file>', 'Markdown 文件路径')
.option('-c, --config <path>', '配置文件路径', './config.json')
.option('-o, --output <path>', '输出 HTML 文件路径')
.action(async (file, options) => {
try {
const inputPath = path.resolve(file);
const outputPath = options.output || inputPath.replace(/\.md$/, '.html');
if (!fs.existsSync(inputPath)) {
Logger.error('文件不存在', inputPath);
process.exit(1);
}
const main = require('../main'); # 引入入口文件
await main(inputPath, outputPath);
} catch (error) {
Logger.error('执行失败', error.message);
process.exit(1);
}
});
program.parse();
配置 package.json
添加以下字段:
{
"name": "my-cli-tool",
"version": "1.0.0",
"bin": {
"my-cli-tool": "./bin/cli.js"
}
}
设置执行权限
在 cli.js
文件顶部添加:
#!/usr/bin/env node
并运行:
chmod +x bin/cli.js
本地全局安装并测试
在项目根目录运行:
npm install -g
测试命令:
my-cli-tool <file.md> -o <output.html>
发布到 npm(可选)
登录并发布:
npm login
npm publish
说明
CLI 工具的入口文件需要通过
#!/usr/bin/env node
指定。全局安装后,命令行工具可以直接运行。
package.json
的bin
字段是关键,绑定命令名和入口文件。运行效果如图所示