前端Vue超简单自动化部署

875 阅读3分钟

前言

一般Vue项目的部署过程,npm run build打包->FTP上传到服务器,但是每次打包之后都需要手动通过FTP软件来把新的dist文件夹覆盖原来对应的服务器目录。这样子好像有点麻烦,我希望通过一句命令,例如npm run push就能完成这一系列的步骤,所有有了所谓的自动化部署,下面让我详细谈谈两种实现的方法。

第一种方法:修改package.json

通过package.json自定义命令执行内容,然后执行npm run 指令
这里有几个问题需要注意,scp -r /dist/ root@42.192.141.179:/www/wwwroot/targetFloder这句命令是linux系统中用来进行文件传输的命令,-r表示递归,也就是把dist文件夹递归上传到服务器42.192.141.179的 /www/wwwroot/targetFloder 目录,记得把我的服务器ip改为你自己的。 PS:服务器要有对应的文件夹,要不然你怎么传啊xd。

"scripts": {
    "dev": "npm run serve",
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    
    //执行打包,并上传至服务器指定目录
    "buildToProduct": "npm run build && scp -r dist/* root@42.192.141.179:/www/wwwroot/targetFloder",
     //上传至服务器指定目录
    "push": "scp -r dist/* root@42.192.141.179:/www/wwwroot/targetFloder"
  },

让我们试试,执行npm run buildToProduct,结果如图: 此时,执行完npm run build之后要上传到服务器提示需要输入用户root的密码,所以我输完密码之后,文件就会开始上传,如图:

如何解决每次都需要输入密码的问题

步骤一(生成ssh key)

生成ssh key:使用git bash或者powershell执行ssh-keygen可以生成ssh key。会询问生成的key存放地址,直接回车就行,如果已经存在,则会询问是否覆盖,如果存在的话就输入n。

步骤二 (同步ssh key到远程服务器)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@117.78.4.26

输入密码后,之后再次同步就不需要输入密码了。其实ssh_key是同步到了服务器(此处是root用户家目录)~/.ssh/authorized_keys 文件里: 当然你也可以手动复制本地~/.ssh/id_rsa.pub(注意是pub结尾的公钥)文件内容追加到服务器~/.ssh/authorized_keys的后面(从命名可以看出该文件可以存储多个ssh key) 注意:这里全程使用的是root用户,所以没有文件操作权限问题。如果你的文件夹创建用户不是远程登录用户,或许会存在同步文件失败的问题,此时需要远程服务器修改文件夹的读写权限(命令 chmod)。

第二种方法:写入nodejs脚本

同样在package里面自定义npm run 指令,然后在自己的项目根目录下面编写node执行脚本。

步骤一(定义指令)

package.json里面自定义npm run 指令

"scripts": {
    "dev": "npm run serve",
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    
     //上传至服务器指定目录
    "upload": "npm run build && node upload.js"
  },

步骤二(添加node脚本)

在项目根目录下面,添加upload.js

const client = require('scp2');
const ora = require('ora');
const chalk = require('chalk');
const spinner = ora(chalk.green('正在发布到测试服务器...'));
spinner.start();

client.scp('./dist/', { // 本地打包文件的位置
	"host": '***.***.***.***', // IP地址
	"port": '22', // 服务器端口
	"username": '***', // 用户名
	"password": '***', // 密码
	"path": '/www/wwwroot/targetFolder' // 项目路径
}, err => {
	spinner.stop();
	if (!err) {
		console.log(chalk.green("部署完毕。"))
	} else {
		console.log("err", err)
	}
})

步骤三(安装node依赖包)

因为upload.js需要依赖包scp2、ora、chalk,所以先安装依赖包。

npm i scp2 ora chalk -D

步骤四(测试)

总结

按我的愚昧见解,自动化部署就是使用命令来代替手动上传文件的操作,本文的自动化部署其实就是利用linux scp文件传输的命令。 但是我有另外一疑问,如何实现版本的回滚呢,毕竟出现bug的时候,回滚操作是比较常见的。希望有大佬可以指点我一下。 目前我使用的是git提交版本,当需要回滚的时候,我就把git版本切换之后再进行上传服务器。

本文参考的链接:
mp.weixin.qq.com/s/qggBoEega…
blog.csdn.net/qq_36990263…