1. 可执行脚本
使用Javascript语言编写一个可执行脚本
#!/usr/bin/env node
console.log('hello');
然后修改权限
chmod 755 hello
执行脚本
./hello
hello
如果想把路径去掉可以把hello的路径加入环境变量PATH。但是,另一种更好的做法时在当前目录下创建一个package.json
{
name:'hello',
"bin":{
"hello":"hello"
}
}
然后npm link
npm link
在执行hello就不用输入路径了
hello
2. 命令行参数的原始写法
命令行参数可以用系统变量process.env
获取
#!/usr/bin/env node
console.log('hello ',process.argv[2]);
hello zxmf
process.env = ['node','hello','zxmf']
3. 新建进程
脚本可以通过child_process
模块新建子进程,从而执行linux
命令
#!/usr/bin/env node
let name = process.argv[2];
let {exec} = require('child_process');
let child = exec('echo hello '+name,(err,stdout,stderr)=>{
if(err) throw err;
console.info(stdout);
});
hello zxmf
4. yargs
yargs模块能够解决如何处理命令行参数。
4.1 安装
npm install yargs --save
4.2 读取命令行参数
yargs模块提供了argv对象,用来读取命令行参数
#!/usr/bin/env node
let argv = require('yargs').argv;
console.log('hello ',argv.name);
hello --name=zxmf
hello --name zxmf
process.argv
[ '/usr/local/bin/node', '/usr/local/bin/hello4', '--name=zxmf' ]
Argv
{
name: 'zxmf',
}
4.3 还可以指定别名
let argv = require('yargs')
.alias('n','name')
.argv
hello -n zxmf
hello --name zxmf
4.4 下划线属性
argv对象有一个下划线属性,可以获取非连词线开头的参数
let argv = require('yargs').argv
console.log('hello ',argv.n);
console.log(argv._);
hello A -n zxmf B C
hello zxmf ['A','B','C']
4.5 命令行参数的配置
[ ] demand 是否必选
[ ] default 默认值
-
[ ] describe 提示
#!/usr/bin/env node let argv = require('yargs') .demand(['n']) .default({n:'zxmf'}) .describe({n:"你的名字"}) .argv; console.log('hello ',argv.n);
这个代表n不能省略,默认值为zxmf,并给出提示
option方法允许将所有的配置写入配置对象
#!/usr/bin/env node
let argv = require('yargs')
.option('n',{
alias:'name',
demand:true,
default:'zxmf',
describe:'请输入你的名字',
type:'string',
boolean:true
}).argv
console.log('hello',argv.n);
有时候,某些参数不需要,只起到开关作用。可以用boolean指定这些参数返回布尔值
#!/usr/bin/env node
let argv = require('yargs')
.boolean(['private'])
.argv
console.log('hello',argv.n);
参数private总是返回一个布尔值
hello
false
hello -private
true
hello -private zxmf
true
4.6 帮助信息
yargs模块提供以下方法,生成帮助信息
usage 用法格式
example 提供例子
help 显示帮助信息
-
epilog 出现在帮助信息的结尾
#!/usr/bin/env node let argv = require('argv') .option('n',{ alias:'name', demand:true, default:'tom', describe:'你的名字', type:'string' }) .usage('Usage: hello [options]') .example('hello -n zxmf','say hello to zxmf') .help('h') .alias('h','help') .epilog('copyright 2018') .argv