@sanpjs/sanp
Version:
sanp
131 lines • 4.55 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Copyright (c) Baidu Inc. All rights reserved.
*
* This source code is licensed under the MIT license.
* See LICENSE file in the project root for license information.
*
* @file bin 文件入口
* @author ksky521
*/
class ModuleNotFoundError extends Error {
code = 'MODULE_NOT_FOUND';
requireStack;
moduleName;
}
/* eslint-disable no-console */
const update_notifier_1 = __importDefault(require("update-notifier"));
const semver_1 = __importDefault(require("semver"));
const utils_1 = require("@sanpjs/utils");
const { scriptName, engines: { node: requiredNodeVersion }, name: pkgName, version: pkgVersion } = require('../package.json');
const SCOPE_NAME = '@sanpjs';
// 1. set process
setProcess(scriptName);
// 2. 检测 node 版本
checkNodeVersion(requiredNodeVersion, pkgName);
// 3. 执行命令
execCommand();
function execCommand() {
const cmdName = process.argv[2];
if (['-v', '-V', '--version'].includes(cmdName)) {
utils_1.logger.log(pkgVersion);
return;
}
if (['-h', '--help'].includes(cmdName)) {
utils_1.logger.log(`For more information, visit ${utils_1.color.cyan('https://ecomfe.github.io/sanp')}`);
return;
}
if (!cmdName || cmdName.startsWith('-')) {
utils_1.logger.error(`No command is given, you can install any ${utils_1.color.cyan(`${SCOPE_NAME}/cmd-*`)} package to install a command`);
return;
}
try {
// load command
const subCommands = [
`${SCOPE_NAME}/cmd-${cmdName}`,
`sanpjs-cmd-${cmdName}`,
`${SCOPE_NAME}/command-${cmdName}`,
`sanpjs-command-${cmdName}`
];
for (let i = 0, len = subCommands.length; i < len; i++) {
const subPkgName = subCommands[i];
const command = require(subPkgName);
if (command && command.command) {
const { name, version } = require(`${subPkgName}/package.json`);
utils_1.logger.log(`${pkgName}@${pkgVersion}/${name}@${version}`);
// 检查子模块更新情况
upNotifier(version, name);
require('yargs')
.scriptName(scriptName)
.usage('$0 <cmd> [args]')
.command(command)
.help()
.alias('help', 'h')
.alias('version', 'v').argv;
break;
}
}
}
catch (error) {
// console.log(error);
const e = error;
if (e.code === 'MODULE_NOT_FOUND' && e.requireStack && e.requireStack[0] === require.resolve(__filename)) {
// 没找到
utils_1.logger.error(utils_1.color.red(`[${cmdName}] command not found, you may install ${SCOPE_NAME}/cmd-${cmdName}`));
}
else {
utils_1.logger.error(e);
}
process.exit(1);
}
}
function checkNodeVersion(wanted, id) {
if (!semver_1.default.satisfies(process.version, wanted)) {
utils_1.logger.error(
// prettier-ignore
// eslint-disable-next-line
'You are using Node ' + process.version + ', but this version of ' + id +
' requires ' + utils_1.color.yellow('Node ' + wanted) + '.\nPlease upgrade your Node version.');
process.exit(1);
}
}
function upNotifier(version, name) {
let notifier;
if (version && name) {
// 检测版本更新
notifier = (0, update_notifier_1.default)({
pkg: {
name,
version
},
updateCheckInterval: 1000 * 60 * 60 * 24 * 7,
// isGlobal: true,
// updateCheckInterval: 0,
// npm script 也显示
shouldNotifyInNpmScript: true
});
}
['SIGINT', 'SIGTERM'].forEach(signal => {
process.on(signal, () => {
notifier && notifier.notify();
process.exit(0);
});
});
}
function setProcess(scriptName) {
process.title = scriptName;
process.on('uncaughtException', (error) => {
utils_1.logger.error(error);
process.exit(1);
});
process.on('unhandledRejection', (error) => {
utils_1.logger.error(error);
process.exit(1);
});
}
//# sourceMappingURL=index.js.map