forked from zeekay/die
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.coffee
105 lines (90 loc) · 2.92 KB
/
cli.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
program = require 'jade/node_modules/commander'
{existsSync} = require './utils'
{dirname, join} = require 'path'
# Return app in current working directory, or default Die app
appOrDefault = (opts) ->
# Try to resolve current directory
try
mod = require.resolve process.cwd()
catch err
mod = false
# Try to require Die app
Die = require './die'
if mod
app = require mod
# If we actually have a Die app instance, use it
if app instanceof Die
return app
# Return default Die app
new Die
# Commandline handler
module.exports = ->
program
.version(require('../package.json').version)
.usage('[command] [options]')
program
.command('build')
.description(' assemble project')
.option('-o, --output [dir]', 'output dir')
.option('-m, --minify', 'minify output')
.option('--css [in]', 'CSS entrypoint')
.option('--css-path [out]', 'path to compiled CSS')
.option('--js [in]', 'Javascript entrypoint')
.option('--js-path [out]', 'path to compiled Javascript')
.action (opts) ->
app = appOrDefault()
app.updateOptions
buildPath: opts.output
cssBundle:
entry: opts.css
url: opts.cssPath
minify: opts.minify
jsBundle:
entry: opts.js
url: opts.jsPath
minify: opts.minify
app.build()
program
.command('new [name]')
.description(' create new project')
.usage('[name] [options]')
.option('-t, --template [name]', 'template to use')
.option('-c, --config [config.json]', 'configuration file to supply context variables from')
.option('-i, --install', 'run npm install automatically')
.option('-p, --production', 'only install production dependencies')
.action (name, opts = {}) ->
if not name
return console.log 'Name of project is required'
require('./create') name, opts
program
.command('run')
.description(' serve project')
.option('-a, --app [module]', 'app to run')
.option('-p, --port [number]', 'port to run server on')
.option('-r, --reload', 'automatically reload on file changes')
.option('-w, --workers [number]', 'number of workers processes to run')
.action ({app, port, reload, workers}) ->
port ?= process.env.PORT ?= 3000
workers ?= 1
{run} = require './run'
if reload
require('./reloader') require('./run').reload
app ?= appOrDefault()
run app,
port: port
workers: workers
program
.command('test')
.description(' run tests')
.option('-a, --args [arguments]', 'arguments for mocha')
.action ({args}) ->
require('./test') args
program
.command('watch')
.description(' watch for changes and rebuild project')
.action ->
app = appOrDefault()
require('./watch') app
help = -> console.log program.helpInformation()
program.parse process.argv
help() unless program.args.length