@puerts/cli
Version:
PureTS is a quick scaffold tool, which can be used in the project.
76 lines (68 loc) • 3.17 kB
JavaScript
import fs from 'node:fs';
import path, { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import formatParam from './formatParam.js';
import getAllCommandHelp from './getAllCommandHelp.js';
import getWorkDir from './getWorkDir.js';
import getConfig from './getConfig.js';
import createLang from '../lib/createLang.js';
import getPathInfo from '../lib/getPathInfo.js';
import adaptPath from '../lib/adaptPath.js';
const lang = createLang({
version:{
cn:'版本',
en:'Version'
},
unknownCommand:{
cn:'未知的命令',
en:'unknown command'
},
notFunction:{
cn:'入口必须向外导出一个函数',
en:'The entry must export a function'
}
});
const __dirname = dirname(fileURLToPath(import.meta.url));
(async()=>{
const cwd = process.cwd();
const command = process.argv[2];
const packagePath = path.join(__dirname,'..','package.json');
const packageObj = JSON.parse(fs.readFileSync(packagePath,'utf-8'));
if(command === undefined || /^(-h|--help|-v|--version)$/i.test(command)){ // 未输入命令则返回工具所有帮助信息
console.log(`${lang('version')} ${packageObj.version}\n`);
console.log(await getAllCommandHelp());
return;
};
const param = await formatParam(command,process.argv.slice(3)); // 格式化参数对象
if(typeof param === 'string'){ // 返回字符串则说明参数有误,直接输入帮助信息
console.log(param);
return;
};
if(param.help){ // 输出命令帮助
console.log(param.help);
return;
};
const workObj = getWorkDir(cwd); // 获取当前项目根目录
if(workObj.msg){ // 如果有返回消息,说明有报错,直接输出错误信息
console.log(workObj.msg);
return;
};
const config = await getConfig(workObj.path); // 如果获取项目配置返回的是提示,则打印出提示且不再向下执行
const argObj = {param,config,workObj,cwd};
const entryPath = path.join(__dirname,'..','Commands',command,'index.js'); // 拿到每个命令入口文件路径
const entryPathInfo = getPathInfo(entryPath);
if(entryPathInfo.type !== 'file'){
return;
};
if(config.msg && command !== 'init'){ // 项目未初始化,且不是初始化指令则不允许向下执行
console.log(config.msg);
return;
};
const entry = (await import(adaptPath(entryPath))).default; // 得到入口方法
if(typeof entry !== 'function'){
console.log(lang('notFunction'));
return;
};
entry(argObj);
})()