@gdjiami/cli
Version:
CLI for build front end project.
124 lines (123 loc) • 5.45 kB
JavaScript
;
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*/];
});
}); });