lib/carte.coffee in carte-server-0.0.14 vs lib/carte.coffee in carte-server-0.0.15
- old
+ new
@@ -1,51 +1,77 @@
-fs = require 'fs'
+fs = require 'fs-extra'
path = require 'path'
gulp = require 'gulp'
gulpUtil = require 'gulp-util'
gulpIf = require 'gulp-if'
-source = require 'vinyl-source-stream'
+sourceStream = require 'vinyl-source-stream'
browserify = require 'browserify'
watchify = require 'watchify'
uglify = require 'gulp-uglify'
streamify = require 'gulp-streamify'
+_ = require 'lodash'
+jade = require 'gulp-jade'
+rename = require 'gulp-rename'
module.exports = class Carte
+ watching: false
+
install: (gulp, config)->
- gulp.task 'build', =>
- @build
- watch: false
- minify: true
- config: config
- gulp.task 'watch', =>
- @build
- watch: true
- minifty: false
- config: config
+ custom = require(config)
+ fs.writeFileSync(__dirname + '/carte/shared/custom.json', JSON.stringify(custom))
- build: (options)->
+ gulp.task 'watching', => @watching = true
+ gulp.task 'build', ['build:html', 'build:script']
+ gulp.task 'watch', ['watching', 'build:html', 'build:script']
+
+ gulp.task 'build:html', =>
+ _config = require('./carte/client/config')
+ gulp.src('lib/carte/client.jade')
+ .pipe jade(locals: {config: _config}, pretty: true)
+ .pipe rename(_config.html_path)
+ .pipe gulp.dest(_config.root_dir)
+
+ gulp.task 'build:script', =>
+ @buildScript config: config
+
+ buildScript: (options)->
config = require(options.config)
fs.writeFileSync(__dirname + '/carte/shared/custom.json', JSON.stringify(config))
- dir = path.dirname config.script_path
+ dir = config.root_dir
file = path.basename config.script_path
- minify = options.minify
browserify = browserify
cache: {}
packageCache: {}
fullPaths: true
entries: [__dirname + '/carte/client.coffee']
- extensions: ['.coffee', '.js', '.cjsx']
+ extensions: ['.coffee', '.js', '.cjsx', '.css']
browserify
.transform 'coffee-reactify'
.transform 'debowerify'
- if options.watch
+ .transform 'browserify-css',
+ rootDir: 'public'
+ processRelativeUrl: (relativeUrl)->
+ stripQueryStringAndHashFromPath = (url)-> url.split('?')[0].split('#')[0]
+ rootDir = path.resolve(process.cwd(), 'public')
+ relativePath = stripQueryStringAndHashFromPath(relativeUrl)
+ queryStringAndHash = relativeUrl.substring(relativePath.length)
+ prefix = '../node_modules/'
+ if (_.startsWith(relativePath, prefix))
+ vendorPath = 'vendor/' + relativePath.substring(prefix.length)
+ source = path.join(rootDir, relativePath)
+ target = path.join(rootDir, vendorPath)
+ gulpUtil.log('Copying file from ' + JSON.stringify(source) + ' to ' + JSON.stringify(target))
+ fs.copySync(source, target)
+ return vendorPath + queryStringAndHash
+ relativeUrl
+ if @watching
watchified = watchify(browserify)
- watchified.on 'update', ()=> @bundle(browserify, dir, file, minify)
+ watchified.on 'update', ()=> @bundle(browserify, dir, file)
watchified.on 'log', gulpUtil.log
- @bundle(browserify, dir, file, minify)
+ @bundle(browserify, dir, file)
- bundle: (browserify, dir, file, minify)->
+ bundle: (browserify, dir, file)->
browserify
.bundle()
- .pipe source file
- .pipe gulpIf(minify, streamify(uglify()))
+ .pipe sourceStream file
+ .pipe gulpIf(!@watching, streamify(uglify()))
.pipe gulp.dest dir