百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

一些小众却有用的 Node.js 包 node.js软件

connygpt 2024-10-19 04:01 13 浏览

作者:前端小混混 来源:前端先锋

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);

}

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&amp;Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick &#39;n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...