UNPKG

custom-app

Version:

ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������

121 lines (110 loc) 3.36 kB
const chalk = require('chalk') var Client = require('ssh2').Client const path = require('path') var conn = new Client() var fs = require('fs') var util = require('../../util/util') /** * 上传文件 * @param conn * @param params * @constructor */ function UploadFile (conn, reactAppPath, originalPath, projectName, options) { let allProjectName = path.basename(originalPath); params = { file: __dirname + `/${projectName === "." ? allProjectName : projectName}.zip`, target: `${options.path}/${projectName === "." ? allProjectName : projectName}.zip` } const file = params.file const target = params.target if (!conn) { return } conn.sftp(function (err, sftp) { if (err) { throw err } sftp.fastPut(file, target, {}, function (err, result) { if (err) { console.log(chalk.red(err.message)) throw err } Shell(conn, reactAppPath, originalPath, projectName, options) }) }) } function Ready (reactAppPath, originalPath, projectName, options) { conn.on('ready', function () { console.log('Client :: ready') UploadFile(conn, reactAppPath, originalPath, projectName, options) }).connect(options) } /** * 上传完成后服务器需要执行的内容 * 删除本地压缩文件 * @param conn * @constructor */ function Shell (conn, reactAppPath, originalPath, projectName, options) { /** * 1.进入目录 * 2.将原项目名称加上bak标志为备份文件 * 3.解压缩上传的zip文件并将名称改为项目名称 * 4.删除备份项目 * 5.删除zip文件 * 6.退出 * @type {string[]} */ let ignorePath = util.getIgnorePath(); let allProjectName = path.basename(originalPath); let pathList = originalPath.replace(ignorePath, '').split("/").join(" "); let uploadShellList; if (projectName === '.') { projectName = allProjectName; pathList = path.dirname(originalPath.replace(ignorePath, '')).split("/").join(" "); } else { pathList = originalPath.replace(ignorePath, '').split("/").join(" "); } uploadShellList = [ `cd ${options.path}\n`, `filelist=(` + `${pathList}` + `)\n`, 'for file in ${filelist[@]}\n', `do\n`, `if [ ! -d $file ];then\n`, `mkdir $file\n`, `fi\n`, `mv ${projectName}.zip ./$file\n`, `cd $file\n`, 'done\n', //`cd "./${projectName}"\n`, `mv ${projectName} ${projectName}.bak\n`, `unzip ${projectName}.zip\n`, // `mv build ${env.DEFAULT_HOST.name}\n`, `rm -rf ${projectName}.bak\n`, `rm -rf ${projectName}.zip\n`, `exit\n` ] conn.shell(function (err, stream) { if (err) throw err stream.on('close', function () { console.log('Stream :: close') conn.end() console.log(chalk.green('发布成功')) fs.unlinkSync(__dirname + `/${projectName}.zip`) }).on('data', function (data) { console.log('STDOUT: ' + data) }).stderr.on('data', function (data) { console.log('STDERR: ' + data) }) stream.end(uploadShellList.join('')) }) } module.exports = function (reactAppPath, originalPath, projectName, options) { try { Ready(reactAppPath, originalPath, projectName, options) } catch (err) { console.log(err) } }