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

栏目: Node.js · 发布时间: 7年前

内容简介:不知道各位出包流程是否一样,反正我这边现状是每次后端要包,都需要打一个包,然后压缩并通过企业微信发送。或者迭代出包,首先打包,打完包之后压缩通过邮件发送给测试,并要重命名每一个文件的名字,比如名字为迭代版本 + 年月日时分。这样的流程非常繁琐,每次走这个流程都十分难受。那么,我们是如何通过技术来去掉这个痛苦的过程?首先,我们先分析一下,后端需要包,是通过企业微信给出去,测试则通过邮件,那么我们先统一通过邮件给包。打包之后,需要压缩,再邮件。压缩我们可以通过我们已经知道可以通过

不知道各位出包流程是否一样,反正我这边现状是每次后端要包,都需要打一个包,然后压缩并通过企业微信发送。或者迭代出包,首先打包,打完包之后压缩通过邮件发送给测试,并要重命名每一个文件的名字,比如名字为迭代版本 + 年月日时分。这样的流程非常繁琐,每次走这个流程都十分难受。那么,我们是如何通过技术来去掉这个痛苦的过程?

起步

首先,我们先分析一下,后端需要包,是通过企业微信给出去,测试则通过邮件,那么我们先统一通过邮件给包。打包之后,需要压缩,再邮件。压缩我们可以通过 gulp-zip 完成,邮件我们可以通过 node 来发送。

压缩

我们已经知道可以通过 gulp-zip 来处理压缩文件夹,这个时候,我们要先熟悉一下 gulp 的 API,然后熟悉 gulp-zip 的 API,最后使用它。

gulp

gulp 是一个自动化构建工具,它可以增强你的工作流程,它拥有易于使用、构建快速、插件高质和易于学习这四个特性。我们可以通过 gulp 插件实现前端代码的编译、压缩、测试;图片的压缩;浏览器的自动刷新,还有很多插件可以在这里查找。

  1. gulp.src() 在这里传入需要处理的文件路径,可以是多个文件以数组的形式 [main.css, vender.css] ,也可以传入正则 **/*.css

  2. gulp.task() 创建任务,可以通过 gulp 任务名称来执行此任务。

  3. gulp.dest() 生成文件的路径。如果某文件夹不存在,将会自动创建它。

gulp-zip

gulp-zip 的使用方式十分简单,我们直接上个 demo 看下。这里,我们首先获取到 gulp 和 zip,然后取到 src 目录下的所有文件,把他们进行压缩成 archive.zip 文件,然后把这个文件放到 dist 目录下。

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.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 :ghost:" <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,
            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);
        }
    });
})
复制代码

结束

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


以上所述就是小编给大家介绍的《如何构建一个高效的开发流程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Just My Type

Just My Type

Simon Garfield / Profile Books / 2010-10-21 / GBP 14.99

What's your type? Suddenly everyone's obsessed with fonts. Whether you're enraged by Ikea's Verdanagate, want to know what the Beach Boys have in common with easy Jet or why it's okay to like Comic Sa......一起来看看 《Just My Type》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具