UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

113 lines (112 loc) 4.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); var os_1 = tslib_1.__importDefault(require("os")); var path_1 = tslib_1.__importDefault(require("path")); var chalk_1 = tslib_1.__importDefault(require("chalk")); var child_process_1 = require("child_process"); var tar_1 = tslib_1.__importDefault(require("tar")); var utils_1 = require("../../utils"); function getInstallPackage(templateName, cwd) { if (templateName && templateName.match(/^file:/)) { return "file:" + path_1.default.resolve(cwd, templateName.match(/^file:(.*)?$/)[1]); } return templateName; } function tryPack(templateName) { var cmd = "npm pack " + templateName + " --dry-run --json"; try { var res = child_process_1.execSync(cmd, { stdio: ['ignore', 'pipe', 'ignore'] }); return res.toString().trim(); } catch (err) { handleError(err); } } function handleError(err) { if (err.stdout) { try { var msg = JSON.parse(err.stdout.toString()); utils_1.message.error("Failed to download template:\n " + chalk_1.default.reset(msg.error.summary)); } catch (_a) { utils_1.message.error("Failed to download template:"); console.log(err); } } else { utils_1.message.error("Failed to download template:"); console.log(err); } process.exit(1); } function extraPack(packName, target) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { fs_extra_1.default.ensureDirSync(target); return [2 /*return*/, tar_1.default.x({ file: packName, C: target, })]; }); }); } function getAbsolutePath(base) { return path_1.default.resolve(path_1.default.join(base, 'package')); } /** * 获取和下载自定义模板 */ function getTemplate(force, ownPath, cwd, templateName) { return tslib_1.__awaiter(this, void 0, void 0, function () { var tempDir, templateJson, templateJsonExisted, pkg, packName, cmd, extraPath, err_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (templateName == null) { // default template return [2 /*return*/, path_1.default.join(ownPath, 'template')]; } // install template from npm templateName = getInstallPackage(templateName, cwd); tempDir = path_1.default.join(os_1.default.tmpdir(), '.jm'); fs_extra_1.default.ensureDirSync(tempDir); process.chdir(tempDir); templateJson = path_1.default.join(tempDir, 'template.json'); templateJsonExisted = fs_extra_1.default.existsSync(templateJson); pkg = {}; packName = tryPack(templateName); // 已存在, 不需要重复下载 if (templateJsonExisted) { pkg = fs_extra_1.default.readJsonSync(templateJson); if (!force && templateName in pkg && pkg[templateName].packName === packName) { return [2 /*return*/, getAbsolutePath(pkg[templateName].path)]; } } _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); utils_1.message.info("Downloading template from " + chalk_1.default.cyan(templateName) + "..."); cmd = "npm pack " + templateName + " --json"; child_process_1.execSync(cmd, { stdio: ['ignore', 'ignore', 'inherit'] }); extraPath = path_1.default.basename(packName, path_1.default.extname(packName)); return [4 /*yield*/, extraPack(packName, extraPath)]; case 2: _a.sent(); pkg[templateName] = { packName: packName, path: extraPath, }; utils_1.writeJSON('template.json', pkg); return [2 /*return*/, getAbsolutePath(extraPath)]; case 3: err_1 = _a.sent(); handleError(err_1); return [2 /*return*/, '']; case 4: return [2 /*return*/]; } }); }); } exports.default = getTemplate;