当前位置: 首页 > 后端技术 > Node.js

使用fjpublish发布前端项目(基础篇)

时间:2023-04-03 15:06:39 Node.js

本系列文章分为基础篇、安全篇、扩展篇。前言曾几何时,相信一些WebDeveloper(包括我)使用传统的项目发布方式(使用xftp或sublimetext插件sftp等),发布方式简单粗暴。如果想发布任意目录,直接上传覆盖即可。。。但是这种方式对于现在的前端项目有一些缺点:如果项目中包含webpackgulp等构建工具,每次发布都需要等待构建完成后再手动上传,效率低下;如果项目是前端服务器渲染项目,比如vue服务器渲染,那么项目上传到服务器后,需要重新登录服务器重启进程;发布时选择错误的文件或错误的发布环境导致的上传(>﹏<)悲剧,但没有后悔药。我知道你想告诉我你也可以使用gitwebhook等自动化工具。确实,这是一个比较高级的用法,很靠谱,但是搭建过程对于新手来说还是比较麻烦,而且前端跟服务端不一样。大多数项目都需要构建,那么构建过程到底应该放在服务器上还是本地是一个问题。我理想的发布者应该很容易建立。您可以选择通过配置文件发布到不同的环境。输入一行发布命令后,你可以去泡杯茶,让它自己完成整个发布过程。于是,fjpublish诞生了。是一种不同于gitwebhook的发布思路,基于nodejs的能力,可以自动化整个发布过程,顺便提交git...installation如果你已经安装了nodejs(6.0+),那么只需要一条命令即可完成fjpublish安装npminstallfjpublish-g全局安装即可在任意路径下使用fjpublish命令。注意:fjpublish依赖一个配置文件,默认是fjpublish.config.js,如果版本库中不想提交服务器安全信息,请记得添加到ignore文件中,比如.gitignore配置文件structurefjpublish命令行默认读取当前工作目录下的fjpublish.config.js文件,返回一个结构如下的对象:module.exports={//modulesstartmodules:[{name:'testenvironment',//标识发布环境Descriptionenv:'test',//发布环境的唯一标识ssh:{host:'12.23.345.678',//远程服务器ipusername:'root',//登录用户名in到rc版本的server//user选项,以后请配置option和userName为用户名。password:'12345678',//登录服务器的密码},buildCommand:'build',//构建命令build=>npmrunbuildlocalPath:'example',//项目中要发布的目录remotePath:'/www/example',//项目中要发布到远程服务器的目录tag:'123'//标记发布版本,可以不设置},{...}],//modulesendnobuild:true,//每个模块继承都可以使用模块外的字段,这里只是举例tag:'v1',//每个模块继承都可以使用模块外的字段,这里只是举例}上面显示了一个简单的配置。关于使用fjpublish和阅读本文档,您需要了解以下概念:modules数组中的每个对象(也称为模块)代表一个发布环境。本文档中的module指的是配置文件本文档中的任何环境配置模块指的是module.exports输出的所有字段(包括modules)objectconfig中modules字段之外的字段会在初始化后合并到各个module中,优先级为module>config,也可以理解为module继承config。config中modules字段之外的字段不仅用于继承到模块实例,还用于定义一些全局配置字段。听起来你很困惑。建议看完例子再重新理解上面的内容。闲话少说,先从几个例子来了解fjpublish能做什么。1.一个简单的例子,将项目文件发布到远程环境,并备份旧文件。任务描述选择以提示的形式发布到测试环境配置文件//fjpublish.config.jsmodule.exports={modules:[{name:'testenvironment',env:'test',ssh:{host:'192.168.0.xxx',username:'root',//登录服务器的用户名//rc版本的user选项和userName选项以后要配置为usernamepassword:'xxxxxx',},buildCommand:'webpack',localPath:'example',remotePath:'/www/manman/test',},{name:'预发布环境',env:'pre_release',//其余配置参考'testenvironment'},{name:'官方环境',env:'pre_release',//其余配置参考'testenvironment'}]}//项目根目录下的package.json//用于使用构建命令npmrunwebpack调用webpack..."scripts":{"webpack":"webpack--configexample/webpack/build/build.js"},...发布命令fjpublishenv-sdynamicgraph

简单示例
更多内容可以使用命令fjpublishenv--diff开启差异化发布,只上传改变每次发布的文件,这大大缩短了上传时间。对于不需要构建的项目,不需要准备package.json,在配置文件中设置nobuild选项;nobuild:true对于不需要构建的临时版本,请在命令fjpublishenv--nobuild2中使用--nobuild选项。多目录发布有时我们的项目需要发布多个文件夹,或者需要忽略一些文件,这时我们需要调整发布方式。任务描述使用模块的localPathEntries发布多个目录;使用模块的localPathIgnore忽略所有以txt结尾的文件。项目文件结构配置文件//项目根目录下的fjpublish.config.jsmodule.exports={modules:[{name:'testenvironment',env:'test',ssh:{host:'192.168.0.xxx',username:'root',//登录服务器的用户名//以后rc版本的user选项和userName选项要配置为username。密码:'xxxxx',},buildCommand:'webpack',localPathEntries:['example','lib'],localPathIgnore:'**/*.txt',remotePath:'/www/manman/multiple',}],}发布命令fjpublishenv测试动态图
多目录发布
更多如果更改配置,发布的项目结构将完全不一样的,聪明的猜猜如果修改上面配置的localPath和localPathEntries会发生什么;...localPath:'example/webpack',//当localPathEntries存在时,localPath可以留空,表示项目的根目录。localPathEntries:['build','dist'],...如果项目是多目录发布,远程目录的备份规则也会改变为使用这些子目录作为备份源。3、远程post-command对于需要重启服务的项目,fjpublish也支持。任务描述项目发布后使用模块配置项postCommands重启pm2进程;忽略当前的构建过程并提交一个git;使用模块配置项ssh2shell将每个远程命令的超时时间设置为20秒。项目根目录下的配置文件//fjpublish.config.jsmodule.exports={modules:[{name:'testenvironment',env:'test',ssh:{host:'192.168.0.xxx',username:'root',//登录服务器的用户名//rc版本的user选项和userName选项要配置为usernamepassword:'xxxxxx',},ssh2shell:{idleTimeOut:20000},postCommands:['pm2reloadxxx'],buildCommand:'build',localPath:'example',remotePath:'/www/manman/test',}]}发布命令fjpublishenvtest--nobuild--commit'remotepostcommand'dynamic
远程后置命令
4.快速恢复有备份项目的功能,当然要有恢复的方法。任务描述将版本预发布环境恢复到标记为‘自定义标签版本’的版本;项目根目录下的配置文件//fjpublish.config.jsmodule.exports={modules:[{name:'pre-releaseenvironment',env:'pre_release',ssh:{//省略},localPath:'example',remotePath:'/www/zhangchao/pre_release',}],}restorecommandfjpublishrecoverpre_release动态图
快速恢复
更多可以使用命令fjpublishrecoverpre_release-p,--previous快速恢复到之前的版本,无需选择;您可以使用选项recoverTemplate来自定义版本列表模板;快速恢复也会执行postCommands配置的postcommands。结束语以上例子描述了fjpublish中最基本的功能,fjpublish还具有强大的扩展能力。感兴趣的童鞋可以直接去官方文档了解更多,别忘了在github上给我一个star。下一期我们会讲到如何使用fjpublish进行安全发布,再见∩__∩y。下一期地址:使用fjpublish发布前端项目(安全篇)fjpublish官方交流群:608809145