custom-app
Version:
ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������
121 lines (110 loc) • 3.36 kB
JavaScript
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)
}
}