11var browserify = require ( 'browserify' ) ;
22var watchify = require ( 'watchify' ) ;
3- var prettyTime = require ( 'pretty-hrtime' ) ;
43var source = require ( 'vinyl-source-stream' ) ;
54var gulp = require ( 'gulp' ) ;
65var gutil = require ( 'gulp-util' ) ;
76var less = require ( 'gulp-less' ) ;
87var jade = require ( 'gulp-jade' ) ;
9-
108var sourcemaps = require ( 'gulp-sourcemaps' ) ;
11-
12- var clui = require ( 'clui' ) ;
9+ var buffer = require ( 'vinyl-buffer' ) ;
1310var merge = require ( 'merge-stream' ) ;
1411var shell = require ( 'gulp-shell' ) ;
1512var path = require ( 'path' ) ;
@@ -26,7 +23,7 @@ gulp.task('build:electron-installer', ['build:electron'], platform.installer);
2623var BUILD = 'build/' ;
2724
2825// `npm start` calls this.
29- gulp . task ( 'start' , [ 'build:app' , 'build:electron' ] , function ( ) {
26+ gulp . task ( 'start' , [ 'build:app' ] , function ( ) {
3027 platform . start ( ) ;
3128 return gulp . start ( 'watch' ) ;
3229} ) ;
@@ -36,70 +33,74 @@ gulp.task('build:release', function() {
3633 return gulp . start ( 'build:app-release' ) ;
3734} ) ;
3835
39- gulp . task ( 'build:app' , [ 'pages' , 'less' , 'js' , 'copy' , 'build:npm-install' ] , function ( ) { } ) ;
40- gulp . task ( 'build:app-release' , [ 'pages' , 'less' , 'js' , 'copy' , 'build:npm-install-release' ] , function ( ) {
36+ gulp . task ( 'build:app' , [
37+ 'build:electron' ,
38+ 'pages' ,
39+ 'less' ,
40+ 'copy:fonts' ,
41+ 'copy:images' ,
42+ 'copy:electron' ,
43+ 'js:watch'
44+ ] , function ( ) {
45+ // deletes the `app` folder in electron build
46+ // so `platform:start` can just point the electron renderer at `BUILD`
47+ // and we don't have to do all kinds of crazy copying.
48+ process . env . WATCH_DIRECTORY = path . resolve ( __dirname , BUILD ) ;
49+ return del ( platform . BUILD ) ;
50+ } ) ;
51+ gulp . task ( 'build:app-release' , [
52+ 'build:electron' ,
53+ 'pages' ,
54+ 'less' ,
55+ 'copy:fonts' ,
56+ 'copy:images' ,
57+ 'copy:electron'
58+ ] , function ( ) {
4159 return gulp . start ( 'build:electron-installer' ) ;
4260} ) ;
4361
44- // @todo : sourcemaps https://github.com/gulpjs/gulp/blob/master/docs/recipes/fast-browserify-builds-with-watchify.md
45- gulp . task ( 'js' , function ( ) {
46- return browserify ( './src/index.js' , {
47- cache : { } ,
48- packageCache : { } ,
49- fullPaths : true ,
50- debug : false
51- } )
52- . transform ( 'jadeify' )
53- . bundle ( )
62+ var bundler = browserify ( pkg . browserify ) . transform ( 'jadeify' ) ;
63+
64+ gulp . task ( 'js' , [ 'build:npm-install-release' ] , function ( ) {
65+ return bundler . bundle ( )
5466 . on ( 'error' , notify ( 'js' ) )
5567 . pipe ( source ( 'index.js' ) )
68+ . pipe ( buffer ( ) )
69+ . pipe ( sourcemaps . init ( {
70+ loadMaps : true
71+ } ) )
72+ . pipe ( sourcemaps . write ( './' ) )
5673 . pipe ( gulp . dest ( BUILD ) ) ;
5774} ) ;
5875
59- gulp . task ( 'watch' , [ 'build:app' ] , function ( ) {
76+ gulp . task ( 'watch' , function ( ) {
6077 gulp . watch ( [ 'src/{*,**/*}.less' , 'styles/*.less' ] , [ 'less' ] ) ;
6178 gulp . watch ( [ 'src/*.jade' ] , [ 'pages' ] ) ;
62- gulp . watch ( 'images/{*,**/*}' , [ 'copy images' ] ) ;
63- gulp . watch ( 'fonts/*' , [ 'copy fonts' ] ) ;
79+ gulp . watch ( 'images/{*,**/*}' , [ 'copy: images' ] ) ;
80+ gulp . watch ( 'fonts/*' , [ 'copy: fonts' ] ) ;
6481 gulp . watch ( [ 'main.js' , 'src/electron/*' ] , [ 'copy:electron' ] ) ;
6582 gulp . watch ( 'package.json' , [ 'copy:electron' , 'build:npm-install' ] ) ;
83+ } ) ;
6684
67- var spinner = new clui . Spinner ( 'Watching for changes...' ) ;
68-
85+ gulp . task ( 'js:watch' , [ 'build:npm-install' ] , function ( ) {
6986 /**
7087 * Gulp's [fast browserify builds recipe](http://git.io/iiCk-A)
7188 */
72- var bundler = watchify ( browserify ( './src/index.js' , {
73- cache : { } ,
74- packageCache : { } ,
75- fullPaths : true ,
76- debug : false
77- } ) )
78- . transform ( 'jadeify' )
79- . on ( 'update' , rebundle ) ;
80- var started = false ;
81-
82- function rebundle ( changed ) {
83- var start = process . hrtime ( ) ;
84- if ( changed ) {
85- spinner . stop ( ) ;
86- gutil . log ( 'Changed' , '\'' + gutil . colors . cyan ( changed [ 1 ] ) + '\'' ) ;
89+ var b ;
90+ function rebundle ( files ) {
91+ if ( files ) {
92+ gutil . log ( 'Changed' , '\'' + gutil . colors . cyan ( files ) + '\'' ) ;
8793 gutil . log ( 'Starting' , '\'' + gutil . colors . cyan ( 'rebundle' ) + '\'...' ) ;
8894 }
89- return bundler . bundle ( )
95+ return b . bundle ( )
9096 . on ( 'error' , notify ( 'js' ) )
9197 . pipe ( source ( 'index.js' ) )
9298 . pipe ( gulp . dest ( BUILD ) )
9399 . on ( 'end' , function ( ) {
94- var time = prettyTime ( process . hrtime ( start ) ) ;
95- gutil . log ( 'Finished' , '\'' + gutil . colors . cyan ( 'rebundle' ) + '\'' ,
96- 'after' , gutil . colors . magenta ( time ) ) ;
97- spinner . start ( ) ;
98- if ( ! started ) {
99- started = true ;
100- }
100+ gutil . log ( 'Finished' , '\'' + gutil . colors . cyan ( 'rebundle' ) + '\'...' ) ;
101101 } ) ;
102102 }
103+ b = watchify ( bundler ) . on ( 'update' , rebundle ) ;
103104 return rebundle ( ) ;
104105} ) ;
105106
@@ -122,12 +123,6 @@ gulp.task('pages', function() {
122123} ) ;
123124
124125// Things that should be copied into `BUILD`.
125- gulp . task ( 'copy' , [
126- 'copy:fonts' ,
127- 'copy:images' ,
128- 'copy:electron'
129- ] ) ;
130-
131126gulp . task ( 'copy:fonts' , function ( ) {
132127 return gulp . src ( pkg . fonts )
133128 . pipe ( gulp . dest ( path . join ( BUILD , 'fonts' ) ) ) ;
0 commit comments