1
1
require ! \browserify
2
- # require! \./config
2
+ require ! \browserify - shim
3
3
require ! \fs
4
4
require ! \gulp
5
5
require ! \gulp -connect
@@ -10,69 +10,107 @@ require! \gulp-stylus
10
10
require ! \gulp -uglify
11
11
require ! \gulp -util
12
12
require ! \nib
13
- {basename , dirname , extname } = require \path
13
+ require ! \run -sequence
14
+ {once } = require \underscore
14
15
source = require \vinyl -source -stream
15
16
require ! \watchify
16
17
17
18
config =
18
19
minify : process .env.MINIFY == \true
19
20
20
- create -bundler = (entries ) ->
21
- bundler = browserify {} <<< watchify .args <<< {debug : config .minify, paths : <[./src ./public /components ]>}
21
+ # build public/components/App.styl which requires other styl files
22
+ gulp .task \build :examples :styles , ->
23
+ gulp .src <[./public /components /App .styl]>
24
+ .pipe gulp -stylus {use : nib !, import : <[nib ]>, compress : config .minify, "include css" : true }
25
+ .pipe gulp .dest './public/components'
26
+ .pipe gulp -connect .reload!
27
+
28
+ # watch all the style files both in public/components directory & themes directory
29
+ gulp .task \watch :examples :styles , ->
30
+ gulp .watch <[./public /components /*.styl ./themes/*.styl]>, <[build:examples:styles]>
31
+
32
+ # create a browserify Bundler
33
+ # create-bundler :: [String] -> object -> Bundler
34
+ create-bundler = (entries, extras) ->
35
+ bundler = browserify {} <<< watchify.args <<< extras <<< {paths: <[./src ./public/components]>}
22
36
..add entries
23
37
..transform \liveify
24
38
..transform \brfs
25
- watchify bundler
26
39
27
- bundle = (bundler , {file , directory }:output ) ->
40
+ # outputs a single javascript file (which is bundled and minified - depending on env)
41
+ # bundler :: Bundler -> {file :: String, directory :: String} -> IO()
42
+ bundle = (minify, bundler, {file, directory}:output) ->
28
43
bundler.bundle!
29
- .on \error , -> console .log arguments
44
+ .on \error, -> gulp-util .log arguments
30
45
.pipe source file
31
- .pipe gulp -if config . minify, (gulp -streamify gulp -uglify !)
46
+ .pipe gulp-if minify, (gulp-streamify gulp-uglify!)
32
47
.pipe gulp.dest directory
33
- .pipe gulp -connect .reload!
34
48
35
- ##
36
- # Examples
37
- ##
38
- gulp .task \build :examples :styles , ->
39
- gulp .src <[./public /components /App .styl]>
40
- .pipe gulp -stylus {use : nib !, import : <[nib ]>, compress : config .minify, "include css" : true }
41
- .pipe gulp .dest './public/components'
42
- .pipe gulp -connect .reload!
49
+ # build-and-watch :: Bundler -> {file :: String, directory :: String} -> Boolean -> (() -> ()) -> ()
50
+ build-and-watch = (minify, bundler, {file}:output, done) !->
51
+ # must invoke done only once
52
+ once-done = once done
43
53
44
- gulp .task \watch :examples :styles , ->
45
- gulp .watch <[./public /components /*.styl ./themes/*.styl]>, <[build:examples:styles]>
54
+ watchified-bundler = watchify bundler
55
+
56
+ # build once
57
+ bundle minify, watchified-bundler, output
58
+
59
+ watchified-bundler
60
+ .on \update, ->
61
+ bundle minify, watchified-bundler, output
62
+ .pipe gulp-connect.reload!
46
63
47
- examples-bundler = create-bundler \./public/components/App.ls
48
- bundle-examples = -> bundle examples-bundler, {file: "App.js", directory: "./public/components/"}
64
+ .on \time, (time) ->
65
+ once-done!
66
+ gulp-util.log "#{file} built in #{time / 1000} seconds"
49
67
50
- gulp.task \build:examples:scripts, ->
51
- bundle-examples!
68
+ examples-bundler = create-bundler [\./public/components/App.ls], debug: !config.minify
69
+ app-js = file: \App.js, directory: \./public/components/
52
70
53
- gulp.task \watch:examples:scripts, ->
54
- examples-bundler.on \update, -> bundle-examples!
55
- examples-bundler.on \time, (time) -> gulp-util.log "App.js built in #{time} ms"
71
+ # first, builds public/components/App.ls once, then builds it everytime there is a change
72
+ gulp.task \build-and-watch:examples:scripts, (done) ->
73
+ build-and-watch config.minify, examples-bundler, app-js, done
56
74
57
- ##
58
- # Source
59
- ##
60
75
gulp.task \build:themes, ->
61
76
gulp.src <[./themes/*.styl]>
62
- .pipe gulp-stylus use: nib!, import: <[nib]>, compress: config.minify
63
- .pipe gulp.dest './themes'
77
+ .pipe gulp-stylus {use: nib!, import: <[nib]>, compress: config.minify, "include css": true}
78
+ .pipe gulp.dest \./themes
79
+ .pipe gulp-connect.reload!
64
80
65
81
gulp.task \watch:themes, ->
66
82
gulp.watch <[./themes/*.styl]>, <[build:themes]>
67
83
68
84
gulp.task \build:src:scripts, ->
69
85
gulp.src <[./src/*.ls]>
70
86
.pipe gulp-livescript!
71
- .pipe gulp.dest ' ./src'
87
+ .pipe gulp.dest \ ./src
72
88
73
89
gulp.task \watch:src:scripts, ->
74
90
gulp.watch <[./src/*.ls]>, <[build:src:scripts]>
75
91
92
+ # create-standalone-build :: Boolean -> {file :: String, directory :: String} -> Stream
93
+ create-standalone-build = (minify, {file, directory}) ->
94
+ browserify standalone: \react-selectize, debug: false
95
+ .add <[./src/index.js]>
96
+ .exclude \prelude-ls
97
+ .exclude \prelude-extension
98
+ .exclude \react
99
+ .exclude \react-dom
100
+ .exclude \react-addons-css-transition-group
101
+ .exclude \react-addons-shallow-compare
102
+ .exclude \tether
103
+ .transform browserify-shim
104
+ .bundle!
105
+ .on \error, -> gulp-util.log arguments
106
+ .pipe source file
107
+ .pipe gulp-if minify, (gulp-streamify gulp-uglify!)
108
+ .pipe gulp.dest directory
109
+
110
+ gulp.task \dist, <[build:src:scripts]>, ->
111
+ create-standalone-build false, {file: \index.js, directory: \./dist} .on \finish, ->
112
+ create-standalone-build true, {file: \index.min.js, directory: \./dist}
113
+
76
114
gulp.task \dev:server, ->
77
115
gulp-connect.server do
78
116
livereload: true
@@ -83,4 +121,10 @@ gulp.task \build:src, <[build:themes build:src:scripts]>
83
121
gulp.task \watch:src, <[watch:themes watch:src:scripts]>
84
122
gulp.task \build:examples, <[build:examples:styles build:examples:scripts]>
85
123
gulp.task \watch:examples, <[watch:examples:styles watch:examples:scripts]>
86
- gulp.task \default, <[dev:server build:src watch:src build:examples watch:examples]>
124
+ gulp.task \default, -> run-sequence do
125
+ \build:src
126
+ \watch:src
127
+ \build:examples:styles
128
+ \watch:examples:styles
129
+ \build-and-watch:examples:scripts
130
+ \dev:server
0 commit comments