注册一个命令:hzz-test init
一、执行hzz-test init命令
1、先建立本地软链接,进行本地调试
cd hzz-test
npm link
2、执行hzz-test init命令后,通过require('process')查看命令
执行init命令后,argv中会添加一个init参数,如果没有init则argv中没有init参数。(即hzz-test后执行哪个命令,argv中就会添加哪个参数)
二、在hzz-test-lib包中添加init方法
init() {
console.log('执行init流程')
}
三、在hzz-test中判断命令
先建立本地软链接
cd hzz-test
npm link hzz-test-lib
#!/usr/bin/env node
const lib = require('hzz-test-lib')
// console.log(lib, lib.sum(1, 2))
// console.log('hello hzz 1111')
// 注册一个命令 hzz-test init
console.log(require('process'))
const argv = require('process').argv;
const command = argv[2]
if (command) {
if (lib[command]) {
lib[command]();
} else {
console.log('无效的命令')
}
} else {
console.log('请输入命令')
}
// 实现参数解析 --version 还让 init --name
实现参数解析 --version 和 init --name
- init --name
一、执行hzz-test init --name vue-test查看argv
可以看到通过init空格之后填写的完整字符串都会被拦截下来
二、对拦截下来的字符串进行解析
三、将解析出来的字符作为参数传入到执行方法中
就可以拿到传入的参数了
但是实际开发中遇到的参数会更加复杂(可能会有多个参数,并且参数也能支持入参,如:hzz-test --name hzz -p 123 --test),就需要使用库去解决,否则会消耗我们大量时间
- --version
如果命令前为--或-则视为全局的,需要额外处理
if (command.startsWith('--') || command.startsWith('-')) {
const globalOption = command.replace(/--|-/g, '');
console.log(globalOption)
if (globalOption === 'version' || globalOption === 'V') {
console.log('1.0.0')
}
}