如何構建一個高效的開發流程

背景

不知道各位出包流程是否同樣,反正我這邊現狀是每次後端要包,都須要打一個包,而後壓縮並經過企業微信發送。或者迭代出包,首先打包,打完包以後壓縮經過郵件發送給測試,並要重命名每個文件的名字,好比名字爲迭代版本 + 年月日時分。這樣的流程很是繁瑣,每次走這個流程都十分難受。那麼,咱們是如何經過技術來去掉這個痛苦的過程?css

起步

首先,咱們先分析一下,後端須要包,是經過企業微信給出去,測試則經過郵件,那麼咱們先統一經過郵件給包。打包以後,須要壓縮,再郵件。壓縮咱們能夠經過 gulp-zip 完成,郵件咱們能夠經過 node 來發送。前端

壓縮

咱們已經知道能夠經過 gulp-zip 來處理壓縮文件夾,這個時候,咱們要先熟悉一下 gulp 的 API,而後熟悉 gulp-zip 的 API,最後使用它。node

gulp

gulp 是一個自動化構建工具,它能夠加強你的工做流程,它擁有易於使用、構建快速、插件高質和易於學習這四個特性。咱們能夠經過 gulp 插件實現前端代碼的編譯、壓縮、測試;圖片的壓縮;瀏覽器的自動刷新,還有不少插件能夠在這裏查找。webpack

  1. gulp.src() 在這裏傳入須要處理的文件路徑,能夠是多個文件以數組的形式[main.css, vender.css],也能夠傳入正則 **/*.cssgit

  2. gulp.task() 建立任務,能夠經過 gulp 任務名稱來執行此任務。github

  3. gulp.dest() 生成文件的路徑。若是某文件夾不存在,將會自動建立它。web

gulp-zip

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'))
);
複製代碼

瞭解了 gulpgulp-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);
        }
    });
})
複製代碼

結束

相信你們看完, 對於這一塊的使用都十分了解,之後再遇到這種場景就十分舒服了,咱們只須要執行一個命令,就能夠搞定出包流程,不再必投入人力到壓縮文件、重命名文件、拖動文件到企業微信、選擇人、發送這個繁瑣又無樂趣的重複流程中。

相關文章
相關標籤/搜索