思路
1,自动打包
2,通过ssh2 删除之前的文件
3,通过scp2 连接服务器替换文件
步骤
1, npm 依赖下载
npm i scp2
npm i ora@3.4.0 // 推荐下载@3.4.0 版本 因为可以使用require 引入
npm i ssh2
npm i readline
2, 在package.json 中 scripts添加
"deploy": "npm run build:product && node ./deploy.js"
3,在根目录新建deploy.js
const scpClient = require('scp2')
const ora = require('ora')
const loading = ora('正在部署中');
const Client = require('ssh2').Client;
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const questions = [ 'Please input server username: ', 'Please input server password: ']
const linelimit = 2
let inputArr = []
let index = 0
let server = {}
// 依次执行命令行交互语句
function runQueLoop() {
if (index === linelimit) {
server["username"] = inputArr[0]
server["password"] = inputArr[1]
deployFile()
return
}
rl.question(questions[index], as => {
inputArr[index] = as
index++
runQueLoop()
})
}
function deployFile() {
const service = {
host: 'xxx',//服务器IP
port: 22,//服务器端口
username:server.username,//服务器ssh登录用户名
password: server.password,//服务器ssh登录密码
path: '/www/wwwroot/8098'//服务器web目录
}
var conn = new Client();
conn.on('ready', function () {
// 删除上个版本的文件
conn.exec('rm -rf /home/ruoyi/nginx/html/ruoyi-ui/*', function (err, stream) {
if (err) throw err;
stream.on('close', function (code, signal) {
loading.start();
scpClient.scp(
'./dist', service,
function (err) {
loading.stop();
if (err) {
console.log('发布失败!');
throw err;
} else {
console.log('成功发布!');
}
}
);
conn.end();
}).on('data', function (data) {
console.log('STDOUT: ' + data);
}).stderr.on('data', function (data) {
console.log('STDERR: ' + data);
});
});
}).connect(service);
}
runQueLoop()
最后在控制台执行 npm run deploy 命令 就可以了