In spite of you and me and the whole silly world going to pieces around us, I love you.
— Gone with the Wind
In spite of you and me and the whole silly world going to pieces around us, I love you.
本篇会动手写很简单的命令注册和参数解析的实例。
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。
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.