内容简介:不知道各位出包流程是否一样,反正我这边现状是每次后端要包,都需要打一个包,然后压缩并通过企业微信发送。或者迭代出包,首先打包,打完包之后压缩通过邮件发送给测试,并要重命名每一个文件的名字,比如名字为迭代版本 + 年月日时分。这样的流程非常繁琐,每次走这个流程都十分难受。那么,我们是如何通过技术来去掉这个痛苦的过程?首先,我们先分析一下,后端需要包,是通过企业微信给出去,测试则通过邮件,那么我们先统一通过邮件给包。打包之后,需要压缩,再邮件。压缩我们可以通过我们已经知道可以通过
不知道各位出包流程是否一样,反正我这边现状是每次后端要包,都需要打一个包,然后压缩并通过企业微信发送。或者迭代出包,首先打包,打完包之后压缩通过邮件发送给测试,并要重命名每一个文件的名字,比如名字为迭代版本 + 年月日时分。这样的流程非常繁琐,每次走这个流程都十分难受。那么,我们是如何通过技术来去掉这个痛苦的过程?
起步
首先,我们先分析一下,后端需要包,是通过企业微信给出去,测试则通过邮件,那么我们先统一通过邮件给包。打包之后,需要压缩,再邮件。压缩我们可以通过 gulp-zip
完成,邮件我们可以通过 node
来发送。
压缩
我们已经知道可以通过 gulp-zip
来处理压缩文件夹,这个时候,我们要先熟悉一下 gulp
的 API,然后熟悉 gulp-zip
的 API,最后使用它。
gulp
gulp
是一个自动化构建工具,它可以增强你的工作流程,它拥有易于使用、构建快速、插件高质和易于学习这四个特性。我们可以通过 gulp
插件实现前端代码的编译、压缩、测试;图片的压缩;浏览器的自动刷新,还有很多插件可以在这里查找。
-
gulp.src()在这里传入需要处理的文件路径,可以是多个文件以数组的形式[main.css, vender.css],也可以传入正则**/*.css。 -
gulp.task()创建任务,可以通过 gulp 任务名称来执行此任务。 -
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'))
);
复制代码
了解了 gulp
和 gulp-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);
}
});
})
复制代码
结束
相信大家看完, 对于这一块的使用都十分了解,以后再遇到这种场景就十分舒服了,我们只需要执行一个命令,就可以搞定出包流程,再也不必投入人力到压缩文件、重命名文件、拖动文件到企业微信、选择人、发送这个繁琐又无乐趣的重复流程中。
以上所述就是小编给大家介绍的《如何构建一个高效的开发流程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 大数据时代的用户画像基础介绍和构建流程
- 像摸鱼一样,摸清楚ElementUI的构建流程
- 万丈高楼平地起:如何构建全流程机器学习平台
- 使用基于浏览器的流程设计器构建微服务:Flogo
- 邦大夫医患AI对话系统,构建中医知识图谱,重新定义问诊流程
- 骞云科技 DevOps 实践一 构建更好的CI/CD流程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
电子商务:管理与社交网络视角(原书第7版)
(美)埃弗雷姆·特班(Efraim Turban)、戴维.金(David King)、李在奎、梁定澎、德博拉·特班(Deborrah Turban) / 时启亮、陈育君、占丽 / 机械工业出版社 / 2014-1-1 / 79.00元
本书对电子学习、电子政务、基于web的供应链、协同商务等专题进行了详细的介绍,全书涵盖丰富的资料以及个案,讨论了Web 2.0环境内的产业结构、竞争变化以及对当今社会的影响。另外,本书在消费者行为、协同商务、网络安全、网络交易及客户管理管理、电子商务策略等内容上都有最新的改编,提供读者最新颖的内容,贴近当代电子商务的现实。 本书适合高等院校电子商务及相关专业的本科生、研究生及MBA学员,也可......一起来看看 《电子商务:管理与社交网络视角(原书第7版)》 这本书的介绍吧!