Skip to content

Instantly share code, notes, and snippets.

@pushandplay
Created August 14, 2013 13:08
Show Gist options
  • Save pushandplay/6230880 to your computer and use it in GitHub Desktop.
Save pushandplay/6230880 to your computer and use it in GitHub Desktop.
Cordova project build procedure
MODULE_NOT_FOUND = 1
check_module = (module) ->
try
require.resolve module
catch e
process.stderr.write "ERROR: #{module} is not found. Please install it first.\n"
process.exit MODULE_NOT_FOUND
fs = require 'fs'
{print} = require 'sys'
{spawn} = require 'child_process'
check_module 'execSync'
{exec} = require 'execSync'
# C O N S T A N T S :
SRC_DIR = './www_src'
WWW_DIR = './www'
# T A S K I N T E R N A L S :
build_less = (callback) ->
error = 0
errorMsg = ""
inf = "#{SRC_DIR}/styles.less"
outf = "#{SRC_DIR}/styles.css"
r = exec "lessc --no-color --yui-compress #{inf} #{outf}"
error += r.code
errorMsg += r.stdout
unless error then callback?() else process.stderr.write errorMsg
build_coffee = (callback) ->
error = 0
errorMsg = ""
r = exec "find #{SRC_DIR} -name '*.coffee' -exec coffee -b -c {} \\;"
error += r.code
errorMsg += r.stdout
unless error then callback?() else process.stderr.write errorMsg
compress_js = (callback) ->
error = 0
errorMsg = ""
r = exec "find #{WWW_DIR}/js/ -name '*.js' -exec uglifyjs {} -o {} \\;"
error += r.code
errorMsg += r.stdout
unless error then callback?() else process.stderr.write errorMsg
prepare_www = (callback) ->
error = 0
errorMsg = ""
ri = exec "rm -r #{WWW_DIR}"
error += ri.code
errorMsg += ri.stdout
ri = exec "mkdir -p #{WWW_DIR}"
error += ri.code
errorMsg += ri.stdout
unless error then callback?() else process.stderr.write errorMsg
copy = (callback) ->
error = 0
errorMsg = ""
ri = exec "rsync -av --delete --filter='- *.less' --filter='- *.coffee' #{SRC_DIR}/ #{WWW_DIR}"
error += ri.code
errorMsg += ri.stdout
ri = exec "find #{SRC_DIR}/ -name '*.css' -delete"
error += ri.code
errorMsg += ri.stdout
#ri = exec "find #{SRC_DIR}/js/ -name '*.js' -exec ls -lh {} \\;"
#error += ri.code
#errorMsg += ri.stdout
unless error then callback?() else process.stderr.write errorMsg
cordova_prepare = (callback) ->
error = 0
errorMsg = ""
ri = exec "cordova prepare"
error += ri.code
errorMsg += ri.stdout
unless error then callback?() else process.stderr.write errorMsg
cordova_build = (callback) ->
error = 0
errorMsg = ""
ri = exec "cordova build"
error += ri.code
errorMsg += ri.stdout
unless error then callback?() else process.stderr.write errorMsg
# T A S K S :
task 'build_less', "Compile LESS sources", ->
print "Compile LESS sources...\n"
build_less()
task 'build_coffee', "Compile COFFEE SCRIPT sources", ->
print "Compile COFFEE SCRIPT sources...\n"
build_coffee()
task 'prepare_www', "Preparing #{WWW_DIR} dorectory", ->
print "Preparing \"#{WWW_DIR}\" dorectory...\n"
prepare_www()
task 'compress_js', 'Compress JavaScripts', ->
print "Compress JavaScripts...\n"
compress_js()
task 'copy', 'Copying compiled files', ->
print "Copying compiled files...\n"
copy()
task 'cordova_prepare', 'Prepare platforms', ->
print "Prepare platforms...\n"
cordova_prepare()
task 'cordova_build', 'Build platforms', ->
print "Build platforms...\n"
cordova_build()
task 'build', 'Prepare files, prepare and build platforms', ->
invoke 'prepare_www'
invoke 'build_coffee'
invoke 'build_less'
invoke 'copy'
invoke 'cordova_prepare'
invoke 'cordova_build'
task 'prepare', 'Prepare files, prepare platforms', ->
invoke 'prepare_www'
invoke 'build_coffee'
invoke 'build_less'
invoke 'copy'
invoke 'compress_js'
invoke 'cordova_prepare'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment