CAC创建CLI

本文最后更新于:2024年4月25日 上午

创建Node CLI

入口文件

新建bin目录,新建index.js作为CLI入口文件

bin/index.js

1
2
3
#!/usr/bin/env node

console.log('Hello World!')

第一行要写#!/usr/bin/env node声明在用户环境变量中查找node来执行脚本文件

注册CLI

1
2
3
4
pnpm init

# 不需要TS可忽略
pnpm add typescript @types/node -D

指定type属性为module,bin对象属性键声明cli调用名称,属性声明入口文件位置

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"name": "cli-demo",
"version": "1.0.0",
"description": "",
"type": "module",
"main": "index.js",
"scripts": {
"dev": "tsc -w"
},
"keywords": [],
"bin": {
"cli-demo": "./bin/index.js"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node": "^18.11.18",
"typescript": "^4.9.4"
}
}

tsconfig.joson也指定模块为ES6,暂时使用tsc编译ts

tsconfig.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"compilerOptions": {
"target": "ESNext",
"module": "ES6",
"rootDir": "src",
"outDir": "dist",
"removeComments": true,
"esModuleInterop": true,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"alwaysStrict": true,
"skipLibCheck": true
}
}

最后,使用npm link命令声明cli-demo后即可使用了

1
2
3
4
npm link

cli-demo
# > Hello World!

CAC

安装

1
pnpm add cac

创建实例

src/index.ts

1
2
3
4
5
6
7
8
import { cac } from 'cac'

// 创建CLI实例,名称应与package.jaon中的bin命令相同
const cli = cac('cli-demo')

cli.help() // 使用-h或--help显示帮助信息
cli.version('0.0.1') // 使用-v或--version显示版本信息
cli.parse() // 可链式调用 cli.help().version('0.0.1').parse()

使用pnpm dev编译ts文件,在bin/index.js中引入编译后的js文件

bin/index.js

1
2
3
4
#!/usr/bin/env node

import '../dist/index.js'

现在就可使用cli-demo -v/ -h命令了

1
2
3
4
5
6
7
8
9
10
11
cli-demo -v
cli-demo/0.0.1 win32-x64 node-v18.12.1
cli-demo -h
cli-demo/0.0.1

Usage:
$ cli-demo <command> [options]

Options:
-h, --help Display this message
-v, --version Display version number

CAC创建CLI
https://qingshaner.com/CAC创建CLI/
作者
清山
发布于
2022年12月22日
许可协议