浅谈node.js 命令行工具(cli)

2020-06-17 06:52:08易采站长站整理


#!/usr/bin/env node
var argv = require('yargs').argv;

console.log('hello ', argv.name);

使用时,下面两种用法都可以。


$ hello --name=tom
hello tom

$ hello --name tom
hello tom

也就是说,process.argv 的原始返回值如下。


$ node hello --name=tom
[ 'node',
'/usr/local/bin/hell',
'--name=tom' ]

yargs 可以上面的结果改为一个对象,每个参数项就是一个键值对。

六.发布命令包

通过npm publish进行发布,前提是有npm帐号。如何操作可以查看npm 官方文档。

本文是通过原生node.js来开发命令工具,而vue-cli是采用commander.js来简化命令工具开发,

了解了执行流程,去学习对应的模块,就很好知道原理了!,本文抛个砖头

最后:有时我们用到的命令行不是全局安装的,而是本地安装的

1. package.json bin字段

bin项用来指定各个内部命令对应的可执行文件的位置。


"name":"someTool",
"bin": {
"someTool": "./bin/someTool.js"
}

上面代码指定,someTool 命令对应的可执行文件为 bin 子目录下的 someTool.js。

当一个项目依赖上面的someTool工具时,同时只是本地安装


{
"name": "myproject",
"devDependencies": {
"someTool": "latest"
},
"scripts": {
start: 'someTool build' //等同于start: './node_modules/someTool/someTool.js build'

}
}

npm会寻找这个文件,在

node_modules/.bin/
目录下建立符号链接。在上面的例子中,someTool.js会建立符号链接
npm_modules/.bin/someTool
。由于
node_modules/.bin/
目录会在运行时加入系统的PATH变量,因此在运行npm时,就可以不带路径,直接通过命令来调用这些脚本。

因此,像上面这样的写法可以采用简写。


scripts: {
start: './node_modules/someTool/someTool.js build'
}

// 简写为

scripts: {
start: 'someTool build'
}

所有

node_modules/.bin/
目录下的命令,都可以用
npm run [命令]
的格式运行。在命令行下,键入
npm run
,然后按tab键,就会显示所有可以使用的命令。

1. npm run

上面代码中,

scripts