作者:Scott Robinson
翻译:疯狂的技术宅
原文:https://stackabuse.com/useful…
yargs
yargs
是一个用来解决命令行参数的包,能够帮你解决自行设置的命令行标记和输出的任何类型的数据,其中包含布尔值、浮点数和字符串等。这个包十分简单明了,不须要在我的项目中编写大量的样板代码。
yargs 可能帮你解决“用法帮忙”输入,能够轻松地通知用户在应用你程序时须要输出哪些选项,包含哪些是必选的。
var argv = require('yargs')
.usage('Usage: $0 -x [num] -y [num]')
.demand(['x','y'])
.argv;
console.log('Pow(x, y):', Math.pow(argv.x, argv.y));
把下面的代码保留为 index.js
,而后在命令行中执行 node index.js -x 3
,会看到如下音讯:
Usage: index.js -x [num] -y [num]
Options:
-x [required]
-y [required]
Missing required argument: y
yargs 可能提醒咱们命令行中到底短少什么参数,而咱们只须要简略的调用 .usage()
和 .demand()
办法就行了。
toobusy
这是一个十分实用的包。
它轮询 Node 事件循环并跟踪实现申请所需的工夫,如果发现延迟时间太长,则 toobusy
会告诉你,而后你就能够将 HTTP 503 “Service Unavailable” 状态码返回给客户端。
这种解决是很重要的,因为服务器越忙,申请所期待的工夫也就越长。这很快就成为一个很简单的问题,随着工夫的流逝会越来越重大。如果你任其自然的话,那么服务将会解体。如果咱们能及时的进行一些申请的解决,并返回 HTTP 503,这样的话至多还能解决一些申请。
能够轻松的用 npm 命令装置 toobusy
:
npm install toobusy
而后把它和相似 Express 的货色集成在一起:
var toobusy = require('toobusy'),
express = require('express');
var app = express();
// 如果服务器压力过大将会阻止申请
app.use(function(req, res, next) {if (toobusy()) {res.send(503, "Too many users!");
} else {next();
}
});
var server = app.listen(3000);
process.on('SIGINT', function() {server.close();
toobusy.shutdown(); // 失常退出
process.exit();});
不须要写多少代码,也不必太多的配置就能继承到咱们本人的我的项目中。
chalk
在命令行上很难开发出一个好用的用户界面,因为用于和用户交互的只是命令行窗口。那么你该如何去提醒一些重要的信息呢?在输入的文本中增加格局不失为一种好办法。Express 就是一个很典型的例子,从它的输入中,你能够很轻松地快读找到重要的信息。
以下是 chalk 反对的款式列表:
修饰符
bold
underline
dim
reset
hidden
inverse
italic
(并非所有环境都反对)strikethrough
(任何环境下都不反对)
色彩
red
black
green
white
yellow
blue
(在 Windows 上会应用较亮的版本,因为一般的蓝色很难识别)cyan
gray
magenta
背景色彩
bgBlue
bgBlack
bgRed
bgGreen
bgCyan
bgYellow
bgWhite
bgMagenta
尽管官网只反对这些色彩,然而任何合乎 xterm 规范的终端都能够应用残缺的 8 位色代码。
只须要将字符串传给用于着色或格式化的函数就能轻松的格式化这些文本。如果你须要让用户留神到严重错误提醒,能够用上面的格局:
var chalk = require('chalk');
var str = chalk.red.bold('ERROR:') + chalk.bold('Everything just blew up...');
console.log(str);
node-inspector
好用的调试器很难找,尤其是那些带有好用的 GUI 的调试器,node-inspector 为你提供了一个网页 GUI 来帮忙调试代码。它有规范调试器的所有性能,例如断点、单步执行、退出代码以及变量查看等,另外还有一些不太罕用的性能,然而这些性能十分有用,例如 CPU 和堆剖析、网络客户端申请查看以及实时编辑运行代码的性能。
不过 Node Inspector 只与 Chrome 和 Opera 兼容,因为它应用了 Blink Developer Tools,并与 Node 兼容。
始终以来我十分依赖控制台输入进行调试,这会破费了大量的工夫。应用 GUI 可能大大的节俭调试工夫。
terminal-kit
如果你的 Node 程序须要在命令行下反对除简略的文本输入输出之外的其余操作,那么你应该须要 terminal-kit。terminal-kit 简化了与用户交互的许多货色,使你能够专一于在程序中开发重要的内容。terminal-kit 的次要性能是:
- 文字款式(很像
chalk
) - 编辑屏幕
- 进度条
- 用户输出
有很多适宜终端工具包的例子。例如,如果你须要从网上下载一些内容,那么就须要向用户显示进度条。上面的代码用来显示虚构进度条:
var terminal = require('terminal-kit').terminal;
var progressBar;
var progress = 0;
function updateProgress() {
// 产生一个随机的进度值
progress += Math.random() / 10;
progressBar.update(progress);
// 查看是否实现
if (progress >= 1) {setTimeout(function() {terminal('\n');
process.exit();}, 250);
}
else {setTimeout(updateProgress, 100 + Math.random() * 500);
}
}
progressBar = terminal.progressBar({
width: 80,
title: 'Downloading file:',
eta: true,
percent: true
});
updateProgress();
下面的代码会产生上面这种成果:
validator
validator
能够帮你进行一系列常见的字符串验证(例如:电子邮件地址、电话号码、IP 地址等)。每当你从用户那里取得输出时,这样的软件包都是必不可少的。用户会犯错误,并会在文本框中输出一些十分奇怪的货色,所以须要一个验证输出的包,防止数据损坏或服务器解体。
以下是一些罕用的验证器:
isEmail(str [, options])
isIP(str [, version])
isMobilePhone(str, locale)
isURL(str [, options])
validator
也提供检测器,能够对输出字符串进行规范化、删除或本义。例如对用户提交的内容进行清理,防止他们输出歹意的 HTML 或 JavaScript 代码。
上面是罕用的检测器:
blacklist(input, chars)
escape(input)
normalizeEmail(email [, options])
whitelist(input, chars)
normalizeEmail()
办法它可能确保电子邮件地址都是小写字母,甚至能够删除须要疏忽的字符。假如你有电子邮件abc.def+ghi@163.com
,normalizeEmail()
会将其标准化为abcdefghi@163.com
。
formidable
formidable 能够帮你解决文件上传的每个步骤,包含 multi-part 解析器、把文件写入磁盘以及错误处理等。这是我最喜爱的一个包,如果你不想从新创造轮子能够试一试。
上面是一个在一般 HTTP 服务器上应用 formidable
的例子,代码是从包自身中给出的示例批改而来的:
var http = require('http');
var util = require('util');
var formidable = require('formidable');
var path = require('path');
var PORT = 8080;
var root = path.join(__dirname, '../');
exports.dir = {
root : root,
lib : root + '/lib',
fixture : root + '/test/fixture',
tmp : root + '/test/tmp',
};
var server = http.createServer(function(req, res) {if (req.url == '/') {res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/post"method="post">' +
'<input type="text"name="title"><br>' +
'<input type="text"name="data[foo][]"><br>' +
'<input type="submit"value="Submit">' +
'</form>'
);
} else if (req.url == '/post') {var form = new formidable.IncomingForm(),
fields = [];
form
.on('error', function(err) {res.writeHead(200, {'content-type': 'text/plain'});
res.end('error:\n\n' + util.inspect(err));
})
.on('field', function(field, value) {console.log(field, value);
fields.push([field, value]);
})
.on('end', function() {console.log('-> post done');
res.writeHead(200, {'content-type': 'text/plain'});
res.end('received fields:\n\n' + util.inspect(fields));
});
form.parse(req);
} else {res.writeHead(404, {'content-type': 'text/plain'});
res.end('404');
}
});
server.listen(PORT);
console.log('listening on http://localhost:' + PORT + '/');
shelljs
shelljs
是一个可能让你在任何零碎上应用通用的 Unix 命令的包,不论是 Windows、Linux 还是 Mac。这样你就不必再为我的项目别离编写 bash 和批处理脚本。shelljs 提供了相似 Unix 的环境,如果你须要编写脚本来运行测试、提交代码或在服务器上启动,则只需编写一次即可。
能够用命令执行相似操作:
require('shelljs/global');
ls('*.js').forEach(function(file) {sed('-i', 'BUILD_VERSION', 'v2.0.3', file);
sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
sed('-i', /.*REPLACE_THIS_LINE.*\n/, cat('macro.js'), file);
});
执行常见命令:
require('shelljs/global');
mkdir('-p', 'release/data');
cp('-R', 'data/*', 'release/data');
查看可用的二进制文件:
require('shelljs/global');
if (!which('git')) {echo('This script requires git!');
exit(1);
}
甚至能够像在 bash 脚本中一样运行命令:
if (exec('git commit -am"Release commit"').code !== 0) {echo('Error: Git commit failed!');
exit(1);
}
你还晓得有哪些好用的包?请在评论留言。
本文首发微信公众号:前端先锋
欢送扫描二维码关注公众号,每天都给你推送陈腐的前端技术文章
欢送持续浏览本专栏其它高赞文章:
- 深刻了解 Shadow DOM v1
- 一步步教你用 WebVR 实现虚拟现实游戏
- 13 个帮你进步开发效率的古代 CSS 框架
- 疾速上手 BootstrapVue
- JavaScript 引擎是如何工作的?从调用栈到 Promise 你须要晓得的所有
- WebSocket 实战:在 Node 和 React 之间进行实时通信
- 对于 Git 的 20 个面试题
- 深刻解析 Node.js 的 console.log
- Node.js 到底是什么?
- 30 分钟用 Node.js 构建一个 API 服务器
- Javascript 的对象拷贝
- 程序员 30 岁前月薪达不到 30K,该何去何从
- 14 个最好的 JavaScript 数据可视化库
- 8 个给前端的顶级 VS Code 扩大插件
- Node.js 多线程齐全指南
- 把 HTML 转成 PDF 的 4 个计划及实现
- 更多文章 …