@@ -25,6 +25,9 @@ var MongoStore = connectMongo(session);<% } else if(filters.sequelize) { %>
2525import sqldb from '../sqldb';
2626import expressSequelizeSession from 'express-sequelize-session';
2727var Store = expressSequelizeSession(session.Store);<% } %>
28+ import stripAnsi from 'strip-ansi';
29+
30+ var browserSync = require('browser-sync').create();
2831
2932export default function(app) {
3033 var env = app.get('env');
@@ -93,52 +96,43 @@ export default function(app) {
9396 const webpackConfig = makeWebpackConfig({ DEV: true });
9497 const compiler = webpack(webpackConfig);
9598
96- const pkgConfig = require('../../package.json');
97- const livereloadServer = require('tiny-lr')();
98- var livereloadServerConfig = {
99- ignore: [
100- /^\/api\/(.*)/,
101- /\.js(\?.*)?$/, /\.css(\?.*)?$/, /\.svg(\?.*)?$/, /\.ico(\?.*)?$/, /\.woff(\?.*)?$/,
102- /\.png(\?.*)?$/, /\.jpg(\?.*)?$/, /\.jpeg(\?.*)?$/, /\.gif(\?.*)?$/, /\.pdf(\?.*)?$/
103- ],
104- port: (pkgConfig.livereload || {}).port
105- };
106- var triggerLiveReloadChanges = function() {
107- livereloadServer.changed({
108- body: {
109- files: [webpackConfig.output.path + webpackConfig.output.filename]
110- }
111- });
112- };
113- if(livereloadServerConfig.port) {
114- livereloadServer.listen(livereloadServerConfig.port, triggerLiveReloadChanges);
115- } else {
116- /**
117- * Get free port for livereload
118- * server
119- */
120- livereloadServerConfig.port = require('http').createServer().listen(function() {
121- /*eslint no-invalid-this:0*/
122- this.close();
123- livereloadServer.listen(livereloadServerConfig.port, triggerLiveReloadChanges);
124- }).address().port;
125- }
126-
12799 /**
128- * On change compilation of bundle
129- * trigger livereload change event
100+ * Run Browsersync and use middleware for Hot Module Replacement
130101 */
131- compiler.plugin('done', triggerLiveReloadChanges);
132-
133- app.use(webpackDevMiddleware(compiler, {
134- stats: {
135- colors: true,
136- timings: true,
137- chunks: false
138- }
139- }));
102+ browserSync.init({
103+ open: false,
104+ logFileChanges: false,
105+ proxy: 'localhost:' + config.port,
106+ ws: true,
107+ middleware: [
108+ webpackDevMiddleware(compiler, {
109+ noInfo: false,
110+ stats: {
111+ colors: true,
112+ timings: true,
113+ chunks: false
114+ }
115+ })
116+ ],
117+ port: config.browserSyncPort,
118+ plugins: ['bs-fullscreen-message']
119+ });
140120
141- app.use(require('connect-livereload')(livereloadServerConfig));
121+ /**
122+ * Reload all devices when bundle is complete
123+ * or send a fullscreen error message to the browser instead
124+ */
125+ compiler.plugin('done', function (stats) {
126+ console.log('webpack done hook');
127+ if (stats.hasErrors() || stats.hasWarnings()) {
128+ return browserSync.sockets.emit('fullscreen:message', {
129+ title: "Webpack Error:",
130+ body: stripAnsi(stats.toString()),
131+ timeout: 100000
132+ });
133+ }
134+ browserSync.reload();
135+ });
142136 }
143137
144138 if ('development' === env || 'test' === env) {
0 commit comments