@@ -8,56 +8,63 @@ var through = require('through');
88var gutil = require ( 'gulp-util' ) ;
99var plugins = gulpLoadPlugins ( ) ;
1010var path = require ( 'path' ) ;
11+ var webpack = require ( 'webpack-stream' ) ;
12+ var webpackConfig = require ( '../webpack.config' ) ;
13+ var plumber = require ( 'gulp-plumber' ) ;
14+
1115var paths = {
1216 js : [ './*.js' , 'config/**/*.js' , 'gulp/**/*.js' , 'tools/**/*.js' , 'packages/**/*.js' , '!packages/**/node_modules/**' , '!packages/**/assets/**/lib/**' , '!packages/**/assets/**/js/**' ] ,
1317 html : [ 'packages/**/*.html' , '!packages/**/node_modules/**' , '!packages/**/assets/**/lib/**' ] ,
14- css : [ 'packages/**/*.css' , '!packages/**/node_modules/**' , '!packages/**/assets/**/lib/**' ] ,
15- less : [ 'packages/**/*.less' , '!packages/**/_*.less' , '!packages/**/node_modules/**' , '!packages/**/assets/**/lib/**' ] ,
16- sass : [ 'packages/**/*.scss' , '!packages/**/node_modules/**' , '!packages/**/assets/**/lib/**' ]
18+ css : [ 'packages/**/*.css' , '!packages/**/node_modules/**' , '!packages/**/assets/**/lib/**' ]
1719} ;
18- var webpack = require ( 'webpack' ) ;
19- var webpackConfig = require ( '../webpack.config.js' ) ;
2020
21- /** General watch/restart flow **/
22- // .less / .scss files are watched by less/sass and produce .css files
23- // .js / .css files are watched by nodemon, invoke webpack,csslint, and jshint as needed before restarting and invoking livereload after
24- // .html files are watched by livereload explicitly
21+ /**
22+ *
23+ * General watch/restart flow
24+ *
25+ * .js / .css files are watched by nodemon, invoke csslint, and jshint as needed before restarting and invoking livereload after
26+ * .html files are watched by livereload explicitly
27+ * app.js and dependencies watched by webpack
28+ *
29+ */
2530
2631var startupTasks = [ 'devServe' ] ;
32+ var devServeTasks = [ 'env:development' , 'jshint' , 'csslint' , 'watch' ] ;
33+
34+ if ( process . argv . indexOf ( '--wdm' ) === - 1 ) {
35+ devServeTasks . push ( 'webpack' )
36+ }
2737
2838gulp . task ( 'development' , startupTasks ) ;
29- gulp . task ( 'devServe' , [ 'env:development' , 'webpack:build-dev' , 'jshint' , 'csslint' , 'watch' ] , devServeTask ) ;
39+ gulp . task ( 'devServe' , devServeTasks , devServeTask ) ;
3040gulp . task ( 'env:development' , envDevelopmentTask ) ;
31- gulp . task ( 'webpack:build-dev' , [ 'sass' , 'less' ] , webpackBuild ) ;
32- gulp . task ( 'sass' , sassTask ) ;
33- gulp . task ( 'less' , lessTask ) ;
41+ gulp . task ( 'webpack' , webpackTask ) ;
3442gulp . task ( 'jshint' , jshintTask ) ;
3543gulp . task ( 'csslint' , csslintTask ) ;
3644
37- gulp . task ( 'webpack:rebuild-dev' , webpackBuild ) ;
3845gulp . task ( 'watch' , watchTask ) ;
3946gulp . task ( 'livereload' , livereloadTask ) ;
4047
4148////////////////////////////////////////////////////////////////////
4249
43- // modify some webpack config options
44- var devConfig = Object . create ( webpackConfig ) ;
45- devConfig . devtool = 'sourcemap' ;
46- devConfig . debug = true ;
47- // create a single instance of the compiler to allow caching
48- var devCompiler = webpack ( devConfig ) ;
49-
50- function webpackBuild ( callback ) {
51- // run webpack
52- devCompiler . run ( function ( err , stats ) {
53- if ( err ) {
54- throw new gutil . PluginError ( 'webpackBuild' , err ) ;
55- }
56- gutil . log ( 'webpackBuild' , stats . toString ( {
57- colors : true
58- } ) ) ;
59- callback ( )
60- } )
50+ function webpackTask ( callback ) {
51+ var callbackDone = false ;
52+
53+ webpackConfig . watch = true ;
54+ webpackConfig . devtool = 'eval' ;
55+
56+ return gulp . src ( 'app.js' )
57+ . pipe ( plumber ( function ( ) { gutil . log ( '[webpack]' , gutil . colors . red ( 'compiler error' ) ) } ) )
58+ . pipe ( webpack ( webpackConfig ) )
59+ . pipe ( gulp . dest ( 'bundle/' ) )
60+ . on ( 'data' , function ( ) {
61+ if ( ! callbackDone ) {
62+ callbackDone = true ;
63+ callback ( ) ;
64+ } else {
65+ plugins . livereload . reload ( ) ;
66+ }
67+ } ) ;
6168}
6269
6370function jshintTask ( callback ) {
@@ -80,71 +87,57 @@ function csslintTask () {
8087 . pipe ( count ( 'csslint' , 'files lint free' ) ) ;
8188}
8289
83- function lessTask ( ) {
84- return gulp . src ( paths . less )
85- . pipe ( plugins . less ( ) )
86- . pipe ( gulp . dest ( './packages' ) ) ;
87- }
88-
89- function sassTask ( ) {
90- return gulp . src ( paths . sass )
91- . pipe ( plugins . sass ( ) . on ( 'error' , plugins . sass . logError ) )
92- . pipe ( gulp . dest ( './packages' ) ) ;
93- }
94-
9590function devServeTask ( ) {
96- plugins . nodemon ( {
97- script : 'server.js' ,
98- ext : 'js css' ,
99- env : {
100- 'NODE_ENV' : 'development'
101- } ,
102- ignore : [
103- 'node_modules/' ,
104- 'bower_components /',
105- 'bundle/' , // Causes infinite loop since webpack is tasked to run
106- 'logs/' ,
107- 'packages/*/ */public/assets/lib /' ,
108- 'packages/*/*/public/**/*.scss' , // Trigger off resulting css files not before scss finishes
109- 'packages/*/*/public/**/*.less' , // Trigger off resulting css files not before less finishes
110- 'packages/*/*/node_modules/ ',
111- '.DS_Store' , ' **/.DS_Store' ,
112- '.bower-*' ,
113- '**/.bower-*' ,
114- '**/tests'
115- ] ,
116- tasks : function ( changedFiles ) {
117- var tasks = [ ] ;
118- changedFiles . forEach ( function ( file ) {
119- if ( path . extname ( file ) === '.css ' && tasks . indexOf ( 'csslint ' ) === - 1 ) {
120- tasks . push ( 'csslint ' ) ;
121- }
122- if ( path . extname ( file ) === '.js' && tasks . indexOf ( 'jshint' ) === - 1 ) {
123- tasks . push ( 'jshint' ) ;
124- }
125- if ( path . extname ( file ) === '.js' || path . extname ( file ) === '.css' && tasks . indexOf ( 'webpack:rebuild-dev' ) === - 1 ) {
126- tasks . push ( 'webpack:rebuild-dev' ) ;
127- }
128- } ) ;
129- return tasks ;
130- } ,
131- nodeArgs : [ '--debug' ] ,
132- stdout : false
133- } )
91+ var nodemonConfig = {
92+ script : 'server.js' ,
93+ ext : 'js css' ,
94+ env : {
95+ 'NODE_ENV' : 'development' ,
96+ 'DEBUG' : 'cluster'
97+ } ,
98+ ignore : [
99+ 'bundle /',
100+ path . join ( process . cwd ( ) , 'app.js' ) , // handled by webpack
101+ 'logs/' ,
102+ 'packages/**/public/' ,
103+ '.DS_Store' , '**/.DS_Store' ,
104+ '.bower-*' ,
105+ '**/.bower-* ',
106+ ' **/tests'
107+ ] ,
108+ tasks : function ( changedFiles ) {
109+ var tasks = [ ] ;
110+ changedFiles . forEach ( function ( file ) {
111+ if ( path . extname ( file ) === '.css' && tasks . indexOf ( 'csslint' ) === - 1 ) {
112+ tasks . push ( 'csslint' ) ;
113+ }
114+ if ( path . extname ( file ) === '.js ' && tasks . indexOf ( 'jshint ' ) === - 1 ) {
115+ tasks . push ( 'jshint ' ) ;
116+ }
117+ } ) ;
118+ return tasks ;
119+ } ,
120+ nodeArgs : [ '--debug' ] ,
121+ args : [ ] ,
122+ stdout : false ,
123+ delay : 500
124+ } ;
125+ if ( process . argv . indexOf ( '--wdm' ) !== - 1 ) {
126+ nodemonConfig . args . push ( '--wdm' )
127+ }
128+ plugins . nodemon ( nodemonConfig )
134129 . on ( 'readable' , function ( ) {
135- this . stdout . on ( 'data' , function ( chunk ) {
136- if ( / M e a n a p p s t a r t e d / . test ( chunk ) ) {
130+ this . stderr . on ( 'data' , function ( chunk ) {
131+ if ( / M E A N a p p s t a r t e d / . test ( chunk ) ) {
137132 setTimeout ( function ( ) {
138133 plugins . livereload . reload ( ) ;
139134 } , 500 )
140135 }
141- process . stdout . write ( chunk )
136+ process . stderr . write ( chunk )
142137 } ) ;
143- this . stderr . pipe ( process . stderr )
138+ this . stdout . pipe ( process . stdout )
144139 } )
145- . on ( 'restart' , function ( ) {
146- plugins . livereload . reload ( ) ;
147- } ) ;
140+ . on ( 'restart' , function ( changed ) { console . log ( changed ) } ) ;
148141}
149142
150143function watchTask ( callback ) {
@@ -153,8 +146,6 @@ function watchTask (callback) {
153146 } ) ;
154147
155148 gulp . watch ( paths . html , [ 'livereload' ] ) ;
156- gulp . watch ( paths . less , [ 'less' ] ) ;
157- gulp . watch ( paths . sass , [ 'sass' ] ) ;
158149 callback ( ) ;
159150}
160151
0 commit comments