forked from love-jam/onejs
/
onejs
executable file
·132 lines (113 loc) · 3.9 KB
/
onejs
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env node
var one = require('../lib'),
puts = require('util').puts,
buildOptions = {};
var REV = '1.1.0';
var opt = require('optimist'),
argv = opt
.options('debug', {})
.options('tie', {})
.options('noprocess', {})
.options('quiet', {})
.options('verbose', {})
.options('version', {})
.options('help', {})
.argv;
var HELP = ['usage: onejs [action] [manifest] [options]'
, ''
, 'Transforms NodeJS packages into single, stand-alone JavaScript files that can be run at other platforms.'
, ''
, 'actions:'
, ' build <manifest> <target> Generate a stand-alone JavaScript file from specified package. Write output to <target> if given any.'
, ' install [modules] Package specified NodeJS core modules and locate them in node_modules/ directory. Example Usage: onejs install assert util.'
, ' server <manifest> <port> <host> Publish generated JavaScript file on web. Uses 127.0.0.1:1338 by default.'
, ''
, 'options:'
, ' --debug Disable module caching. Pass ENV variables to the build.'
, ''
, ' --tie <package name>=<global object> Create package links to specified global variables. e.g; --tie dom=window.document,jQuery=jQuery'
, ' --exclude <package name> Do not contain specified dependencies. e.g: --exclude underscore,request '
, ' --noprocess Do not include process implementation.'
, ' --sandbox-console Provide the build an encapsulated, embed console implementation.'
, ''
, ' --quiet Make console output less verbose.'
, ' --verbose Tell what\'s going on by being verbose.'
, ' --version Show version and exit.'
, ' --help Show help.'
, ''].join('\n');
function build(){
var manifest = argv._[1] || 'package.json',
target = argv._[2],
tie = argv.tie,
exclude = argv.exclude,
sandboxConsole = argv['sandbox-console'];
if(tie){
tie = tie.split(',')
.filter(function(el){
return el && el.indexOf('=') > -1;
})
.map(function(el){
el = el.split('=');
return { 'pkg': el[0], 'obj': el[1] };
});
}
exclude && ( exclude = exclude.split(',').filter(function(el){ return el && el.length; }) );
var options = {
'noprocess': argv.noprocess,
'tie': tie,
'debug': argv.debug,
'exclude': exclude,
'sandboxConsole': sandboxConsole
};
one.build(manifest, options, function(error, pkg){
if(error) throw error;
if(target){
one.save(target, pkg, function(error){
if(error) throw error;
process.exit(0);
});
} else {
puts(pkg);
}
});
}
function help(){
puts(HELP);
process.exit(0);
}
function server(){
var manifest = argv._[1] || 'package.json',
host = argv._[3] || '127.0.0.1',
port = argv._[2] || 1338,
debug = argv.debug;
one.publish({ 'manifestPath':manifest, 'host':host, 'port':port, 'debug': debug });
}
function setupNodeDeps(){
var modules = argv._.slice(1);
modules.push(function(error){
if(error) throw error;
});
one.setupNodeModules.apply(undefined, modules);
}
function verbosity(){
one.verbosity('INFO');
argv.quiet && one.quiet(true);
argv.verbose && one.verbose(true);
}
function version(){
puts('OneJS v' + REV);
process.exit(0);
}
var action = argv._[0];
verbosity();
switch(action){
case 'build': build(); break;
case 'server': server(); break;
case 'install': setupNodeDeps(); break;
default:
if(argv.version){
version();
} else {
help();
}
}