Articles of 命令行界面

定制node.js CLI工具configuration文件的build议/最佳实践:位置和命名?

我会尽量保持这个问题的简短,但它是在2个部分,请: nodejs / npm CLI工具的configuration文件应该保存在哪里? 他们应该叫什么? 比方说,我写了一个node.js CLI工具,例如抓取今天的天气,并显示在terminal。 我称之为weather-getter 。 请注意,主要目标不是以编程方式调用,而是像BASH那样键入terminal。 打算在全局安装后input其简单名称, 或通过用户本地/ bin中的目录运行。 ( Sudo不需要安装。 ) 这个项目将通过npm正常安装。 它可以通过如下参数接收邮政编码: gavin@localhost:~$ weather-getter -z "12345" 好的程序可以正常工作。 我下一步将允许用户保存一个configuration文件的地方 ,并从该configuration文件拉默认。 类似于.vimrc文件。 这个configuration可能看起来像这样: { "zipcode": "12345", "language": "en", "unit": "fahrenheit" } 我想这应该从一个点开始。 我也假设它应该位于npm模块安装中,而不是在〜/中 。 还是应该考虑使用〜/或/ etc /或〜/ .config或〜/ .local像许多其他程序? 节点程序是否应该尝试使用公共目录,例如〜/ .config / node /或〜/ .config / npm / ? 如果文件在那里,它应该开始没有点? […]

如何继续在repl / bash w / Node.js Commander中接收asynchronousconsole.log消息?

我有一个Node.js CLI,我一直在使用Commander库来构build。 这是主执行文件的代码。 #!/usr/bin/env node var program = require('commander'); var scmStash = require('./lib/hdqc/scmStash'); var command = {}; program .version('0.0.1') .option('-P, –Projects', 'List Projects') .option('-R, –Repositories', 'List All Repositories on Server.') .parse(process.argv); function listProjects() { scmStash.getProjectListing(function (data) { for (var i = 0; i < data.size; i++) { var project = data.values[i]; console.log(' ' + i […]

节点包 – 是否有可能在package.json中插入一个variables?

我有一个使用node-sass编译Sass的静态网站。 目前我正在使用Grunt来观看文件,但是我觉得这是过度的,因为我可以使用他们的内置CLI。 所以我把这个添加到我的package.json中: // package.json … "scripts": { "sass": "node-sass -w input/dir -o output-dir/" } 问题是,我需要在–include-path require一个Sass框架模块(全局安装)。 我可以在Gruntfile中做到这一点: // Gruntfile.js sass: { options: { includePaths: require("the-framework").includePaths() }, … }, 所以我想到的第一件事是插入string,如: // package.json … "scripts": { "sass": "node-sass -w input/dir -o output-dir/ –include-path " + require("the-framework").includePaths() } 和预期的一样,这是行不通的。 那么脚本运行,但插值的variables被忽略。 任何解决scheme或替代? 如果可能的话,我宁愿不创build额外的文件来存储variables。 谢谢

如何将STDIN传递给node.jssubprocess

我正在使用包装节点的pandoc库。 但我不知道如何将STDIN传递给subprocess`execFile … var execFile = require('child_process').execFile; var optipng = require('pandoc-bin').path; // STDIN SHOULD GO HERE! execFile(optipng, ['–from=markdown', '–to=html'], function (err, stdout, stderr) { console.log(err); console.log(stdout); console.log(stderr); }); 在CLI上它看起来像这样: echo "# Hello World" | pandoc -f markdown -t html 更新1 试图让它与spawn一起工作: var cp = require('child_process'); var optipng = require('pandoc-bin').path; var child = cp.spawn(optipng, ['–from=markdown', '–to=html'], […]

有没有一个模块获取用户input从node.js命令行?

首先:我不是指从process.argv数组中parsing参数和选项,而是提示用户并处理input/输出。 我已经浏览了Node.js官方模块列表,没有发现任何提及input的部分或小节。 实际上,在该页面上search“input”只会得到1个与YAML有关的结果。 无论如何,我想cli的input应该是asynchronous的,我已经解决了这个问题之前使用stdin.on('data')是凌乱的至less说。 这似乎是一个节点模块,可以带来额外的好东西,如进度条,旋转器,彩色输出,inputvalidation等完美的任务。 这里可能有一些模块,但我找不到任何一个。 帮帮我!! (为了澄清,我需要的唯一function是简化处理用户input)

我如何redirectstdout祝福?

长话短说:我想为开发守护进程构build一个CLI。 守护进程输出不同types的信息到标准输出,我想将这些信息以可滚动的方式传递给屏幕区域中的用户。 我正在努力获得标准的祝福。 下面简单的原型,其中缓冲stdout,所以信息永远不会完整。 var blessed = require('blessed'); var screen = blessed.screen(), body = blessed.box({ top: 1, left: 0, width: '100%', height: '99%' }), statusbar = blessed.box({ top: 0, left: 0, width: '100%', height: 1, style: { fg: 'white', bg: 'blue' } }); screen.append(statusbar); screen.append(body); screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); }); function […]

对npm使用不同的文件名比“package.json”

有没有办法告诉npm从命令行使用不同的文件比“package.json”? 编辑: 谢谢您的回答。 我已经检查过文档,希望有一个解决方法或一个非文件的方式来实现这一点。 那么我会想到其他的东西。

节点subprocess产生标准输出返回为空

我正在编写一个Yeoman生成器,并使用child_process.spawn()(通过yeoman的spawnCommand() – 请参阅https://github.com/yeoman/generator/blob/master/lib/actions/spawn_command.js ) 我的代码如下所示: var list = this.spawnCommand('npm', ['list', 'sails'], {stdio: 'pipe'}); list.stdout.on('data', /* callback here that wants to consume the command's output */); 我可以看到list.stdio存在,它有[0,1,2]作为键。 他们每个是空(或未定义)。 即,logging_.keys(list).join()输出,, 。 list.stdout.on()给我一个exception,说明stdout为空。 我需要完成的是检查是否安装了特定的软件包,并查看版本号是什么。 但是我后来还需要做其他的事情来parsingCLI命令的输出(例如,git log output),所以我需要一个通用的解决scheme。 .spawn()看起来像我想要的,但我所看到的例子似乎表明,标准输出应该是有一个.on()方法的东西。 例如,这里给出的是: http : //nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options ,它显示了运行ls -lh /usr 。 我错过了一些简单的东西吗 我想知道如果我运行的命令没有返回任何输出,如果这意味着标准输出将为空。 如果是这种情况,那么我只需要确定可能没有输出的命令,并且在尝试使用它之前检查以确保stdout不为空。 编辑实际上,npm list命令的输出显示在命令行上,但在我用来诊断问题(在.spawnCommand()调用之后和.spawnCommand()调用之前的日志语句之后。但是我需要在代码中访问它 – 让它在命令行上显示出来(除了让我知道进程成功运行CLI命令外)。

Node.js多行input

我想提示用户input,让用户input多行文本,在每行之间敲入回车,然后按CTRL + D或类似的东西终止input。 使用“按键”,我可以捕捉EOF,但是我将不得不手动处理所有回显,退格处理,terminal转义序列等。 如果我可以使用“readline”会好得多,但是用“按键”拦截CTRL + D(EOF),但我不知道该怎么去做。

在没有全局安装的情况下可以在Node模块中包含一个命令行?

我有一个小的Node模块,在bin目录中包含一个命令行脚本。 "bin": { "generate": "./bin/generate.js" } generate.js脚本可以正确执行。 这一切工作正常,如果我运行npm install -g 。 但我不想全局安装,只有命令generate模块文件夹内的工作。 如果我从模块文件夹运行npm install ,它会正确安装node_modules子目录中的所有依赖node_modules 。 但是,然后从命令generate像给我“没有这样的文件或目录”。 谢谢。