UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

124 lines (123 loc) 5.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var boxen_1 = tslib_1.__importDefault(require("boxen")); var fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); var chalk_1 = tslib_1.__importDefault(require("chalk")); var path_1 = tslib_1.__importDefault(require("path")); var ora_1 = tslib_1.__importDefault(require("ora")); var upgrade_1 = require("../services/upgrade"); var paths_1 = tslib_1.__importDefault(require("../paths")); var utils_1 = require("../utils"); var Weekly = 7 * 24 * 3600 * 1000; var spinner = ora_1.default(); /** * 判断是否是全局模式调用命令 */ function isGlobalMode() { // 在当前项目node_modules下 return !paths_1.default.ownPath.startsWith(paths_1.default.appPath); } function checkGlobalUpdate(useYarn, pkg) { spinner.text = 'Checking for update...'; spinner.start(); var list = useYarn ? upgrade_1.getYarnGlobalInstallPackages() : upgrade_1.getNpmGlobalInstallPackages(); var name = pkg.name, version = pkg.version; if (!(name in list) || list[name] !== version) { // 检查是否安装在其他模块管理器 list = useYarn ? upgrade_1.getNpmGlobalInstallPackages() : upgrade_1.getYarnGlobalInstallPackages(); if (!(name in list)) { return; } useYarn = !useYarn; } // 全局模式检查是否有最新版本 var _a = upgrade_1.getUpgradableVersion(name, version, 'major'), upgradable = _a[1], newMaxVersion = _a[2]; spinner.stop(); if (upgradable) { showUpdateInfo(useYarn, name, version, newMaxVersion); } } function showUpdateInfo(useYarn, name, version, newVersion) { // 输出提醒 var message = "Update available " + chalk_1.default.dim(version) + " " + chalk_1.default.reset(' → ') + " " + chalk_1.default.green(newVersion) + " \n Run " + chalk_1.default.cyan(useYarn ? "yarn global upgrade " + name : "npm i -g " + name) + " to update"; console.log('\n', boxen_1.default(message, { padding: 1, margin: 1, align: 'center', borderColor: 'yellow', borderStyle: 'round', }), '\n'); } function checkLocalUpdate(useYarn, pkg) { return tslib_1.__awaiter(this, void 0, void 0, function () { var name, version, _a, upgradable, newMaxVersion; return tslib_1.__generator(this, function (_b) { spinner.text = 'Checking for update...'; spinner.start(); name = pkg.name, version = pkg.version; _a = upgrade_1.getUpgradableVersion(name, version, 'minor'), upgradable = _a[1], newMaxVersion = _a[2]; if (upgradable) { showUpdateInfo(useYarn, name, version, newMaxVersion); } return [2 /*return*/]; }); }); } function checkUpdate() { return tslib_1.__awaiter(this, void 0, void 0, function () { var lastUpdatePath, lastUpdate, globalModel, useYarn, pkg; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: lastUpdatePath = path_1.default.join(paths_1.default.ownData, 'lastupdate'); return [4 /*yield*/, fs_extra_1.default.ensureDir(paths_1.default.ownData) // 首次安装,暂不需要检查 ]; case 1: _a.sent(); // 首次安装,暂不需要检查 if (!fs_extra_1.default.existsSync(lastUpdatePath)) { fs_extra_1.default.writeJSON(lastUpdatePath, Date.now()); return [2 /*return*/]; } return [4 /*yield*/, fs_extra_1.default.readJSON(lastUpdatePath)]; case 2: lastUpdate = (_a.sent()); if (Date.now() - lastUpdate < Weekly) { return [2 /*return*/]; } globalModel = isGlobalMode(); useYarn = utils_1.shouldUseYarn(); pkg = fs_extra_1.default.readJsonSync(paths_1.default.ownPackageJson); _a.label = 3; case 3: _a.trys.push([3, , 7, 8]); if (!globalModel) return [3 /*break*/, 4]; checkGlobalUpdate(useYarn, pkg); return [3 /*break*/, 6]; case 4: return [4 /*yield*/, checkLocalUpdate(useYarn, pkg)]; case 5: _a.sent(); _a.label = 6; case 6: return [3 /*break*/, 8]; case 7: // save lastUpdate fs_extra_1.default.writeJSONSync(lastUpdatePath, Date.now()); spinner.stop(); return [7 /*endfinally*/]; case 8: return [2 /*return*/]; } }); }); } exports.default = (function (argv) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { if (utils_1.IS_CI) { return [2 /*return*/]; } // 异步检查,不影响主流程 checkUpdate(); return [2 /*return*/]; }); }); });