neft
Version:
Universal Platform
86 lines (69 loc) • 2.48 kB
text/coffeescript
fs = require 'fs-extra'
Mustache = require 'mustache'
coffee = require 'coffee-script'
bundle = require 'lib/bundle-builder'
moduleCache = require 'lib/module-cache'
moduleCache.registerCoffeeScript()
moduleCache.registerYaml()
moduleCache.registerTxt(['.txt', '.pegjs'])
fs.ensureDir './cli/bundle'
createBundle = (opts, callback) ->
bundle {
platform: opts.platform
extras: opts.extras
release: opts.release
removeLogs: opts.release
minify: opts.release
verbose: true
path: 'index.coffee'
env: opts.env
test: (req) ->
/^(?:src\/|\.|package\.json)/.test(req)
}, (err, bundle) ->
if err
return callback err
try
tmplSrc = "./scripts/bundle/#{opts.platform}.coffee.mustache"
template = fs.readFileSync tmplSrc, 'utf-8'
template = coffee.compile template, bare: true
try
tmplSrc = "./scripts/bundle/#{opts.platform}.js.mustache"
template ||= fs.readFileSync tmplSrc, 'utf-8'
tmplSrc = './scripts/bundle/standard.js.mustache'
template ||= fs.readFileSync tmplSrc, 'utf-8'
mode = if opts.release then 'release' else 'develop'
template = Mustache.render template, neftCode: bundle
extrasText = ''
if opts.extras
extrasText = "#{Object.keys(opts.extras).sort().join('-')}-"
name = "#{opts.platform}-#{extrasText}#{mode}"
fs.writeFileSync "./cli/bundle/neft-#{name}.js", template
callback()
TYPES = [
{platform: 'node'},
{platform: 'browser', globals: {NEFT_TYPE: 'app'}},
{platform: 'browser', globals: {NEFT_TYPE: 'game'}, extras: {game: true}},
{platform: 'android'},
{platform: 'ios'},
]
do ->
stack = []
registerBundle = (type, opts) ->
bundleOpts = {}
bundleOpts[key] = val for key, val of type
bundleOpts[key] = val for key, val of opts
stack.push (callback) -> createBundle(bundleOpts, callback)
for type in TYPES
if process.argv.indexOf("--#{type.platform}") >= 0
registerBundle type, {release: false}
if process.argv.indexOf("--#{type.platform}-release") >= 0
registerBundle type, {release: true}
index = -1
callback = (err) ->
if err?
throw err
index += 1
if index < stack.length
stack[index] callback
callback()
return