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

quote

In spite of you and me and the whole silly world going to pieces around us, I love you.

Gone with the Wind

本篇会动手写很简单的命令注册和参数解析的实例。

动手实操node的process模块

index.js

#!/usr/bin/env node

let argv = require('process').argv
console.log(argv)

我们先运行脚手架 :

imooc-test-jun

看看打印结果:

[ 'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\jun\\AppData\\Roaming\\npm\\node_modules\\imooc-test-jun\\bin\\index.js' ]

打印出来是一个数组,数组第一个元素是node本身的执行路径,第二个数组是我们的脚手架执行路径。

我们再运行脚手架,此时在后面加上一个参数:

imooc-test-jun init

看看打印结果:

[ 'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\jun\\AppData\\Roaming\\npm\\node_modules\\imooc-test-jun\\bin\\index.js',
  'init' ]

我们发现,此时返回的数组的第三个元素就是我们输入的init。

下面的实例解析init 和init所传入的参数、--v和-V命令

  • 我们在脚手架依赖的一个包写一个init函数

imooc-test-jun-lib --> index.js

module.exports = {
    init({option, param}) {
        console.log('init1', option, param)
    }
}
  • 在脚手架核心文件imooc-test-jun引入依赖库imooc-test-jun-lib,编写参数解析的功能

    imooc-test-jun --> index.js

#!/usr/bin/env node
const lib = require('imooc-test-jun-lib') // 引入依赖库
let argv = require('process').argv // 引入node的process模块并且取argv的值
console.log(argv)
const command = argv[2]
let options = argv.slice(3)
let [option, param] = options
if (command) {
    if(command.startsWith('--')||command.startsWith('-')) { // 看作全局option
        const globalOption = command.replace(/--|-/g, '')
        console.log(globalOption)
        if(globalOption === 'version'||globalOption === 'V') {
            console.log('1.0.0')
        }
    } else {
        if (lib[command]) {
            lib[command]({option, param})
        } else {
            console.log('无效的命令')
        }
    }

} else {
    console.log('请输入命令')
}

这是一个很简单的实例,复杂的参数解析可能需要依赖第三方库进行解析,但是基本原理确就是如此。

评论没有加载,检查你的局域网

Cannot load comments. Check you network.

eat();

sleep();

code();

repeat();