用node.js开发命令行工具

2012-10-13

node.js简介

Node让你可以用javascript编写服务器端程序,让javascript脱离web浏览器的限制,像C#、JAVA、Python等语言一样在服务器端运行,这也让一些熟悉Javascript的前端开发人员进军到服务器端开发提供了一个便利的途径。Node是基于Google的V8引擎封装的,并提供了一些编写服务器程序的常用接口,例如文件流的处理。Node的目的是提供一种简单的途径来编写高性能的网络程序。

命令行工具

node.js除了做服务器端程序,其实还可以做很多事情,其中就包括开发命令行工具。本文就介绍一下怎样使用Node来开发命令行工具。

今天需要创建一个显示当前文件夹下的所以文件和文件夹名。

首先创建一个文件夹叫nodefolder,然后新建一个nodefolder.js的文件,代码如下:

var fs = require("fs"),
    path = process.cwd();

fs.readdir(path, function(err, files){
    if(err){
        return console.log(err);
    }
    for(var i = 0; i < files.length; i += 1){
        console.log(files[i]);
    }
});

现在已经可以用node来运行这个js文件了,下面是运行截图:

node 运行结果

已经成功运行了,那接下来我们该怎么办呢,首先需要在文件头部添加一行,如下:

#! /usr/bin/env node
var fs = require("fs"),
    path = process.cwd();

fs.readdir(path, function(err, files){
    if(err){
        return console.log(err);
    }
    for(var i = 0; i < files.length; i += 1){
        console.log(files[i]);
    }
});

上面的”#! /usr/bin/env node”被称为shebang,表示用后面的路径所示的程序来执行当前文件。然后我们需要新建一个package.json文件,内容如下:

{
    "name": "nodefoler",
    "version": "0.0.1",
    "description": "List all the files in a directory!",
    "preferGlobal": "true",
    "bin": { "nf": "nodefolder.js" },
    "author": "steel1990",
    "engines": { "node": "*" }
}

上面的bin字段中,nf是命令行的名字,nodefolder.js是要执行的文件,然后需要使用npm来使命令nf可以在整个系统下执行。在当前目录下执行:

npm link

这样一个命令行工具就完成了,而且你对上面的文件进行任何修改都会立即有效。下面是截图:

命令行执行结果

nodefolder已经完美运行了,通过npm可以快速将创建的命令行工具发布(npm publish)到网上,而需要的用户也可以很快速的获取(npm install)。

注:node最好更新到最新版本。

参考资料

Command line Node.js Programs / Scripts / Utilities / Modules
node.js官网
npm官网
node.js中文社区
shebang