如何构建一个高效的开发流程

背景

不知道各位出包流程是否同样,反正我这边现状是每次后端要包,都须要打一个包,而后压缩并经过企业微信发送。或者迭代出包,首先打包,打完包以后压缩经过邮件发送给测试,并要重命名每个文件的名字,好比名字为迭代版本 + 年月日时分。这样的流程很是繁琐,每次走这个流程都十分难受。那么,咱们是如何经过技术来去掉这个痛苦的过程?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);
        }
    });
})
复制代码

结束

相信你们看完, 对于这一块的使用都十分了解,之后再遇到这种场景就十分舒服了,咱们只须要执行一个命令,就能够搞定出包流程,不再必投入人力到压缩文件、重命名文件、拖动文件到企业微信、选择人、发送这个繁琐又无乐趣的重复流程中。

相关文章
相关标签/搜索