bm_scaffold_async_router
Version:
本木前端脚手架-异步路由版
93 lines (85 loc) • 2.74 kB
JavaScript
/**
* @Author: songqi
* @Date: 2016-07-12
* @Email: songqi@benmu-health.com
* @Last modified by: songqi
* @Last modified time: 2016-09-18
*/
var fs = require('fs'),
path = require('path'),
http = require('http'),
https = require('https'),
connect = require('connect'),
argv = require('yargs').argv,
serveIndex = require('serve-index'),
print = require('../../utils/print'),
serveStatic = require('serve-static'),
readConfig = require('../../utils/readConfig');
var gulpServer = require('./server/gulpfile'),
proxyMiddleware = require('../middleware/proxy'),
prdToTestMiddleware = require('../middleware/prdToTest')
corsMiddleware = require('../middleware/cors');
var config = {
name: 'server',
explain: '启动服务',
command: 'BM server',
options: [{
keys: ['-h', '--help'],
describe: '查看帮助'
}, {
keys: ['-s', '--ssl'],
describe: 'https ssl 的文件引入'
}]
}
function helpTitle() {
print.title(config)
}
function helpCommand() {
print.command(config)
}
function listenPort(server, port) {
server.on('error', function(e) {
if (e.code === 'EADDRINUSE') {
print.info('[ERROR]: 端口 ' + port + ' 已经被占用, 请关闭占用该端口的程序或者使用其它端口.');
}
if (e.code === 'EACCES') {
print.info('[ERROR]: 权限不足, 请使用sudo执行.');
}
return process.exit(1);
});
server.on('listening', function(e) {
print.log('server 运行成功, 端口为 ' + port);
print.log('按 Ctrl + C 结束进程');
gulpServer.start('dev');
});
return server.listen(port);
}
function run() {
if (argv.h || argv.help) {
helpCommand();
} else {
var serverConfig = readConfig.get('server') || {},
ssl = argv.s || argv.ssl,
app = connect();
app.use(corsMiddleware)
.use(prdToTestMiddleware())
.use(proxyMiddleware())
.use(serveStatic(path.join(process.cwd(), serverConfig.path || '../')))
.use(serveIndex(path.join(process.cwd(), serverConfig.path || '../')));
if (ssl) {
var opts = {
key: fs.readFileSync(path.resolve(process.cwd(), ssl + ".key")),
cert: fs.readFileSync(path.resolve(process.cwd(), ssl + ".crt"))
};
listenPort(https.createServer(opts, app), serverConfig.httpsPort || 443);
} else {
listenPort(http.createServer(app), serverConfig.port || 80);
}
}
}
module.exports = {
run: run,
config: config,
helpTitle: helpTitle,
helpCommand: helpCommand
}