UNPKG

1.6 kBJavaScriptView Raw
1#!/usr/bin/env node
2const detect = require('detect-port');
3const inquirer = require('inquirer');
4const parse = require('yargs-parser');
5const start = require('../lib/commands/start');
6const log = require('../lib/utils/log');
7
8const rawArgv = parse(process.argv.slice(2), {
9 configuration: { 'strip-dashed': true },
10});
11
12const DEFAULT_PORT = rawArgv.port || process.env.PORT;
13/**
14 * 禁止询问:端口占用时不提示,直接使用其他可用端口
15 */
16const DISABLE_ASK = !!rawArgv.disableAsk || !!process.env.DISABLE_ASK || false;
17if (DEFAULT_PORT) {
18 process.env.USE_CLI_PORT = true;
19}
20const defaultPort = parseInt(DEFAULT_PORT || 3333, 10);
21
22(async () => {
23 let newPort = await detect(defaultPort);
24 if (newPort !== defaultPort && !DISABLE_ASK) {
25 const question = {
26 type: 'confirm',
27 name: 'shouldChangePort',
28 message: `${defaultPort} 端口已被占用,是否使用 ${newPort} 端口启动?`,
29 default: true,
30 };
31 const answer = await inquirer.prompt(question);
32 if (!answer.shouldChangePort) {
33 newPort = null;
34 }
35 }
36 if (newPort === null) {
37 process.exit(1);
38 }
39
40 process.env.NODE_ENV = 'development';
41 rawArgv.port = parseInt(newPort, 10);
42
43 // ignore _ in rawArgv
44 delete rawArgv._;
45 try {
46 const devServer = await start({
47 args: { ...rawArgv },
48 });
49
50 ['SIGINT', 'SIGTERM'].forEach(function(sig) {
51 process.on(sig, function() {
52 devServer.close();
53 process.exit(0);
54 });
55 });
56 } catch (err) {
57 log.error(err.message);
58 console.error(err);
59 process.exit(1);
60 }
61})();