UNPKG

ssh-auto-publish

Version:

publish project to different environment

100 lines (92 loc) 2.91 kB
const fs = require('fs') const chalk = require('chalk') const archiver = require('archiver') /** * * @param jsStr 准备更换的字符串 * @param target 保留的环境base码 * @param expectsArr 排除的目标 * @returns {*} */ function changeBaseUrl(jsStr, target, ...expectsArr) { if (jsStr.includes(target)) { } else if (expectsArr) { expectsArr.forEach(v => { if (jsStr.includes(v)) { let tempArr = jsStr.split(v).join(target) jsStr = tempArr // jsStr = jsStr.replace(v, target) } }) } return jsStr } /** * 打包并更新 * @param envName 环境名称 */ function zipAndUpload(env) { return new Promise(resolve => { var output = fs.createWriteStream(`./${env.DEFAULT_HOST.name}.zip`) var archive = archiver('zip') output.on('close', function () { console.log(chalk.cyan('压缩完成,准备上传;Compress completed...ready upload')) var Client = require('ssh2').Client const uploadShellList = env.SHELL_LIST var conn = new Client() conn.on('ready', function () { console.log(chalk.cyan('连接客户端成功!Client :: ready')) const file = `./${env.DEFAULT_HOST.name}.zip` const target = `${env.DEFAULT_HOST.path}/${env.DEFAULT_HOST.name}.zip` if (!conn) { return } conn.sftp(function (err, sftp) { if (err) { console.log(chalk.red('链接失败')) throw err } sftp.fastPut(file, target, {}, function (err, result) { if (err) { console.log(chalk.red(err.message)) throw err } conn.shell(function (err, stream) { if (err) throw err // console.log(stream) setTimeout(() => { stream.on('close', function () { console.log(chalk.green(`更新《 ${env.NODE_ENV } 》环境完成了!`)) conn.end() resolve(env) }).on('data', function (data) { // console.log('STDOUT: ' + data) }).stderr.on('data', function (data) { console.log(chalk.red('出错了,STDERR: ' + data)) }) stream.end(uploadShellList.join('')) }, 1000) }) }) }) }).connect({ host: env.DEFAULT_HOST.host, port: 22, username: env.DEFAULT_HOST.user, password: env.DEFAULT_HOST.password }) }) output.on('end', function () { }) archive.on('error', function (err) { throw err }) archive.pipe(output) archive.glob('./dist' + '/**') archive.finalize() }) } module.exports = { changeBaseUrl, zipAndUpload }