常用的NodeJS模块
图片处理
1.Manipulate images
官网:http://github.com/aheckmann/gm
ImageMagick和GraphicsMagick主要用于图片的创建、编辑、合成图片。它们可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。
gm模块实现了ImageMagick和GraphicsMagick的相关功能,让我们很方便的在Node中进行图片的相关操作,示例代码
var fs = require('fs'), gm = require('gm');
gm('/path/to/my/img.jpg')
.resize(240, 240)
.noProfile()
.write('/path/to/resize.png', function (err) { if (!err) console.log('done');
});
2.Process images
官网:http://github.com/lovell/sharp
主要用于图片的处理,相比ImageMagick 和 GraphicsMagick ,处理速度会快四五倍。主要支持JPEG,PNG,WebP,TIFF,GIF 和 SVG images。示例代码如下:
sharp('input.jpg')
.rotate()
.resize(200)
.toBuffer()
.then( data => ... )
.catch( err => ... );
3.sprite sheets
官网:http://github.com/ensighten/spritesmith
CSSSprites在国内很多人叫css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。
spritesmith 模块就是将多个图片生成 CSSSprites 和 拼成一张图,示例代码如下
var fs = require('fs');
var Spritesmith = require('spritesmith');
Spritesmith.run({
src: [ __dirname + '/fork.png', __dirname + '/github.png', __dirname + '/twitter.png'
],
engine: require('canvassmith')
}, function handleResult (err, result) {
if (err) { throw err;
}
fs.writeFileSync(__dirname + '/canvassmith.png', result.image); result.coordinates, result.properties; });
日期、字符串、颜色处理
4.format dates
官网:http://github.com/moment/moment
相比大家都用过Moment.js,今天分享的是Moment NodeJS版本。示例代码如下:
var moment = require('moment');
moment().add(7,'days');
5. Validate strings
官网:https://github.com/chriso/validator.js
在服务端和客户端都可以进行验证的模块,常用的邮箱,网址,电话,信用卡等都支持,示例代码如下
选中一个模板,出现的黑色方框标志着选中的范围
插入新模板、收藏、复制,都是针对黑色方框进行操作。
var validator = require('validator');
validator.isEmail('foo@bar.com'); //=> true
6. work with colour values
官网:https://github.com/bgrins/TinyColor
在日常开发中,我们经常会处理一些颜色值的转换,正好TinyColor就派上用场了,能很方便的进行颜色值的转换,示例代码如下:
var color = tinycolor("red");
color.getFormat(); // "name"
color = tinycolor({r:255, g:255, b:255});
color.getFormat(); // "rgb"
文件处理
7.PDF
官网:http://github.com/devongovett/pdfkit
起初,生成PDF文件似乎是件很繁琐的任务,但有了PDFKit,这个任务就容易多了。
但对于Node.js的PDFKit模块,知道的人并不多,这倒是很意外。有了PDFKit模块,处理PDF文件变得非常容易,它让你避免了所有的复杂工作,并提供用CoffeeScript(也可以作为普通版的Javascript使用)写成的简易的API,示例代码如下:
var PDF = require('pdfkit');
var fs = require('fs');
var text = 'ANY_TEXT_YOU_WANT_TO_WRITE_IN_PDF_DOC';
doc = new PDF(); doc.pipe(fs.createWriteStream('PATH_TO_PDF_FILE'));
doc.text(text, 100, 100);
doc.end();
8.Process html files
官网:http://github.com/cheeriojs/cheerio
cheerio可以在服务端使用JQuery的类库,比如操作DOM元素,具体的代码示例如下:
let cheerio = require('cheerio');
let $ = cheerio.load('<h2 class="title">Hello world</h2>');
$('h2.title').text('Hello there!');
$('h2').addClass('welcome')$.html();
//=> <h2 class="title welcome">Hello there!</h2>
9.CSV
官网:http://github.com/wdavidw/node-csv
目前来说,node-csv 这个模块目前来说在Node中是操作csv最好的库,具体的使用方法请查看官网,示例代码如下:
var csv = require('csv');
csv.generate({seed: 1, columns: 2, length: 20})
.pipe(csv.parse())
.pipe(csv.transform(function(record){ return record.map(function(value){ return value.toUpperCase()
});
}))
.pipe(csv.stringify())
.pipe(process.stdout);
10. Markdown
官网:http://github.com/chjj/marked
Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用。因此显示Markdown格式的需求则随之而来,marked就能很好处理这个需求,示例代码如下:
var marked = require('marked');
console.log(marked('I am using __markdown__.'));
// Outputs: <p>I am using <strong>markdown</strong>.</p>
压缩类
11.Minify images
官网:http://github.com/imagemin/imagemin
安装命令:
npm install --save imagemin
虽然glup,grunt插件也提供类似的图片压缩功能,但是imagemin模块配置起来更加灵活,易用,示例代码如下:
const imagemin = require('imagemin');const imageminMozjpeg = require('imagemin-mozjpeg');const imageminPngquant = require('imagemin-pngquant');imagemin(['images/*.{jpg,png}'], 'build/images', {
plugins: [ imageminMozjpeg(), imageminPngquant({quality: '65-80'})
]
}).then(files => { console.log(files); });
12.Minify HTML
官网:http://github.com/Kangax/html-minifier
安装命令:
npm install html-minifier
html-minifier,通过后台代码的方式压缩HTML,操作更加方便,虽然gulp和Grunt也提供类似的功能,示例代码如下:
var minify = require('html-minifier').minify;
var result = minify('<p title="blah" id="moo">foo</p>', {
removeAttributeQuotes: true});
13.Minify css
官网:http://github.com/jakubpawlowicz/clean-css
安装命令:
npm install clean-css
clean-css 是一个非常简单的 CSS 压缩模块,支持命令行和后台代码方式进行压缩,支持多种压缩方式,示例代码如下:
cleancss -o merged-and-minified.css one.css two.css three.css
var CleanCSS = require('clean-css');
var source = 'a{font-weight:bold;}';
var minified = new CleanCSS().minify(source).styles;
14. Minify Javascript
官网:http://github.com/mishoo/uglifyJS2
安装命令:
npm install uglify-js
UglifyJS2 是作者对UglifyJS的重写,是完全的重写,而不仅仅是升级。从UglifyJS2官司方网页介绍看,UglifyJS2把整个的JS压缩过程,做了更进一步的细化,同时支持命令行方式。详情请查看官网,示例代码如下:
var result = UglifyJS.minify([ "file1.js", "file2.js", "file3.js" ], {
outSourceMap: "out.js.map"});
console.log(result.code); // minified outputconsole.log(result.map);
15. Minify SVG
官网:http://github.com/SVG/SVGO
安装命令:
npm install -g svgo
很好用的svg压缩工具,一行简单的命令行就能轻松完成压缩任务,示例代码如下:
$ svgo test.svg test.min.svg
实用模块
16. Log application output
官网:http://github.com/winstonjs/winston
安装命令:
npm install winston
日志对于问题定位、调试,系统性能调优至关重要,尤其是系统复杂以及在线运行的情况下。Winston是Node.js最流行的日志框架之一,设计为一个简单通用的日志库,支持多传输(在Winston中,一个传输实质上代表储存设备,也就是数据最终保存在哪里),每个Winston实例都可以对不同级别的日志配置不同的传输。示例代码如下:
var logger = new (winston.Logger)({
transports: [ new (winston.transports.File)({
name: 'info-file',
filename: 'filelog-info.log',
level: 'info'
}), new (winston.transports.File)({
name: 'error-file',
filename: 'filelog-error.log',
level: 'error'
})
]
});
17. Generate fake data
官网:http://github.com/marak/faker.js
安装命令:
$ git clone https://github.com/Marak/Faker.js.git
$ cd Faker.js/
$ npm install
我们为了做黑盒测试经常会需要做一些数据来模拟输入,NodeJS有丰富的第三方模块可以实现类似的功能,faker.js目前来说是最受欢迎的插件,示例代码如下:
var faker = require('./faker');
var randomName = faker.Name.findName();
var randomEmail = faker.Internet.email();
var randomCard = faker.Helpers.createCard();
18. Send Email
官网:http://github.com/nodemailer/nodemailer
安装命令:
npm install nodemailer
电子邮件,是互联网应用最广泛使用的服务之一,通过电子邮件系统,我们可以与世界上任何一个角落的网络用户进行联系。
使用Nodejs收发电子邮件也非常简单,Nodemailer包就可以帮助快速实现发邮件的功能。示例代码如下:
var nodemailer = require('nodemailer');
// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport('smtps://user%40gmail.com:pass@smtp.gmail.com');
// setup e-mail data with unicode symbols
var mailOptions = {
from: '"Fred Foo 👥" <foo@blurdybloop.com>', // sender address
to: 'bar@blurdybloop.com, baz@blurdybloop.com', // list of receivers
subject: 'Hello ✔', // Subject line
text: 'Hello world 🐴', // plaintext body
html: '<b>Hello world 🐴</b>' // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
19. Create REST APIs
官网:http://github.com/restify/node-restify
安装命令:
npm install restify
restify 是一个基于Nodejs的REST应用框架,支持服务器端和客户端。 restify比起 express 更专注于 REST 服务,去掉了 express 中的 template , render 等功能,同时强化了 REST 协议使用,版本化支持, HTTP 的异常处理,示例代码如下:
var restify = require('restify');
function respond(req, res, next) {
res.send('hello ' + req.params.name);}
var server = restify.createServer();server.get('/hello/:name', respond);
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);});
20. Create CLI application
官网:http://github.com/tj/commander.js
安装命令:
npm install commander
Commander.js 是 TJ 写的一个帮助快速开发Nodejs命令行工具的package。TJ同时也是 Express , mocha , koa , debug 等流行package的作者,是Nodejs社区里非常知名的高产作者。示例代码如下:
var program = require('commander');
program
.option('-d, --date', 'display current date')
.parse(process.argv);var dt = new Date();if (program.date) {console.log(dt.getFullYear()
+ '-'
+ (dt.getMonth() + 1)
+ '-'
+ dt.getDate()
);
}