pandora
Version:
A powerful and lightweight application manager for Node.js applications powered by TypeScript.
81 lines (67 loc) • 2.2 kB
JavaScript
;
const path = require('path');
const PANDORA_LIB_HOME = path.join(__dirname, '../dist');
const {consoleLogger} = require(path.join(PANDORA_LIB_HOME, 'universal/LoggerBroker'));
const {calcAppName, attachEntryParams} = require(path.join(PANDORA_LIB_HOME, 'universal/Helpers'));
const cliUtils = require('./util/cliUtils');
exports.command = 'start [targetPath]';
exports.desc = 'Start an application';
exports.builder = (yargs) => {
yargs.option('name', {
alias: 'n',
describe: 'App name, it will get a name from the <targetPath> by default'
});
yargs.option('env', {
alias: 'E',
describe: 'Environment Variables, such as --env="A=1 B=2"'
});
yargs.option('argv', {
alias: 'A',
describe: 'Node.js argv, such as --argv="--expose-gc --max_old_space_size=500"'
});
yargs.option('npm', {
describe: 'Find the Application by require.resolve()',
boolean: true
});
};
/**
* start an app
* @param argv
*/
exports.handler = function (argv) {
if(argv.npm) {
if(!argv.targetPath) {
console.error('[targetPath] is required when --npm flag enabled');
process.exit(1);
return;
}
if(!argv.name) {
console.error('option --name is required when --npm flag enabled');
process.exit(1);
return;
}
const resolveTarget = cliUtils.dirnameUntilPkgJson(require.resolve(argv.targetPath));
if(!resolveTarget) {
console.error('Can\'t found ' + argv.targetPath + ' from ' + __dirname);
}
console.log('Resolve ' + argv.targetPath + ' to ' + resolveTarget);
argv.targetPath = resolveTarget;
}
argv.entry = argv.targetPath;
const sendParams = attachEntryParams('start', argv, {
mode: 'procfile.js',
appName: calcAppName(process.cwd())
});
cliUtils.preCheck(sendParams.entry, sendParams.appName);
const send = require(path.join(PANDORA_LIB_HOME, 'daemon/DaemonHandler')).send;
consoleLogger.info('Starting ' + sendParams.appName + ' at ' + sendParams.appDir);
send('start', sendParams, (err, data) => {
if (err) {
consoleLogger.error(err);
process.exit(1);
return;
}
consoleLogger.info(data);
process.exit(0);
});
};