用 nodejs 写命令行工具

8 篇文章 0 订阅

npm 不仅可以管理 nodejs 的依赖关系,它还可以用来打包和分发命令行工具!

  1. 创建一个新的 npm 项目:

    $ npm init

给应用起一个名字:ser,其他输入项都直接回车,用默认内容。最后,创建了文件 package.json:

{
  "name": "ser",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

创建文件 index.js:

#!/usr/bin/env node

console.log('Hello World!')

为了生成可执行的命令,现在修改 package.json,增加 bin 属性:

"bin": {
  "ser": "./index.js"
}

接下来就可以安装了:

$ sudo npm install -g
$ ser
Hello World!

看看都安装了什么:

$ which ser
/usr/local/bin/ser
$ readlink /usr/local/bin/ser
../lib/node_modules/ser/index.js

在当前目录下,查看:

$ sudo npm link
npm WARN ser@1.0.0 No description
npm WARN ser@1.0.0 No repository field.

up to date in 1.409s
found 0 vulnerabilities

/usr/local/bin/ser -> /usr/local/lib/node_modules/ser/index.js
/usr/local/lib/node_modules/ser -> /home/hu/tmp2/t/t/tmp

如果要卸载,请用下面的命令:

$ sudo npm uninstall -g

当程序满意之后,你可以使用 npm publish 命令,将其发布到 npm 公共库(public npm registry)。然后,别人就可以通过下面的命令来安装你的脚本程序:

$ npm install -g ser

命令行参数

虽然你可以使用 process.argv 来获取并处理命令行参数,但是这种标准化的操作怎能少得了成熟库的支持?推荐使用 commander,使用下面的命令来安装:

$ npm install --save commander

下面是使用例子:

#!/usr/bin/env node

const program = require("commander")

program
  .arguments('<file>')
  .option('-u, --username <username>', 'The user to authenticate as')
  .option('-p, --password <password>', 'The user\'s password')
  .action(function(file) {
    console.log('user: %s pass: %s file: %s', program.username, program.password, file);
  })
  .parse(process.argv)

执行命令:

$ ser -u MYNAME -p MYPASS MYARG
user: MYNAME pass: MYPASS file: MYARG

commander 还贴心的写好了 help:

$ ser --help
Usage: ser [options] <file>

Options:
  -u, --username <username>  The user to authenticate as
  -p, --password <password>  The user's password
  -h, --help                 output usage information

这里还有一个使用 commander 的例子:https://blog.csdn.net/henryhu712/article/details/88708106

nvm 安装方式

如果你装了 nvm,则全局安装不需要用到 sudo:

npm install -g
/home/ubuntu/.nvm/versions/node/v10.14.2/bin/enmsg -> /home/ubuntu/.nvm/versions/node/v10.14.2/lib/node_modules/enmsg/main.js
+ enmsg@1.0.0
added 1 package from 1 contributor in 0.217s

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值