Lerna脚手架搭建(十五):脚手架初始化 + 全局参数注册
本文最后更新于:2024年12月10日 下午
一、命令注册 👈
- 在
core/cli
下执行命令:cnpm i -S commander
安装 commander 包; - 编辑
core/cli/lib/index.js
文件:- 添加 commander 包引用:
const commander = require('commander');
; - 实例化
program
对象:const program = new commander.Command();
; - 创建 registerCommand 方法;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30...
const pathExists = require('path-exists').sync;
const commander = require('commander');
...
let args;
const program = new commander.Command();
async function core() {
try {
checkPkgVersion();
checkNodeVersion();
checkRoot();
checkUserHome();
checkInputArgs();
checkEnv();
await checkGlobalUpdate();
registerCommand();
} catch (e) {
log.error(e.message);
}
}
function registerCommand() {
program
.version(pkg.version);
program.parse(process.argv);
}
...- 分别执行
xuven-cli-dev
、xuven-cli-dev -h
运行结果:
- 添加 commander 包引用:
- 编辑
core/cli/lib/index.js
文件的 registerCommand 方法,内容如下:1
2
3
4
5
6
7
8function registerCommand() {
program
.name(Object.keys(pkg.bin)[0])
.usage('<command> [options]')
.version(pkg.version);
program.parse(process.argv);
} - 执行
xuven-cli-dev -h
结果:
- 编辑
core/cli/lib/index.js
文件的 registerCommand 方法,内容如下:1
2
3
4
5
6
7
8
9function registerCommand() {
program
.name(Object.keys(pkg.bin)[0])
.usage('<command> [options]')
.version(pkg.version)
.option('-d, --debug', '是否开启调试模式', false);
program.parse(process.argv);
} - 执行
xuven-cli-dev -h
结果:
二、开启 debug 模式 👈
-
编辑
core/cli/lib/index.js
文件的 registerCommand 方法,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23function registerCommand() {
program
.name(Object.keys(pkg.bin)[0])
.usage('<command> [options]')
.version(pkg.version)
.option('-d, --debug', '是否开启调试模式', false);
// 开启 debug 模式
program.on('option:debug', function () {
const {
debug
} = program.opts();
if (debug) {
process.env.LOG_LEVEL = 'verbose';
} else {
process.env.LOG_LEVEL = 'info';
}
log.level = process.env.LOG_LEVEL;
log.verbose('test');
});
program.parse(process.argv);
} -
注释
core
方法中的checkInputArgs();
; -
执行
xuven-cli-dev --debug
结果:
三、监听为知命令 👈
-
编辑
core/cli/lib/index.js
文件的 registerCommand 方法,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32function registerCommand() {
program
.name(Object.keys(pkg.bin)[0])
.usage('<command> [options]')
.version(pkg.version)
.option('-d, --debug', '是否开启调试模式', false);
// 开启 debug 模式
program.on('option:debug', function () {
const {
debug
} = program.opts();
if (debug) {
process.env.LOG_LEVEL = 'verbose';
} else {
process.env.LOG_LEVEL = 'info';
}
log.level = process.env.LOG_LEVEL;
log.verbose('test');
});
// 对为知命令监听
program.on('command:*', function (obj) {
const availableCommands = program.commands.map(cmd => cmd.name());
console.log(colors.red('未知的命令:' + obj[0]));
if (availableCommands.length > 0) {
console.log(colors.red('可用命令:' + availableCommands.join(',')));
}
})
program.parse(process.argv);
} -
执行
xuven-cli-dev test
,结果:
四、默认打印帮助信息 👈
-
编辑
core/cli/lib/index.js
文件的 registerCommand 方法,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36function registerCommand() {
program
.name(Object.keys(pkg.bin)[0])
.usage('<command> [options]')
.version(pkg.version)
.option('-d, --debug', '是否开启调试模式', false);
// 开启 debug 模式
program.on('option:debug', function () {
const {
debug
} = program.opts();
if (debug) {
process.env.LOG_LEVEL = 'verbose';
} else {
process.env.LOG_LEVEL = 'info';
}
log.level = process.env.LOG_LEVEL;
log.verbose('test');
});
// 对为知命令监听
program.on('command:*', function (obj) {
const availableCommands = program.commands.map(cmd => cmd.name());
console.log(colors.red('未知的命令:' + obj[0]));
if (availableCommands.length > 0) {
console.log(colors.red('可用命令:' + availableCommands.join(',')));
}
})
program.parse(process.argv);
if (program.args && program.args.length < 1) {
program.outputHelp();
}
}
Lerna脚手架搭建(十五):脚手架初始化 + 全局参数注册
https://blog.xuven.xyz/post/ScaffoldingInitialization/