每次项目打包后,需要先 npm run build
,然后将项目打包成 zip
,再上传到服务器解压,特别的繁琐,于是写了一个小脚本,完成一系列的操作。
此处服务器用的是 centos
系统。
安装需要用到的包
cnpm i compressing ssh2 --save-dev
代码
/* eslint-disable */
const {exec} = require('child_process')
const compressing = require('compressing')
const Client = require('ssh2').Client
const server = {
host: 'localhost', // 服务器地址
port: 22, // 端口号
username: 'root', // 用户名
password: '123456' // 密码
}
const connect = new Client()
function conn() { // 连接服务器
console.log('*******连接服务器*******')
connect.on('ready', () => {
upload()
}).on('error', (err) => {
console.error(err)
console.log('*******连接出错*******')
}).on('end', () => {
console.log('*******连接关闭*******')
}).on('close', (err) => {
if (err) {
console.log('*******连接出错*******')
}
}).connect(server)
}
function upload() { // 上传
console.log('*******开始上传*******')
connect.sftp((err, sftp) => {
if (err) throw err
// 第一个参数为要上传的文件名, 第二个参数为服务器目录
sftp.fastPut('dist.zip', '/home/yunwo/front/pc_vue/dist.zip', (err, res) => {
if (err) {
console.log(err)
console.error('*******上传失败*******')
connect.end()
return
}
unzipShell()
})
})
}
function unzipShell() { // 服务器解压命令
connect.shell((err, stream) => {
console.log('*******解压中*******')
if (err) throw err
let buf = "";
stream.on('close', err => {
connect.end()
if (err) {
console.error(err)
return
}
console.info('******* SUCCESS!! *******')
}).on('data', data => {
buf += data
console.log(buf)
})
// 服务器端的命令行运行
// 主要就是到目录下解压文件后复制到上一层
// 再删除掉解压出来的文件夹
stream.write('cd /home/yunwo/front/pc_vue/ && unzip dist.zip \nnext\n')
stream.write('cd dist && /bin/cp -r -f * ../ \nnext\n')
stream.write('cd ../ && rm -r -f dist \nexit\n')
})
}
function compress() { // 压缩命令
console.log('********压缩中********')
// 此处第一个参数为要打包的目录, 第二个参数是打包后的文件名
compressing.zip.compressDir('dist/', 'dist.zip').then(() => {
console.log('*******压缩成功*******')
conn()
})
}
console.log('********打包中********')
// 运行 'npm run build' 命令
const bat = exec('npm run build', (err, stdout, stderr) => {
if (err) {
console.error(`exec error: ${err}`);
return;
}
console.log('*******打包成功*******')
compress()
})