托NPM和Nodejs的福,现在用javascript就可以快速编写命令行工具而不用浪费时间迷乱在c语法中.
~#gcc test.c
~#git add .
用javascript就可以写出类似的工具,NPM就是一个例子.
目标
我们想制作一个编译工具tool,当运行
~#tool test.js test2.js test3.js
会把文件合并、并加上一些需要的功能.
Step 1
制作 tool tool/bin tool/bin/tool :
-
tool目录代表了整个工具模块
-
tool/bin/tool是命令运行文件
~# mkdir tool
~# cd tool
~tool# mkdir bin
~tool# cd bin
~tool/bin# vi tool
##Step 2
编辑 tool/bin/tool :
#!/usr/bin/env node
var node = process.argv[0]; // node命令
var tool = process.argv[1]; // tool文件
var args = process.argv.slice(2); // 其他参数
***#!/usr/bin/env node***是必须的。在linux的脚本里,这条语句用来指定脚本的解释程序。这里指定使用***node***作为解释程序。
下面的语句则完全由***node***来解释了,终于不需要C那笨拙的语法了。
-
process: 全局模块,代表了当前进程
-
process.argv: 命令行输入的参数数组。 当运行
~# tool test.js
时,第一个是'node',第二个是'tool',第三个是'test.js',...
Step 3
建立 package.json :
-
~tool#npm init
,输入模块信息. -
在package.json中添加bin,在安装的时候,这一项会将***tool/bin/tool***文件复制到***/usr/local/bin/*** :
{
"bin": {
"tool": "./bin/tool"
}
}
Step 4
编写个 Hello world! 来测试通信:
1 ) 编辑 tool/bin/tool :
#!/usr/bin/env node
var node = process.argv[0];
var tool = process.argv[1];
var file = process.argv[2];
if (file) {
var child = require("child_process").spawn(node, [file]);
child.stdout.on("data", function (data) {
process.stdout.write(data);
});
}
console.log("start tool.");
获得如下tool工具:
tool
|—— bin
| |—— tool
|—— package.json
2 ) 编辑测试文件
~# vi test.js
:
console.log('Hello world!');
3 ) 安装tool工具
~# npm install -g ./tool
4 ) 测试
~# tool test.js
如果没有错误,可以看到
start tool.
Hello world!