不知道各位出包流程是否同樣,反正我這邊現狀是每次後端要包,都須要打一個包,而後壓縮並經過企業微信發送。或者迭代出包,首先打包,打完包以後壓縮經過郵件發送給測試,並要重命名每個文件的名字,好比名字爲迭代版本 + 年月日時分。這樣的流程很是繁瑣,每次走這個流程都十分難受。那麼,咱們是如何經過技術來去掉這個痛苦的過程?css
首先,咱們先分析一下,後端須要包,是經過企業微信給出去,測試則經過郵件,那麼咱們先統一經過郵件給包。打包以後,須要壓縮,再郵件。壓縮咱們能夠經過 gulp-zip
完成,郵件咱們能夠經過 node
來發送。前端
咱們已經知道能夠經過 gulp-zip
來處理壓縮文件夾,這個時候,咱們要先熟悉一下 gulp
的 API,而後熟悉 gulp-zip
的 API,最後使用它。node
gulp
是一個自動化構建工具,它能夠加強你的工做流程,它擁有易於使用、構建快速、插件高質和易於學習這四個特性。咱們能夠經過 gulp
插件實現前端代碼的編譯、壓縮、測試;圖片的壓縮;瀏覽器的自動刷新,還有不少插件能夠在這裏查找。webpack
gulp.src()
在這裏傳入須要處理的文件路徑,能夠是多個文件以數組的形式[main.css, vender.css]
,也能夠傳入正則 **/*.css
。git
gulp.task()
建立任務,能夠經過 gulp 任務名稱來執行此任務。github
gulp.dest()
生成文件的路徑。若是某文件夾不存在,將會自動建立它。web
gulp-zip 的使用方式十分簡單,咱們直接上個 demo 看下。這裏,咱們首先獲取到 gulp 和 zip,而後取到 src 目錄下的全部文件,把他們進行壓縮成 archive.zip 文件,而後把這個文件放到 dist 目錄下。npm
const gulp = require('gulp');
const zip = require('gulp-zip');
gulp.task('default', () =>
gulp.src('src/*')
.pipe(zip('archive.zip'))
.pipe(gulp.dest('dist'))
);
複製代碼
瞭解了 gulp
和 gulp-zip
的一些用法,咱們來編寫壓縮的代碼。在這段代碼裏,咱們首先獲取到當前的時間,而後取出 webpack/dest/
目錄下全部文件,壓縮成一個名叫 V2018.12.4-201812201430
,最後把這個文件放到 dest
目錄下。gulp
gulp.task('zip', ()=>{
let time = moment().format('YYYYMMDDTHH:mm');
gulp.src(`./webpack/dest/**`)
.pipe(zip(`V${version}-${time}.zip`))
.pipe(gulp.dest(`${__dirname}/dest/`));
});
複製代碼
咱們的文件已經壓縮到特定目錄了,咱們須要去這個目錄下,讀取此文件,而後當作附件給發送出去。固然,發送出去也須要發送人和收件人,這一塊該怎麼作呢?筆者特定去查了下,發現 github 裏的 nodemailer 很符合個人預期。那咱們一塊兒來看下如何使用 nodemailer 來發送一個郵件。後端
nodemailer 是 Node.js 應用程序的一個模塊,它能夠很便捷的發送一封電子郵件,而且它是一個基於 MIT 開源的一個項目。
1.咱們首先安裝 nodemailer。
npm i nodemailer
複製代碼
2.咱們來看一下 Demo
'use strict';
const nodemailer = require('nodemailer');
// 生成一個 SMTP 的服務帳號
nodemailer.createTestAccount((err, account) => {
// 使用默認的 SMTP 傳輸建立可重用的傳輸對象
let transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
secure: false,
auth: {
user: account.user, // 帳號
pass: account.pass // 密碼
}
});
// 設置郵件配置項
let mailOptions = {
from: '"Fred Foo 👻" <foo@example.com>', // 發送者
to: 'bar@example.com, baz@example.com', // 接收郵件列表
subject: 'Hello ✔', // 主題
text: 'Hello world?', // 文本
};
// 發送郵件
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
});
});
複製代碼
3.咱們發現根據網上 Demo 已經能夠實現發送郵件了,可是咱們如今還須要附件。咱們經過查找 nodemailer 的 API 發現,能夠經過下面的方法來實現。
fs.readdir(dirPath, function (err, files) {
// 讀取附件信息
let attachments = _.map(files, fileName=>{
return {
filename: fileName,
content: fs.readFileSync(`${dirPath}/${fileName}`)
};
});
// 發送郵件
let mailOptions = {
from: sendEmail,
to: receiveUser,
subject: '更新包',
text: `以下,爲${version}迭代更新包`,
attachments
};
transporter.sendMail(mailOptions, (err, info)=>{
if(!_.isNull(err)){
console.log(err);
}
});
})
複製代碼
相信你們看完, 對於這一塊的使用都十分了解,之後再遇到這種場景就十分舒服了,咱們只須要執行一個命令,就能夠搞定出包流程,不再必投入人力到壓縮文件、重命名文件、拖動文件到企業微信、選擇人、發送這個繁瑣又無樂趣的重複流程中。