脚手架命令注册和参数解析

61 阅读1分钟

注册一个命令:hzz-test init

一、执行hzz-test init命令

1、先建立本地软链接,进行本地调试

cd hzz-test
npm link

2、执行hzz-test init命令后,通过require('process')查看命令

image.png 执行init命令后,argv中会添加一个init参数,如果没有init则argv中没有init参数。(即hzz-test后执行哪个命令,argv中就会添加哪个参数)

二、在hzz-test-lib包中添加init方法

init() {
        console.log('执行init流程')
    }

image.png

三、在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

image.png

image.png

实现参数解析 --version 和 init --name

  • init --name

一、执行hzz-test init --name vue-test查看argv

image.png

可以看到通过init空格之后填写的完整字符串都会被拦截下来

二、对拦截下来的字符串进行解析

image.png

三、将解析出来的字符作为参数传入到执行方法中

image.png

image.png

就可以拿到传入的参数了 image.png

但是实际开发中遇到的参数会更加复杂(可能会有多个参数,并且参数也能支持入参,如: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')
    }
}

image.png