Nodejs学习记录: 制作命令行工具

本文介绍如何使用Node.js和npm创建命令行工具,并利用Commander模块处理命令行选项。文章详细展示了从创建项目文件夹到配置package.json,以及如何通过npm链接使自定义命令生效的全过程。

我们经常会遇到这样的需求:想要将Node模块转变成一个Linux命令行工具,包括支持命令行选项/参数。

小实例

开始编写之前需要确认的一件事情是你已经安装了Node.js。你可以在命令行中运行 which node 来确认是否已经安装,或者运行 node -v 查看 node 的版本 。如果你已经安装了node,你可以看到类似于下面的输出结果,一般情况安装了node.js 顺带npm工具自动安装了。

$ which node
/d/Program Files/nodejs/node
$ node -v
v7.9.0

创建目录

代码 :https://github.com/JXtreehous...

首先任意创建一个文件夹,初始化 package.json 文件,在该文件夹下创建bin目录:

$ mkdir command-line-tool #创建一个文件夹
$ cd command-line-tool && mkdir bin
$ npm init #初始化 `package.json` 文件

编写命令行

cd到 bin 目录下,新建一个 commander.js 文件(名字自取),编写如下代码,在js文件顶部加上 #!/usr/bin/env node 这段代码:

上面的 #!/usr/bin/env node (或者/d/Program Files/nodejs/node
),表示用后面的路径所示的程序来执行当前文件夹。还需要一个 package.json 文件

{
  "name": "command-line-tool",
  "version": "0.1.0",
  "description": "a commander example",
  "main": "commander.js",
  "bin": {"commander": "bin/commander.js"},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "AlexZ33",
  "license": "MIT"
}

运行 node bin/wcommander.js 会显示当前文件夹下的所以文件和文件夹名

package.json 文件中 bin 里面的内容表示这个字段将commander 命令映射到了你的 bin/commander.js 脚本

npm-link
package.json#bin
版本号管理:此工具采用 npm版本号采用的 semver 规则

npm link

确保你在 package.json 文件中添加了 bin 节点。然后打开命令了工具进入command-line-tool目录

 "bin": {"commander": "bin/commander.js"}

启用命令行:

打开命令行,输入npm link会自动添加全局的symbolic link,然后就可以使用自己的命令了。

npm link

这里我们通过npm link在本地安装了这个包用于测试,然后就可以通过


$ commander
//bin
//package.json

$ commander -v
//version is 1.0.0

$ commander -h 
//Useage:
//  -v --version [show version]

更多npm link的信息请查看 npm官方文档

用Phantom和Commandder制作一个截屏工具

如上面的小例子,第一行我们依然

#!/usr/bin/env node

然后要提供命令行参数/选项,包括重要的--help,需要使用Commander模块:

const phantom = require('phantom')
const program = require('commander');

program
  .version('0.0.1')
  .option('-s, --source[website]', 'Source website')
  .option('-f, --file[filename]', 'filename')
  .parse(process.argv)

const run = async() => {
  
  const instance = await phantom.create();
  const page = await instance.createPage();
  await page.on('onResourceRequested', function(requestData) {
    console.info('Requesting', requestData.url)
  });
  const status = await page.open(program.source)
  
  await instance.exit();
}
run()

上面这段

const run = async() => {
  
}
run()

可以直接写成自执行匿名函数

(async function(){
  
})();

图片描述
npm phantom

处理命令行参数的常用模块

yargs 和 minimist 都是用来解析命令行参数的,但是有一点需要注意的是 yargs 内部的解析引擎就是 minimist。minimist 就是一个轻量级的命令行参数解析引擎。

它们两者共同点肯定有,不同点就是 yargs 是对 minimist 进行了更进一步的封装。

参考

使用Node.js创建命令行工具
Building a simple command line tool with npm
Nodejs 制作命令行工具
Node.js 命令行程序开发教程 by 阮一峰
前端扫盲-之打造一个Node命令行工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值