1
1
var browserify = require ( 'browserify' ) ;
2
2
var watchify = require ( 'watchify' ) ;
3
- var prettyTime = require ( 'pretty-hrtime' ) ;
4
3
var source = require ( 'vinyl-source-stream' ) ;
5
4
var gulp = require ( 'gulp' ) ;
6
5
var gutil = require ( 'gulp-util' ) ;
7
6
var less = require ( 'gulp-less' ) ;
8
7
var jade = require ( 'gulp-jade' ) ;
9
-
10
8
var sourcemaps = require ( 'gulp-sourcemaps' ) ;
11
-
12
- var clui = require ( 'clui' ) ;
9
+ var buffer = require ( 'vinyl-buffer' ) ;
13
10
var merge = require ( 'merge-stream' ) ;
14
11
var shell = require ( 'gulp-shell' ) ;
15
12
var path = require ( 'path' ) ;
@@ -26,7 +23,7 @@ gulp.task('build:electron-installer', ['build:electron'], platform.installer);
26
23
var BUILD = 'build/' ;
27
24
28
25
// `npm start` calls this.
29
- gulp . task ( 'start' , [ 'build:app' , 'build:electron' ] , function ( ) {
26
+ gulp . task ( 'start' , [ 'build:app' ] , function ( ) {
30
27
platform . start ( ) ;
31
28
return gulp . start ( 'watch' ) ;
32
29
} ) ;
@@ -36,70 +33,74 @@ gulp.task('build:release', function() {
36
33
return gulp . start ( 'build:app-release' ) ;
37
34
} ) ;
38
35
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 ( ) {
41
59
return gulp . start ( 'build:electron-installer' ) ;
42
60
} ) ;
43
61
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 ( )
54
66
. on ( 'error' , notify ( 'js' ) )
55
67
. pipe ( source ( 'index.js' ) )
68
+ . pipe ( buffer ( ) )
69
+ . pipe ( sourcemaps . init ( {
70
+ loadMaps : true
71
+ } ) )
72
+ . pipe ( sourcemaps . write ( './' ) )
56
73
. pipe ( gulp . dest ( BUILD ) ) ;
57
74
} ) ;
58
75
59
- gulp . task ( 'watch' , [ 'build:app' ] , function ( ) {
76
+ gulp . task ( 'watch' , function ( ) {
60
77
gulp . watch ( [ 'src/{*,**/*}.less' , 'styles/*.less' ] , [ 'less' ] ) ;
61
78
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' ] ) ;
64
81
gulp . watch ( [ 'main.js' , 'src/electron/*' ] , [ 'copy:electron' ] ) ;
65
82
gulp . watch ( 'package.json' , [ 'copy:electron' , 'build:npm-install' ] ) ;
83
+ } ) ;
66
84
67
- var spinner = new clui . Spinner ( 'Watching for changes...' ) ;
68
-
85
+ gulp . task ( 'js:watch' , [ 'build:npm-install' ] , function ( ) {
69
86
/**
70
87
* Gulp's [fast browserify builds recipe](http://git.io/iiCk-A)
71
88
*/
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 ) + '\'' ) ;
87
93
gutil . log ( 'Starting' , '\'' + gutil . colors . cyan ( 'rebundle' ) + '\'...' ) ;
88
94
}
89
- return bundler . bundle ( )
95
+ return b . bundle ( )
90
96
. on ( 'error' , notify ( 'js' ) )
91
97
. pipe ( source ( 'index.js' ) )
92
98
. pipe ( gulp . dest ( BUILD ) )
93
99
. 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' ) + '\'...' ) ;
101
101
} ) ;
102
102
}
103
+ b = watchify ( bundler ) . on ( 'update' , rebundle ) ;
103
104
return rebundle ( ) ;
104
105
} ) ;
105
106
@@ -122,12 +123,6 @@ gulp.task('pages', function() {
122
123
} ) ;
123
124
124
125
// Things that should be copied into `BUILD`.
125
- gulp . task ( 'copy' , [
126
- 'copy:fonts' ,
127
- 'copy:images' ,
128
- 'copy:electron'
129
- ] ) ;
130
-
131
126
gulp . task ( 'copy:fonts' , function ( ) {
132
127
return gulp . src ( pkg . fonts )
133
128
. pipe ( gulp . dest ( path . join ( BUILD , 'fonts' ) ) ) ;
0 commit comments