create-aiot
Version:
An easy way to start aiot project
123 lines (117 loc) • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _sharedUtils = require("@aiot-toolkit/shared-utils");
var _prompts = require("@inquirer/prompts");
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _path = _interopRequireDefault(require("path"));
var _Common = _interopRequireDefault(require("./Common"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const json = require('../template/template.json');
/**
* TemplateUtil
*/
class TemplateUtil {
static async requestTemplateList(type) {
const item = json.find(item => item.type === type);
if (!item || !item.demoList) {
_sharedUtils.ColorConsole.throw(`no`, {
word: type,
style: _sharedUtils.ColorConsole.getStyle(_sharedUtils.Loglevel.THROW)
}, `template`);
return [];
}
return item.demoList;
}
/**
* 验证项目名称,只能包含:字母、数字、-、_
* @param value
* @returns
*/
static validateProjectName(value) {
const reg = /^[0-9a-zA-Z_\u4e00-\u9fa5\-]+$/;
if (!value) {
return `Please enter a project name`;
}
if (!reg.test(value)) {
return 'The project name can contain only Chinese, letters, number, _ , -';
}
return true;
}
/**
* 创建项目
* @param param
* @param keywords
* @param plugins
* @param cwd
*/
static async createProject(param,
/**
* 要替换的词语
*/
keywords, plugins,
/**
* 项目根目录,默认为 process.cwd()
*/
cwd) {
const {
name,
template
} = param;
const usedCwd = cwd || process.cwd();
// 获取项目名称和绝对路径,如果存在,则再次输入
let projectName = name;
let projectAbsolutePath = _path.default.join(usedCwd, projectName);
while (_fsExtra.default.existsSync(projectAbsolutePath)) {
_sharedUtils.ColorConsole.warn(`${projectAbsolutePath} exists. `);
projectName = await (0, _prompts.input)({
message: 'please new project name',
validate: this.validateProjectName
});
projectAbsolutePath = _path.default.join(usedCwd, projectName);
}
_fsExtra.default.mkdirSync(projectAbsolutePath);
// 复制模板
if (template) {
_sharedUtils.ColorConsole.info('Create project start ...');
const {
path
} = template;
// 远程
if (['http', 'git'].find(item => path.startsWith(item))) {
await _sharedUtils.NetworkUtil.gitClone(path, projectAbsolutePath);
}
//本地
else {
const templateAbsolutePath = _path.default.join(__dirname, '../template/', path);
_fsExtra.default.copySync(templateAbsolutePath, projectAbsolutePath);
// 修改_gitignore为.gitignore
TemplateUtil.changeFileName(projectAbsolutePath);
}
}
// 遍历项目文件,替换词语
if (keywords && keywords.data) {
// ux项目,添加toolkitVersion
keywords['data']['toolkitVersion'] = require('../../package.json').version;
_Common.default.performReplace(keywords, projectAbsolutePath);
}
// 执行插件
if (plugins) {
for (let item of plugins) {
await item(projectAbsolutePath, param);
}
}
_sharedUtils.ColorConsole.success(`Create project finish. project path: ${projectAbsolutePath}`);
}
/**
* 修改_gitignore为.gitignore
*/
static changeFileName(projectAbsolutePath) {
const oldPath = _path.default.join(projectAbsolutePath, '_gitignore');
const newPath = _path.default.join(projectAbsolutePath, '.gitignore');
_fsExtra.default.renameSync(oldPath, newPath);
}
}
var _default = exports.default = TemplateUtil;