11-创建一个命名行工具
6.5 创建一个命名行工具
在UNIX环境中,我们可以很简单地创建一个能直接运行的Node程序,无须使用node命令。
**Windows命令行工具** 要创建Windows命令行工具,你需要创建一个批处理文件,该文件除了应用程序本身,还要有调用Node的部分。
我会用第3章中讲到的Commander模块来进行演示,同时用一个子进程来访问ImageMagick,它是一个功能强大的图像工具。
**子进程** 子进程会在第8章中介绍。
在我的应用中,我会用ImageMagick为一个已有的图片文件加上偏光效果,然后把结果存入另一个文件。如例6-4所示,我用Commander来处理命令行参数,同时为这个工具提供帮助信息。
例6-4 Node成为命令行工具
#!/usr/bin/env node
var spawn = require('child_process').spawn;
var program = require('commander');
program
.version ('0.0.1')
.option ('-s, --source [file name]', 'Source graphic file name')
.option ('-f, --file [file name]', 'Resulting file name')
.parse(process.argv);
if ((program.source === undefined) || (program.file === undefined)) {
console.error('source and file must be provided');
process.exit();
}
var photo = program.source;
var file = program.file;
// conversion array
var opts = [
photo,
"-bordercolor", "snow",
"-border", "20",
"-background","gray60",
"-background", "none",
"-rotate", "6",
"-background", "black",
"(", "+clone", "-shadow", "60x8+8+8", ")",
"+swap",
"-background", "none",
"-thumbnail", "240x240",
"-flatten",
file];
var im = spawn('convert', opts);
im.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
im.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
要把它转换成命令行工具,需要在文件顶部加入下面的代码:
#!/usr/bin/env node
字符“#!”也被称为shebang。接下来是用来执行这个文件的程序,在本例中是Node。子目录则是应用程序所在的路径。
保存文件时不需要.js后缀。下面我们用 chmod
命令将其转换成可执行文件:
chmod a+x polaroid
现在可以运行这个工具程序了:
./polaroid –h
运行上面的命令可以获取帮助(得益于Commander模块),而下面的命令:
./polaroid -s phoenix5a.png -f phoenix5apolaroid.png
则是用来创建一个具有偏光效果的新图片。虽然这个工具不能在Windows上使用,但如果在它能使用的环境中,它都能很好地工作。
创建一个命令行工具和创建一个独立的应用程序不同。后者意味着在安装应用程序时不需要安装Node(或者其他依赖)。
**用NW.js创建一个独立的应用程序** 到目前为止,我所知道的唯一一个可以创建独立应用程序的是英特尔公司的NW.js(正式的名字是node-webkit)。你可以用它打包文件,然后用NW.js来运行,NW.js正是能让这一切工作的核心所在。