UNPKG

@sanpjs/sanp

Version:

sanp

131 lines 4.55 kB
#!/usr/bin/env node "use strict"; 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