Node如何写CLI?
发布于 8 年前 作者 ShadowInkLee 7789 次浏览 来自 问答

Node新手路过,想学学NodeJS开发CLI工具,看了下 Writing Command Line Tools with Node这篇文章。

#! /usr/bin/env node
console.log('This is the filesearch script.');

对于类Unix系统可以用代码里第一句的命令,那么Windows下面怎么设置环境变量达到一样的效果?本人是Windows系统工作,对Linux shell 不熟悉,Windows脚本也不太熟悉。诚心求大神指教,或者大家有什么推荐文章?谢谢啦!

6 回复

使用一个模块commander来写比较简单,代码直接用官方的例子。准备好package.json和安装好commander。接着新建一个bin/demo.bin,这里直接拿官方的 demo 了:

#!/usr/bin/env node
 
/**
 * Module dependencies.
 */
 
var program = require('commander');
 
program
  .version('0.0.1')
  .option('-p, --peppers', 'Add peppers')
  .option('-P, --pineapple', 'Add pineapple')
  .option('-b, --bbq-sauce', 'Add bbq sauce')
  .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
  .parse(process.argv);
 
console.log('you ordered a pizza with:');
if (program.peppers) console.log('  - peppers');
if (program.pineapple) console.log('  - pineapple');
if (program.bbqSauce) console.log('  - bbq');
console.log('  - %s cheese', program.cheese);

然后在package.json里添加的bin为:

...
"bin": {
	"demo": "./bin/demo"
}
...

最后npm link一下,就可以直接用demo help来看到效果了。

@q545244819

谢谢,研究下,这个commander有封装Linux跟Windows下的命令行么?

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\node_modules\bower\bin\bower" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\node_modules\bower\bin\bower" %*
)

上面这段是bower的.我照着那篇文章运行了npm link生成的.cmd文件是这样的:

"%~dp0\node_modules\file-search\index.js"   %*

生成的不一样。看代码的样子像是找node.exe,没找到去环境变量里面找。这是为什么? 汗,感觉我问题没表达清楚~~

@ShadowInkLee 继续试了下,恶汗,自己犯的错误,关键是我删除了#! /usr/bin/env node这句后再使用npm link导致的。因为js文件里面出现一句这样的我不知道是干嘛的,自己自作聪明了。

#! /usr/bin/env node
console.log('This is the filesearch script.');

@ShadowInkLee #! /usr/bin/env node 这一行叫shebang, 见wiki

回到顶部