Bones/node_modules/lite-server/lib/lite-server.js

79 lines
2.0 KiB
JavaScript
Raw Normal View History

2017-05-17 13:45:25 -04:00
'use strict';
/**
* lite-server : Simple server for angular/SPA projects
*
* Simply loads some default browser-sync config that apply to SPAs,
* applies custom config overrides from user's own local `bs-config.{js|json}` file,
* and launches browser-sync.
*/
var browserSync = require('browser-sync').create('lite-server');
var path = require('path');
var _ = require('lodash');
var config = require('./config-defaults');
module.exports = function start(opts, cb) {
opts = opts || {};
opts.argv = opts.argv || process.argv;
opts.console = opts.console || console;
cb = cb || function noop() { };
// Load configuration
var argv = require('minimist')(opts.argv.slice(2));
var bsConfigName = argv.c || argv.config || 'bs-config';
// Load optional browser-sync config file from user's project dir
var bsConfigPath = path.resolve(bsConfigName);
var overrides = {};
try {
overrides = require(bsConfigPath);
} catch (err) {
if (err.code && err.code === 'MODULE_NOT_FOUND') {
logMissingConfigFile();
} else {
throw (err);
}
}
// Set optional baseDir
config.server.baseDir = argv.baseDir || config.server.baseDir;
if (typeof overrides === 'function') {
overrides = overrides(browserSync);
}
_.merge(config, overrides);
// Fixes browsersync error when overriding middleware array
if (config.server.middleware) {
config.server.middleware = _.compact(config.server.middleware);
}
logConfig();
// Run browser-sync
browserSync.init(config, cb);
return browserSync;
function logEnabled() {
return config.logLevel !== 'silent';
}
function logConfig() {
if (logEnabled()) {
opts.console.log('** browser-sync config **');
opts.console.log(config);
}
}
function logMissingConfigFile() {
if (logEnabled()) {
opts.console.info(
'Did not detect a `bs-config.json` or `bs-config.js` override file.' +
' Using lite-server defaults...'
);
}
}
};