UNPKG

2.61 kBJavaScriptView Raw
1#!/usr/bin/env node
2var os = require('os'),
3 opener = require('opener'),
4 portfinder = require('portfinder'),
5 httpServer = require('../lib/http-server/index'),
6 logger = require('../lib/util/logger'),
7 argv = require('../lib/http-server/cmd').argv;
8
9if (!argv['port'] || argv['port'] == 8080) {
10 portfinder.basePort = 8080;
11 //基于8080找一个可用的端口.
12 portfinder.getPort(function (err, port) {
13 if (err) {
14 throw err;
15 } else {
16 listen(port);
17 }
18 });
19} else {
20 listen(argv['port']);
21}
22
23function listen(port) {
24 var server = httpServer.createServer({
25 root: argv['root'],
26 proxy: argv['proxy'],
27 ssl: argv['ssl'],
28 php: argv['php']
29 });
30
31 server.listen(port, argv['host'], function () {
32 var canonicalHost = argv['host'] === '0.0.0.0' ? '127.0.0.1' : argv['host']; //若host是域名形式,则必须在系统host文件中指向127.0.0.1
33 var protocol = argv['ssl'] ? 'https://' : 'http://';
34
35 //打印 http server 启动消息
36 logger.info([
37 'Starting up http-server, serving '.yellow,
38 server.root.cyan,
39 argv['ssl'] ? (' through'.yellow + ' https'.cyan) : '',
40 '\nAvailable on:'.yellow
41 ].join(''));
42
43 //打印可用 url
44 if (argv['host'] !== '0.0.0.0') {
45 logger.info((protocol + canonicalHost + ':' + port.toString()).green);
46 } else {
47 var ifaces = os.networkInterfaces();
48 Object.keys(ifaces).forEach(function (dev) {
49 ifaces[dev].forEach(function (details) {
50 if (details.family === 'IPv4') {
51 logger.info((protocol + details.address + ':' + port.toString()).green);
52 }
53 })
54 })
55 }
56
57 //启用代理
58 if (argv['proxy'] && typeof argv['proxy'] === 'string') {
59 logger.info('Unhandled requests will be served from: ' + argv['proxy']);
60 }
61
62 logger.info('Hit CTRL-C to stop the server');
63
64 //自动在浏览器中打开首页地址
65 if(argv.o) {
66 opener(
67 protocol + '//' + canonicalHost + ':' + port,
68 {
69 command: argv.o !== true ? argv.o : null
70 }
71 )
72 }
73 })
74}
75
76if (process.platform === 'win32') {
77 require('readline').createInterface({
78 input: process.stdin,
79 output: process.stdout
80 }).on('SIGINT', function () {
81 process.emit('SIGINT')
82 })
83}
84
85process.on('SIGINT', function () {
86 logger.info('http-server stopped.'.red)
87 process.exit()
88})
89
90process.on('SIGTERM', function () {
91 logger.info('http-server stopped.'.red)
92 process.exit()
93})