scp源码到服务器指定目录
服务端打包
重启应用
// yarn add scp2
// yarn add [email protected]
// yarn add [email protected]
const fs = require('fs');
const client = require('scp2');
const ora = require('ora');
const chalk = require('chalk');
const { Client } = require('ssh2');
const spinner = ora(chalk.green('正在上传到到服务器...'));
spinner.start();
//服务器配置
const host = 'iot.siruish.cn';
const port = 22;
const username = 'root';
const password = 'password';
//服务器项目目录和pm2名称
const path = '/home/sirui_web/';
//需要自行配置服务器npm和pm2
const pm2Name = 'sirui_web';
const config = {
host,
port,
username,
password,
path
}
//不需要上传的目录或者文件
const blackList = ['node_modules','.nuxt','.git'];
//数组取差集
const arrDifferenceDet = (arr1, arr2) => {
var set1 = new Set(arr1);
var set2 = new Set(arr2);
var subset = [];
for (let item of set1) {
if (!set2.has(item)) {
subset.push(item);
}
}
return subset;
}
//上传文件或者文件夹
const upload = (src,config) => {
const newConfig = JSON.parse(JSON.stringify(config));
newConfig.path = newConfig.path+src
return new Promise((resolve,reject)=>{
client.scp(src,newConfig,function(err) {
if(!err){
console.log(src,'upload success!');
resolve(`${src} upload success!`);
} else {
// reject(err);
resolve(upload(src,config));
}
})
})
}
const files = fs.readdirSync('./');
const filesWithoutBlackList = arrDifferenceDet(files,blackList);
const uploadList = filesWithoutBlackList.map(fileName=>()=>{return upload(fileName,config)});
//promiseList串行上传
async function asyncUpload(promises) {
for (const promise of promises){
await promise();
}
}
const shellCmd = `
pm2 stop ${pm2Name}
cd ${path}
npm install
npm run build
pm2 restart ${pm2Name}`
//重启Nuxt
const restartNuxt = ()=>{
const conn = new Client();
conn.on('ready', () => {
console.log('Client :: ready');
conn.exec(shellCmd, (err, stream) => {
if (err) throw err;
stream.on('close', (code, signal) => {
console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
conn.end();
}).on('data', (data) => {
console.log('STDOUT: ' + data);
}).stderr.on('data', (data) => {
console.log('STDERR: ' + data);
});
});
}).connect({host,port,username,password});
}
asyncUpload(uploadList).then(()=>{
spinner.stop();
console.log('所有文件上传成功');
restartNuxt();
})
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)