eap-cli
Version:
edgeros 脚手架
123 lines (106 loc) • 3.17 kB
JavaScript
var Client = require('ftp');
var configJson = require('../config/edgeros.config.json');
var fs = require('fs');
var path = require('path');
var ora = require('ora');
var chalk = require('chalk');
var client = new Client();
var serverBasePath = '/apps/workspace';
function uploadProject(callback) {
client.on('ready', () => {
client.list('/apps/', false, (err, list) => {
let flag = false;
list.forEach((value) => {
if(value.name === 'workspace') {
flag = true;
return;
}
});
if(flag) {
spinner = ora('\n 开始清理模拟器缓存,请等待...');
spinner.start();
client.rmdir(serverBasePath, true, (err) => {
spinner.stop();
if(err) {
console.log(err);
} else {
console.log(chalk.green(`\n √ 模拟器缓存清理完毕!`));
client.mkdir(serverBasePath, (err) => {
if(err) {
console.log(err);
}
console.log('开始部署项目...');
uploadDir();
});
}
});
} else {
client.mkdir(serverBasePath, (err) => {
if(err) {
console.log(err);
}
console.log('开始部署项目...');
uploadDir();
});
}
});
});
client.on('error', (err) => {
console.log(`连接错误${err}`);
});
client.on('end', () => {
console.log('项目部署完成');
callback();
});
client.connect({
host: configJson.ftp.ip,
port: configJson.ftp.port,
user: configJson.ftp.username,
password: configJson.ftp.password
});
}
function mkdir(projectPath){
client.mkdir(`${serverBasePath}${projectPath}`, (err) => {
if(err) {
console.log(err);
}
});
}
function sendFile(filePath, projectPath,) {
client.put(filePath, serverBasePath + projectPath, (err) => {
if(err) {
console.log(chalk.red(`上传${filePath}文件报错`))
console.log(err);
}else {
console.log(chalk.green(`\n √ ${filePath}`));
}
});
}
function uploadDir() {
mkdir(getThisDir());
traverseFolders(process.cwd(), getThisDir());
client.end();
}
function traverseFolders(filePath, projectPath) {
if(filePath){
let files = fs.readdirSync(filePath);
files.forEach((file) => {
const fileDir = path.join(filePath, file);
const stat = fs.statSync(fileDir);
if(stat.isDirectory()) {
mkdir(`${projectPath}/${file}`);
traverseFolders(fileDir, `${projectPath}/${file}`);
}
if(stat.isFile()) {
sendFile(fileDir, `${projectPath}/${file}`);
}
});
}
}
function getThisDir() {
const path = process.cwd();
return '/' + path.substring(path.lastIndexOf('\\')+1);
}
module.exports = {
uploadProject: uploadProject
}