jmc-deploy-cli
Version:
A cli tool for web deploy.
79 lines (66 loc) • 2.55 kB
JavaScript
const path = require('path');
const fs = require('fs');
const inquirer = require('inquirer');
const packageJson = require('../package.json');
const deployPath = path.join(process.cwd(), './deploy');
let deployConfigPath = `${deployPath}/deploy.config.js`;
// 如何当前目录不存在配置信息,就从根目录获取
if(!fs.existsSync(deployConfigPath)){
// 解析路径,获取盘符信息
const parsedPath = path.parse(process.cwd());
const rootDirectory = parsedPath.root;
// 拼接新的路径
deployConfigPath = path.join(rootDirectory, 'deploy', 'deploy.config.js');
}
const { checkNodeVersion, checkDeployConfig, underlineLog } = require('../utils/index');
const version = packageJson.version;
const requiredNodeVersion = packageJson.engines.node;
const versionOptions = ['-V', '--version'];
checkNodeVersion(requiredNodeVersion, 'jmc-deploy');
const program = require('commander');
program
.version(version)
.command('init')
.description('初始化部署相关配置')
.action(() => {
require('../lib/init')();
});
const agrs = process.argv.slice(2);
const firstArg = agrs[0];
// 非version选项且有配置文件时,进入部署流程
if (!versionOptions.includes(firstArg) && fs.existsSync(deployConfigPath)) {
deploy();
}
// 无参数时默认输出help信息
if (!firstArg) {
program.outputHelp();
}
// 部署流程
function deploy() {
// 检测部署配置是否合理
const deployConfigs = checkDeployConfig(deployConfigPath);
if (!deployConfigs) {
process.exit(1);
}
// 注册部署命令
deployConfigs.forEach(config => {
const { command, projectName, name, host } = config;
program
.command(`${command}`)
.option('-d, --disbuild', '不打包,直接部署')
.description(`${underlineLog(projectName)}项目${underlineLog(name)}部署`)
.action((options) => {
console.log(`${underlineLog(projectName)}项目将部署到${underlineLog(name)}-${underlineLog(host)}。`);
const deploy = require('../lib/deploy');
const _config = { ...config }
if(_config.basePath){
_config.distPath = path.join(_config.basePath, _config.distPath);
_config.script = `cd ${_config.basePath} && ${_config.script}`;
}
deploy(_config, options.disbuild);
});
});
}
// 解析参数
program.parse(process.argv);