79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
|
'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...'
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|