@@ -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- / ^ \/ a p i \/ ( .* ) / ,
101- / \. j s ( \? .* ) ? $ / , / \. c s s ( \? .* ) ? $ / , / \. s v g ( \? .* ) ? $ / , / \. i c o ( \? .* ) ? $ / , / \. w o f f ( \? .* ) ? $ / ,
102- / \. p n g ( \? .* ) ? $ / , / \. j p g ( \? .* ) ? $ / , / \. j p e g ( \? .* ) ? $ / , / \. g i f ( \? .* ) ? $ / , / \. p d f ( \? .* ) ? $ /
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