7个免费、开源且实用的Node包,你还在等什么?

全文共6992字,预计学习时长20分钟

7个免费、开源且实用的Node包,你还在等什么?

图源:Unsplash

俗话说的好:天上不会掉馅饼,天下没有免费的午餐。

JavaScript圈似乎打破了这一说法,圈友们各个身怀绝技且乐于分享。

众所周知,JavaScript真正的力量来自于大量可用的开源包。这些免费的开源包促进了JavaScript生态系统的蓬勃发展。我们可以免费使用这些棒呆的包实现自己伟大的编程项目。

今天,小芯将为大家介绍七个超实用的Node包,都是免费的哦!

1. term-size

term-size NPM包能准确确定终端窗口的大小。

7个免费、开源且实用的Node包,你还在等什么?

term-size 包;来源:Github

当以非交互方式运行时Process.stdout.columns 不存在(例如在子进程中或者管道中)。这个模块甚至在所有电传打印机文件描述符被重定向时也能工作。

安装

$ npm install term-size

用法

const termSize = require('term-size');termSize();

//=> {columns: 143, rows: 24}

Term size 有一个简短的API

termSize() — 返回一个 具有 columns属性和 rows属性的 object(对象)

相关

· term-size-cli — 这个模块的CLI

注意:确认该包可以在macOS, Linux和 Windows上使用。

2. Node MySQL

Node MySQL是node.js 的一个MySQL驱动程序。用JavaScript编写,不需要编译,并且完全由麻省理工学院授权。

7个免费、开源且实用的Node包,你还在等什么?

Node MySQL.来源: Github

安装

这是一个Node.js模块,可通过 npm 注册表使用 。

安装之前,下载并安装Node.js,需要Node.js 0.6或者更高的版本。

使用npm 安装命令进行安装:

$ npm install mysql

有关以前0.9.x版本的信息,请访问 v0.9 分支。

有时可能要求安装来自Github的最新版本,来检查bugfix是否有效。这种情况下,请执行以下操作:

$ npm install mysqljs/mysql

建立连接

建立数据库连接的推荐方式如下:

var mysql = require('mysql');

var connection = mysql.createConnection({

host : 'example.org',

user : 'bob',

password : 'secret'

});connection.connect(function(err) {

if (err) {

console.error('error connecting: ' +err.stack);

return;

} console.log('connected as id ' + connection.threadId);

});

示例代码

下面是如何使用该包的示例。

var mysql = require('mysql');

var connection = mysql.createConnection({

host : 'localhost',

user : 'me',

password : 'secret',

database : 'my_db'

});connection.connect();connection.query('SELECT 1 + 1 AS solution', function(error, results, fields) {

if (error) throw error;

console.log('The solution is: ',results[0].solution);

});connection.end();

从这个示例中,可以了解:

  • 在连接上调用的每个方法都按顺序排队和执行。
  • 使用 end()关闭连接,确保在quit包发送到服务器之前执行完所有剩余的查询。

3. Commander.js

Commander受Ruby的commander库启发,是node.js命令行界面的完整解决方案。

7个免费、开源且实用的Node包,你还在等什么?

commander.js. 来源:Github

安装

npm install commander

声明程序变量

Commander输出一个全局对象,有助于程序的快速运行。

const program = require('commander');program.version('0.0.1');

对于可能以多种方式使用commander的更大型程序(包括单元测试),最好创建一个本地命令对象来使用。

const commander = require('commander');

const program = new commander.Command();program.version('0.0.1');

命令

可以使用.command为顶级命令指定(子)命令。有两种实现方法:使用附加在命令上的操作处理程序,或者作为一个独立的可执行文件(稍后将详细描述)。在.command的第一个参数中,指定命令名称和任何命令参数。参数可以是<required>或<optional>,最后一个参数也可能是可变参数……

例如

// Command implemented usingaction handler (description is supplied separately to `.command`)

// Returns new command for configuring.

program

.command('clone <source>[destination]')

.description('clone a repository into anewly created directory')

.action((source, destination) => {

console.log('clone command called');

});// Command implemented usingseparate executable file (description is second parameter to `.command`)

// Returns top-level command for adding more commands.

program

.command('start <service>','start named service')

.command('stop [service]', 'stop namedservice, or all if no name supplied');

4. Chalk

Chalk是用于终端样式的Node包。

7个免费、开源且实用的Node包,你还在等什么?

Chalk. 来源:Github

Chalk有以下亮点:

· 清晰可读的 API

· 高性能

· 支持嵌套样式

· 支持256/真彩颜色

· 支持自动检测颜色

· 不扩展String.prototype

· 清洁和集中

· 积极维护

· 截至2019年10月1日已被大约46,000个包引用

安装

$ npm install chalk

用法

const chalk = require('chalk');console.log(chalk.blue('Hello world!'));

Chalk附带了一个易于使用的组合API,只需在API中链接和嵌套想要的样式。

const chalk = require('chalk');

const log = console.log;// Combine styled and normal strings

log(chalk.blue('Hello') + ' World' + chalk.red('!'));// Compose multiple stylesusing the chainable API

log(chalk.blue.bgRed.bold('Hello world!'));// Pass in multiple arguments

log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));

5. Nodemailer

Nodemailer是Node.js应用程序的一个模块,可以像发送电子邮件一样简单。该项目开始于2010年,那时还没有发送电子邮件的明智选择,现在它是大多数Node.js用户默认的解决方法。

7个免费、开源且实用的Node包,你还在等什么?

nodemailer. 来源:Github

Nodemailer是麻省理工学院授权注册的。

准备开始

npm install nodemailer

Nodemailer演示代码

这是一个完整的示例,用以发送一个有纯文本和HTML主体的电子邮件。

const nodemailer =require('nodemailer');// async..await is not allowed in global scope, must usea wrapper

async function main() {

// Generate test SMTP service accountfrom ethereal.email

// Only needed if you don't have areal mail account for testing

let testAccount = await nodemailer.createTestAccount(); // create reusable transporter object usingthe default SMTP transport

let transporter =nodemailer.createTransport({

host: 'smtp.ethereal.email',

port: 587,

secure: false, // true for 465,false for other ports

auth: {

user: testAccount.user, //generated ethereal user

pass: testAccount.pass //generated ethereal password

}

}); // send mail with defined transport object

let info = await transporter.sendMail({

from: '"Fred Foo " <[email protected]>', // sender address

to: '[email protected],[email protected]', // list of receivers

subject: 'Hello ✔', // Subject line

text: 'Hello world?', // plaintext body

html: '<b>Helloworld?</b>' // html body

}); console.log('Message sent: %s', info.messageId);

// Message sent:<[email protected]> // Preview only available when sendingthrough an Ethereal account

console.log('Preview URL: %s',nodemailer.getTestMessageUrl(info));

// Preview URL:https://ethereal.email/message/WaQKMgKddxQDoou...

}main().catch(console.error);

示例

  • Nodemailer AMQP是一个使用RabbitMQ来管理Nodemailer邮件信息的例子。(来源)

Ethereal邮件捕获服务的示例脚本输出如下:

7个免费、开源且实用的Node包,你还在等什么?

用Nodemailer发送邮件

6. Winston

Winston是一个简单通用的日志库,支持多种传输方式。传输实质上是日志的存储设备。

每个Winston记录器可以对不同级别配置不同的传输方式。例如,用户可能希望将错误日志储存在一个永久的远程位置(如数据库),但是所有日志都会输出到控制台或本地文件。

7个免费、开源且实用的Node包,你还在等什么?

winston. 来源:Github

Winston旨在将部分日志记录进程解耦,增强其灵活性和扩展性。注意支持日志格式化和级别的灵活性,并确保这些API从运输日志(即如何存储/索引日志)解耦到公开给程序员。

安装

npm i Winston

用法

推荐使用的方式是创建自己的日志记录器。最简单的方法是使用winston.createLogger:

const winston = require('winston');const logger =winston.createLogger({

level: 'info',

format: winston.format.json(),

defaultMeta: { service: 'user-service'},

transports: [

//

// - Write to all logs with level`info` and below to `combined.log`

// - Write all logs error (and below)to `error.log`.

//

new winston.transports.File({filename: 'error.log', level: 'error' }),

new winston.transports.File({filename: 'combined.log' })

]

});//

// If we're not in production then log to the `console` with the format:

// `${info.level}: ${info.message} JSON.stringify({ ...rest }) `

//

if (process.env.NODE_ENV !== 'production') {

logger.add(newwinston.transports.Console({

format: winston.format.simple()

}));

}

用户也可以直接通过require('winston')公开的默认日志记录器进行记录,但这仅仅是一种便于共享的日志记录器,可以在整个应用程序中使用。

7. Passport

Passport是Node.js的登陆验证的中间件,可与Express兼容。

Passport的唯一用途是验证请求,可以通过名为strategies(策略)的可扩展插件集来实现。Passport不挂载路由或承担任何特定的数据库模式,极大地提高了灵活性,并允许开发者做出应用程序级的决策。这个API很简单:提供给Passport一个验证请求,Passport提供hooks来控制验证成功或失败时发生的情况。

7个免费、开源且实用的Node包,你还在等什么?

passport. 来源:Github

安装

$ npm install passport

用法策略

Passport使用策略(strategies)的概念去验证请求。策略包括:通过使用OAuth委托验证或者使用OpenID进行联合身份验证来验证用户名和密码凭据。

在验证请求之前,必须配置应用程序使用的策略。

passport.use(new LocalStrategy(

function(username, password, done) {

User.findOne({ username: username },function (err, user) {

if (err) { return done(err); }

if (!user) { return done(null,false); }

if (!user.verifyPassword(password)){ return done(null, false); }

return done(null, user);

});

}

));

有480多种策略,可在passportjs.org查找。

会话

Passport包将保持持久的登录对话。为了持续会话,必须将已验证身份的用户序列化到会话,并在发出后续请求时反序列化。

Passport对用户记录的存储方式没有任何限制。相反,用户可以为Passport提供函数,使其实现必要的序列化和反序列化逻辑。在典型应用程序中,这和对用户ID序列化后,再反序列化时通过ID查找用户一样简单。

passport.serializeUser(function(user,done) {

done(null, user.id);

});passport.deserializeUser(function(id, done) {

User.findById(id, function (err, user){

done(err, user);

});

});

7个免费、开源且实用的Node包,你还在等什么?

图源:Unsplash

结论

希望你能收获到有用的新Node包,用于自己的项目中。如果这里遗漏了你最喜欢的包,可以在下面的回复中与大家分享哦。

最后,不要忘记不时去赞助和支持一下包的创建者和维护者哦。

正所谓“赠人玫瑰手留余香”,每位创建者、维护者和分享者都是天使。

7个免费、开源且实用的Node包,你还在等什么?

7个免费、开源且实用的Node包,你还在等什么?

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐