Skip to content

Commit

Permalink
updated gulpfile, added 'dist' task for generating umd build
Browse files Browse the repository at this point in the history
  • Loading branch information
furqanZafar committed Feb 6, 2016
1 parent ed52cb0 commit a46634e
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 34 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ npm-debug.log
*.css
*.rdb
coverage/
node_modules/
dist/
node_modules/
110 changes: 77 additions & 33 deletions gulpfile.ls
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
require! \browserify
# require! \./config
require! \browserify-shim
require! \fs
require! \gulp
require! \gulp-connect
Expand All @@ -10,69 +10,107 @@ require! \gulp-stylus
require! \gulp-uglify
require! \gulp-util
require! \nib
{basename, dirname, extname} = require \path
require! \run-sequence
{once} = require \underscore
source = require \vinyl-source-stream
require! \watchify

config =
minify: process.env.MINIFY == \true

create-bundler = (entries) ->
bundler = browserify {} <<< watchify.args <<< {debug: config.minify, paths: <[./src ./public/components]>}
# build public/components/App.styl which requires other styl files
gulp.task \build:examples:styles, ->
gulp.src <[./public/components/App.styl]>
.pipe gulp-stylus {use: nib!, import: <[nib]>, compress: config.minify, "include css": true}
.pipe gulp.dest './public/components'
.pipe gulp-connect.reload!

# watch all the style files both in public/components directory & themes directory
gulp.task \watch:examples:styles, ->
gulp.watch <[./public/components/*.styl ./themes/*.styl]>, <[build:examples:styles]>

# create a browserify Bundler
# create-bundler :: [String] -> object -> Bundler
create-bundler = (entries, extras) ->
bundler = browserify {} <<< watchify.args <<< extras <<< {paths: <[./src ./public/components]>}
..add entries
..transform \liveify
..transform \brfs
watchify bundler

bundle = (bundler, {file, directory}:output) ->
# outputs a single javascript file (which is bundled and minified - depending on env)
# bundler :: Bundler -> {file :: String, directory :: String} -> IO()
bundle = (minify, bundler, {file, directory}:output) ->
bundler.bundle!
.on \error, -> console.log arguments
.on \error, -> gulp-util.log arguments
.pipe source file
.pipe gulp-if config.minify, (gulp-streamify gulp-uglify!)
.pipe gulp-if minify, (gulp-streamify gulp-uglify!)
.pipe gulp.dest directory
.pipe gulp-connect.reload!

##
# Examples
##
gulp.task \build:examples:styles, ->
gulp.src <[./public/components/App.styl]>
.pipe gulp-stylus {use: nib!, import: <[nib]>, compress: config.minify, "include css": true}
.pipe gulp.dest './public/components'
.pipe gulp-connect.reload!
# build-and-watch :: Bundler -> {file :: String, directory :: String} -> Boolean -> (() -> ()) -> ()
build-and-watch = (minify, bundler, {file}:output, done) !->
# must invoke done only once
once-done = once done

gulp.task \watch:examples:styles, ->
gulp.watch <[./public/components/*.styl ./themes/*.styl]>, <[build:examples:styles]>
watchified-bundler = watchify bundler

# build once
bundle minify, watchified-bundler, output

watchified-bundler
.on \update, ->
bundle minify, watchified-bundler, output
.pipe gulp-connect.reload!

examples-bundler = create-bundler \./public/components/App.ls
bundle-examples = -> bundle examples-bundler, {file: "App.js", directory: "./public/components/"}
.on \time, (time) ->
once-done!
gulp-util.log "#{file} built in #{time / 1000} seconds"

gulp.task \build:examples:scripts, ->
bundle-examples!
examples-bundler = create-bundler [\./public/components/App.ls], debug: !config.minify
app-js = file: \App.js, directory: \./public/components/

gulp.task \watch:examples:scripts, ->
examples-bundler.on \update, -> bundle-examples!
examples-bundler.on \time, (time) -> gulp-util.log "App.js built in #{time} ms"
# first, builds public/components/App.ls once, then builds it everytime there is a change
gulp.task \build-and-watch:examples:scripts, (done) ->
build-and-watch config.minify, examples-bundler, app-js, done

##
# Source
##
gulp.task \build:themes, ->
gulp.src <[./themes/*.styl]>
.pipe gulp-stylus use: nib!, import: <[nib]>, compress: config.minify
.pipe gulp.dest './themes'
.pipe gulp-stylus {use: nib!, import: <[nib]>, compress: config.minify, "include css": true}
.pipe gulp.dest \./themes
.pipe gulp-connect.reload!

gulp.task \watch:themes, ->
gulp.watch <[./themes/*.styl]>, <[build:themes]>

gulp.task \build:src:scripts, ->
gulp.src <[./src/*.ls]>
.pipe gulp-livescript!
.pipe gulp.dest './src'
.pipe gulp.dest \./src

gulp.task \watch:src:scripts, ->
gulp.watch <[./src/*.ls]>, <[build:src:scripts]>

# create-standalone-build :: Boolean -> {file :: String, directory :: String} -> Stream
create-standalone-build = (minify, {file, directory}) ->
browserify standalone: \react-selectize, debug: false
.add <[./src/index.js]>
.exclude \prelude-ls
.exclude \prelude-extension
.exclude \react
.exclude \react-dom
.exclude \react-addons-css-transition-group
.exclude \react-addons-shallow-compare
.exclude \tether
.transform browserify-shim
.bundle!
.on \error, -> gulp-util.log arguments
.pipe source file
.pipe gulp-if minify, (gulp-streamify gulp-uglify!)
.pipe gulp.dest directory

gulp.task \dist, <[build:src:scripts]>, ->
create-standalone-build false, {file: \index.js, directory: \./dist} .on \finish, ->
create-standalone-build true, {file: \index.min.js, directory: \./dist}

gulp.task \dev:server, ->
gulp-connect.server do
livereload: true
Expand All @@ -83,4 +121,10 @@ gulp.task \build:src, <[build:themes build:src:scripts]>
gulp.task \watch:src, <[watch:themes watch:src:scripts]>
gulp.task \build:examples, <[build:examples:styles build:examples:scripts]>
gulp.task \watch:examples, <[watch:examples:styles watch:examples:scripts]>
gulp.task \default, <[dev:server build:src watch:src build:examples watch:examples]>
gulp.task \default, -> run-sequence do
\build:src
\watch:src
\build:examples:styles
\watch:examples:styles
\build-and-watch:examples:scripts
\dev:server
9 changes: 9 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@
"react-addons-shallow-compare": "^0.14.6",
"react-dom": "^0.14.0"
},
"browserify-shim": {
"prelude-extension": "global:preludeExtension",
"react": "global:React",
"react-addons-css-transition-group": "global:React.addons.CSSTransitionGroup",
"react-addons-shallow-compare": "global:React.addons.shallowCompare",
"react-dom": "global:ReactDOM",
"tether": "global:Tether"
},
"devDependencies": {
"async-ls": "0.0.3",
"brace": "git+https://github.com/furqanZafar/brace.git",
Expand Down Expand Up @@ -51,6 +59,7 @@
"react-dom": "^0.14.0",
"react-router": "^1.0.0-rc1",
"react-tools": "^0.13.3",
"run-sequence": "^1.1.5",
"should": "^7.1.0",
"underscore": "^1.8.3",
"vinyl-source-stream": "^1.0.0",
Expand Down
File renamed without changes.

0 comments on commit a46634e

Please sign in to comment.