UNPKG

create-aiot

Version:

An easy way to start aiot project

123 lines (117 loc) 3.76 kB
"use strict"; 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;