handlebars
模板引擎
nodemailer
郵件分發(fā)
const params = {
host: 'smtp.163.com', // 設(shè)置服務(wù) smtp.qq.com
port: 465, // 端口
sercure: true, // 是否使用TLS弹渔,true柔逼,端口為465,否則其他或者568
// 使用發(fā)送服務(wù)的郵箱
auth: {
// 發(fā)送服務(wù)郵箱
user: '774104373@qq.com',
pass: 'sdfsdf' // 這里的密碼不是登錄郵箱的密碼坑夯,是生成的smtp密碼
}
}
// 郵件信息
const mailOptions = {
from: 'zsqmengzhihen@qq.com', // 發(fā)送郵箱
to: 'zsqmengzhihen@163.com', // 接受郵箱
subject: 'test', // 標(biāo)題
html: 'test mail is link' // 內(nèi)容
}
// 發(fā)送郵件
const transporter = nodemailer.createTransport(params)
transporter.sendMail(mailOptions, (err, res) => {
if (err) {
return console.log(err);
}
console.log('Message %s sent: %s', res.messageId, res.response);
// success
// ...
})
cheerio
讀取html后生成虛擬DOM修改html
類似jQuery操作,可以用于寫爬蟲
cross-spawn
執(zhí)行命令行命令,也可以開發(fā)相關(guān)小工具
例子:將yarn
的相關(guān)源切換成淘寶源
'use strict';
const spawn = require('cross-spawn');
const registry = 'https://registry.npm.taobao.org';
const MIRROR_URL = 'https://npm.taobao.org/mirrors';
const env = {
NODEJS_ORG_MIRROR: `${MIRROR_URL}/node`,
NVM_NODEJS_ORG_MIRROR: `${MIRROR_URL}/node`,
NVM_IOJS_ORG_MIRROR: `${MIRROR_URL}/iojs`,
PHANTOMJS_CDNURL: `${MIRROR_URL}/phantomjs`,
CHROMEDRIVER_CDNURL: 'http://tnpm-hz.oss-cn-hangzhou.aliyuncs.com/dist/chromedriver',
OPERADRIVER_CDNURL: `${MIRROR_URL}/operadriver`,
ELECTRON_MIRROR: `${MIRROR_URL}/electron/`,
SASS_BINARY_SITE: `${MIRROR_URL}/node-sass`,
PUPPETEER_DOWNLOAD_HOST: MIRROR_URL,
FLOW_BINARY_MIRROR: 'https://github.com/facebook/flow/releases/download/v',
npm_config_registry: registry,
yarn_registry: registry,
};
function tyarn (env) {
const processEnv = process.env;
for (const k in processEnv) {
if (!processEnv.hasOwnProperty(k) || env[k]) {
continue;
}
env[k] = processEnv[k];
}
spawn('yarn', process.argv.slice(2), {
env: env,
cwd: process.cwd(),
stdio: 'inherit',
}).on('exit', function (code) {
process.exit(code);
});
};
module.exports = tyarn;