jake 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/README.rdoc +273 -0
- data/bin/jake +9 -6
- data/lib/jake.rb +10 -20
- data/lib/jake/build.rb +7 -26
- data/lib/jake/buildable.rb +17 -24
- data/lib/jake/bundle.rb +13 -11
- data/lib/jake/helper.rb +0 -2
- data/lib/jake/package.rb +51 -13
- metadata +72 -101
- data/Manifest.txt +0 -33
- data/README.txt +0 -284
- data/Rakefile +0 -13
- data/test/Jakefile +0 -22
- data/test/expected/LISTING +0 -10
- data/test/expected/README +0 -1
- data/test/expected/basic-min.js +0 -7
- data/test/expected/basic.js +0 -14
- data/test/expected/combo/box-min.js +0 -8
- data/test/expected/combo/box.js +0 -28
- data/test/expected/ext-min.js +0 -7
- data/test/expected/ext.js +0 -17
- data/test/expected/sub/dir/foo-min.js +0 -7
- data/test/expected/sub/dir/foo.js +0 -15
- data/test/expected/sub/path/bar-min.js +0 -3
- data/test/expected/sub/path/bar.js +0 -5
- data/test/jake.yml +0 -38
- data/test/packages.erb +0 -8
- data/test/src/basic-ext.js +0 -2
- data/test/src/basic.js +0 -9
- data/test/src/foo/bar.js +0 -4
- data/test/src/foo/foo.js +0 -10
- data/test/src/head.js +0 -6
- data/test/src/head2.js +0 -7
- data/test/test_jake.rb +0 -29
data/README.txt
DELETED
@@ -1,284 +0,0 @@
|
|
1
|
-
= Jake
|
2
|
-
|
3
|
-
* http://github.com/jcoglan/jake
|
4
|
-
|
5
|
-
Jake is a command line tool for building JavaScript packages from source
|
6
|
-
code. Using simple YAML config files, you can specify any number of build
|
7
|
-
files to be generated by concatenating and minifying groups of source files.
|
8
|
-
It allows ERB to be used inside source files to generate code, and provides
|
9
|
-
event hooks into the build process so you can extend it for your own needs.
|
10
|
-
|
11
|
-
|
12
|
-
== Features
|
13
|
-
|
14
|
-
* Concatenate and minify groups of source files for distribution
|
15
|
-
* Configured using simple YAML files
|
16
|
-
* Easily generate multiple distros with different compression settings
|
17
|
-
* Use ERB templating to generate source code
|
18
|
-
* Extensible using Ruby/ERB and event hooks during the build process
|
19
|
-
* Tested on Ruby 1.8.6, 1.8.7, 1.9.1
|
20
|
-
|
21
|
-
|
22
|
-
== Installation
|
23
|
-
|
24
|
-
sudo gem install jake
|
25
|
-
|
26
|
-
|
27
|
-
== Usage
|
28
|
-
|
29
|
-
To begin with, create a file called <tt>jake.yml</tt> in the root directory
|
30
|
-
of your project; you will run the +jake+ command from here. A basic config
|
31
|
-
looks like this:
|
32
|
-
|
33
|
-
---
|
34
|
-
source_directory: source
|
35
|
-
build_directory: build
|
36
|
-
|
37
|
-
layout: together
|
38
|
-
|
39
|
-
header: COPYRIGHT
|
40
|
-
|
41
|
-
builds:
|
42
|
-
src:
|
43
|
-
packer: false
|
44
|
-
min:
|
45
|
-
shrink_vars: true
|
46
|
-
private: true
|
47
|
-
|
48
|
-
packages:
|
49
|
-
[ DESCRIBED BELOW ]
|
50
|
-
|
51
|
-
* +source_directory+ is the directory relative to <tt>jake.yml</tt> where
|
52
|
-
your source files are, and +build_directory+ is where all the generated
|
53
|
-
build files will be placed.
|
54
|
-
* +layout+ describes whether files from separate builds should go in
|
55
|
-
separate directories. For example if you have a package called +foo+,
|
56
|
-
with the above config the +together+ layout will generate
|
57
|
-
<tt>build/foo-src.js</tt> and <tt>build/foo-min.js</tt>, whereas a
|
58
|
-
+layout+ value of +apart+ will generate <tt>build/src/foo.js</tt> and
|
59
|
-
<tt>build/min/foo.js</tt>.
|
60
|
-
* +header+ specifies a file whose content should appear at the top of
|
61
|
-
all generated build files. The content of this file will typically be
|
62
|
-
JavaScript comments containing copyright and license information. This
|
63
|
-
content is never minified. The +header+ option may be omitted.
|
64
|
-
|
65
|
-
|
66
|
-
=== Build listing
|
67
|
-
|
68
|
-
The build listing, given by the +builds+ option in the config file, lists
|
69
|
-
all the builds you want to produce for distribution, and what minification
|
70
|
-
settings each build should use. JavaScript projects typically distribute
|
71
|
-
both compressed and uncompressed copies of their code to suit both production
|
72
|
-
and development environments.
|
73
|
-
|
74
|
-
You can have as many builds as you like and the names are up to you. I'm
|
75
|
-
using +src+ and +min+ as readily understood examples. Each build may specify
|
76
|
-
some combination of the following options:
|
77
|
-
|
78
|
-
* <tt>packer: false</tt> - disables minification for this build. This
|
79
|
-
precludes use of further minification options.
|
80
|
-
* <tt>shrink_vars: true</tt> - tells the minifier to compress local
|
81
|
-
variable names inside functions.
|
82
|
-
* <tt>private: true</tt> - tells the minifier to obfuscate 'private'
|
83
|
-
variables with numeric replacements. JavaScript convention is that any
|
84
|
-
name beginning with an underscore, e.g. <tt>_foo</tt> or <tt>obj._bar</tt>
|
85
|
-
should be considered private. They are replaced with <tt>_0</tt>,
|
86
|
-
<tt>_1</tt>, etc.
|
87
|
-
* <tt>base62: true</tt> - produces base-62 encoded minification.
|
88
|
-
* <tt>suffix: false</tt> - files from this build should not have a
|
89
|
-
suffix if using the +together+ layout, so you get <tt>build/foo.js</tt>
|
90
|
-
rather than <tt>build/foo-src.js</tt>, for example. Only one build
|
91
|
-
may use this option, otherwise file name clashes will occur.
|
92
|
-
|
93
|
-
|
94
|
-
=== Package listing
|
95
|
-
|
96
|
-
The package listing, given under the +packages+ config option, describes
|
97
|
-
the packages you want to produce and which source files are used to generate
|
98
|
-
them. A package is named using the path under +build_directory+ where it
|
99
|
-
should be generated, e.g. <tt>foo</tt> or <tt>ext/awesome</tt> (you may
|
100
|
-
omit the <tt>.js</tt> extension). Each package lists one or more source
|
101
|
-
files used to build it, and may optionally list some extra options as described
|
102
|
-
below.
|
103
|
-
|
104
|
-
For the examples, assume the source directory is +src+ and the build
|
105
|
-
directory is +dist+. This package uses a single source file <tt>src/foo.js</tt>
|
106
|
-
and generates <tt>dist/foo_dist.js</tt>:
|
107
|
-
|
108
|
-
foo_dist: foo
|
109
|
-
|
110
|
-
This package generates <tt>dist/bar.js</tt> from <tt>src/bar1.js</tt> and
|
111
|
-
<tt>src/bar2.js</tt>
|
112
|
-
|
113
|
-
bar:
|
114
|
-
- bar1
|
115
|
-
- bar2
|
116
|
-
|
117
|
-
This generates a package at <tt>dist/sub/dir.js</tt> from <tt>src/path/file.js</tt>
|
118
|
-
and <tt>src/path/baz.js</tt>:
|
119
|
-
|
120
|
-
sub/dir:
|
121
|
-
- path/file
|
122
|
-
- path/baz
|
123
|
-
|
124
|
-
If all the source files for a package live in the same subdirectory, you
|
125
|
-
can tidy things up using the +directory+ option. If you use any package-level
|
126
|
-
options, you must list the files under the +files+ option (the above examples
|
127
|
-
are just syntactic shorthands for this):
|
128
|
-
|
129
|
-
sub/dir:
|
130
|
-
directory: path
|
131
|
-
files:
|
132
|
-
- file
|
133
|
-
- baz
|
134
|
-
|
135
|
-
The full list of package options is as follows:
|
136
|
-
|
137
|
-
* +files+ - lists the source files used to build the package. Shorthand may
|
138
|
-
be used as above if no further options are used.
|
139
|
-
* +extends+ - name of another package from which to inherit configuration.
|
140
|
-
Useful for making a package that includes all the files from another,]
|
141
|
-
plus a few extras.
|
142
|
-
* +directory+ - the directory under +source_directory+ in which to find
|
143
|
-
source files. May be omitted.
|
144
|
-
* +header+ - a custom header file to use on this package. Overrides the
|
145
|
-
root +header+ option. May be omitted.
|
146
|
-
* +packer+ - lists minification settings that override settings being used
|
147
|
-
for the current build. If a build listed above uses <tt>packer: false</tt>,
|
148
|
-
this takes precedence over package-specific instructions. Typically used
|
149
|
-
to override options for the minified build.
|
150
|
-
* +meta+ - should be a YAML dictionary containing arbitrary data useful to
|
151
|
-
user-defined build events. May be omitted. See 'Event hooks' below.
|
152
|
-
|
153
|
-
For example, here's a package listing that uses all the options:
|
154
|
-
|
155
|
-
packages:
|
156
|
-
foo_dist: foo
|
157
|
-
|
158
|
-
bar:
|
159
|
-
- bar1
|
160
|
-
- bar2
|
161
|
-
|
162
|
-
sub/whizz:
|
163
|
-
extends: foo_dist
|
164
|
-
directory: path
|
165
|
-
header: CUSTOM_HEADER
|
166
|
-
files:
|
167
|
-
- file1
|
168
|
-
- file2
|
169
|
-
|
170
|
-
last:
|
171
|
-
packer:
|
172
|
-
private: false
|
173
|
-
meta:
|
174
|
-
requires:
|
175
|
-
- jQuery
|
176
|
-
- GMap2
|
177
|
-
files:
|
178
|
-
- one_file
|
179
|
-
- another_file
|
180
|
-
|
181
|
-
In conjunction with the build options listed above, this matches the
|
182
|
-
following project layout (omitting build name suffixes for brevity):
|
183
|
-
|
184
|
-
- build/
|
185
|
-
- sub/
|
186
|
-
- whizz.js
|
187
|
-
- bar.js
|
188
|
-
- foo_dist.js
|
189
|
-
- last.js
|
190
|
-
- source/
|
191
|
-
- path/
|
192
|
-
- CUSTOM_HEADER
|
193
|
-
- file1.js
|
194
|
-
- file2.js
|
195
|
-
- another_file.js
|
196
|
-
- bar1.js
|
197
|
-
- bar2.js
|
198
|
-
- foo.js
|
199
|
-
- one_file.js
|
200
|
-
- COPYRIGHT
|
201
|
-
- jake.yml
|
202
|
-
|
203
|
-
|
204
|
-
=== Using ERB in source files
|
205
|
-
|
206
|
-
Jake lets you use Ruby's ERB templating system within your source code so
|
207
|
-
you can insert values generated from Ruby functions. To use this feature,
|
208
|
-
you need to create a file called <tt>Jakefile</tt> in the root of your project.
|
209
|
-
This contains helper functions that are called in your source code to inject data.
|
210
|
-
|
211
|
-
For example, say you want to extract a version number from your version control
|
212
|
-
system and inject it into your code along with the build name. Your source code
|
213
|
-
should contain something like this:
|
214
|
-
|
215
|
-
MyJavaScriptLib.VERSION = "<%= version %>-<%= build %>";
|
216
|
-
|
217
|
-
And your <tt>Jakefile</tt> should contain a helper called +version+:
|
218
|
-
|
219
|
-
jake_helper :version do
|
220
|
-
# extract version number from svn, git, whatever
|
221
|
-
# e.g. return '1.0'
|
222
|
-
end
|
223
|
-
|
224
|
-
Jake has a built-in helper called +build+ that returns the current build
|
225
|
-
name. When built, the output would contain the following:
|
226
|
-
|
227
|
-
MyJavaScriptLib.VERSION = "1.0-src"; // or "1.0-min" for the 'min' build
|
228
|
-
|
229
|
-
|
230
|
-
=== Event hooks
|
231
|
-
|
232
|
-
The +Jakefile+ may also define event hooks that are fired during a build when
|
233
|
-
interesting things happen. This allows you to extend your build process using
|
234
|
-
configuration data from Jake. All event callbacks are passed a +Build+ object
|
235
|
-
as the first argument, and may receive additional arguments depending on the
|
236
|
-
event type. We currently have two events:
|
237
|
-
|
238
|
-
+file_created+ is fired whenever a new build file is created. The callback is
|
239
|
-
passed the +Buildable+ package object, the current build type (+src+ or +min+
|
240
|
-
using the above examples), and the full path to the newly created file.
|
241
|
-
The package object may contain metadata (set using the +meta+ option, see
|
242
|
-
above) which you can use for further code generation.
|
243
|
-
|
244
|
-
+build_complete+ is fired after a build has finished running, that is after
|
245
|
-
all sets of minification options have been run. At this point you can use any
|
246
|
-
metadata you've gathered to generate more code, copy files to your distribution
|
247
|
-
directory, etc.
|
248
|
-
|
249
|
-
$register = {}
|
250
|
-
|
251
|
-
jake_hook :file_created do |build, pkg, build_type, path|
|
252
|
-
$register[path] = pkg.meta
|
253
|
-
end
|
254
|
-
|
255
|
-
jake_hook :build_complete do |build|
|
256
|
-
FileUtils.cp 'README', build.build_directory + '/README'
|
257
|
-
# generate code from $register
|
258
|
-
end
|
259
|
-
|
260
|
-
|
261
|
-
== License
|
262
|
-
|
263
|
-
(The MIT License)
|
264
|
-
|
265
|
-
Copyright (c) 2008-2009 James Coglan
|
266
|
-
|
267
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
268
|
-
a copy of this software and associated documentation files (the
|
269
|
-
'Software'), to deal in the Software without restriction, including
|
270
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
271
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
272
|
-
permit persons to whom the Software is furnished to do so, subject to
|
273
|
-
the following conditions:
|
274
|
-
|
275
|
-
The above copyright notice and this permission notice shall be
|
276
|
-
included in all copies or substantial portions of the Software.
|
277
|
-
|
278
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
279
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
280
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
281
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
282
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
283
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
284
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'hoe'
|
5
|
-
require './lib/jake.rb'
|
6
|
-
|
7
|
-
Hoe.spec('jake') do |p|
|
8
|
-
# p.rubyforge_name = 'jakex' # if different than lowercase project name
|
9
|
-
p.developer('James Coglan', 'jcoglan@googlemail.com')
|
10
|
-
p.extra_deps = %w(eventful packr oyster)
|
11
|
-
end
|
12
|
-
|
13
|
-
# vim: syntax=Ruby
|
data/test/Jakefile
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
jake_helper :version do
|
2
|
-
"0.5.0"
|
3
|
-
end
|
4
|
-
|
5
|
-
FILES = []
|
6
|
-
DEPS = {}
|
7
|
-
|
8
|
-
jake_hook :file_created do |build, package, build_type, path|
|
9
|
-
FILES << File.basename(path)
|
10
|
-
DEPS[path] = package.meta if build_type == :min
|
11
|
-
end
|
12
|
-
|
13
|
-
jake_hook :build_complete do |build|
|
14
|
-
write = lambda do |file, content|
|
15
|
-
File.open(File.join(build.build_dir, file), 'w') { |f| f.write(content) }
|
16
|
-
end
|
17
|
-
write['README', 'Should be generated after build']
|
18
|
-
write['LISTING', FILES.sort * "\n"]
|
19
|
-
|
20
|
-
write['packages.js', ERB.new(File.read('packages.erb')).result(binding)]
|
21
|
-
end
|
22
|
-
|
data/test/expected/LISTING
DELETED
data/test/expected/README
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Should be generated after build
|
data/test/expected/basic-min.js
DELETED
data/test/expected/basic.js
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Jake test files should all include this
|
3
|
-
* even if they have been minified.
|
4
|
-
* 0.5.0-min
|
5
|
-
**/
|
6
|
-
|
7
|
-
Foo=(function(b,c){var a=true;return{_0:null,field:a,global:foo}})(window,something);
|
8
|
-
Basic={VERSION:"0.5.0-min",function(a){var b=4;return b+this._foo+a}};Basic.Ext="MIN";
|
data/test/expected/combo/box.js
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Jake test files should all include this
|
3
|
-
* even if they have been minified.
|
4
|
-
* 0.5.0-src
|
5
|
-
**/
|
6
|
-
|
7
|
-
Foo = (function(my, vars) {
|
8
|
-
var another = true;
|
9
|
-
|
10
|
-
return {
|
11
|
-
_priv: null,
|
12
|
-
field: another,
|
13
|
-
global: foo
|
14
|
-
};
|
15
|
-
})(window, something);
|
16
|
-
|
17
|
-
|
18
|
-
Basic = {
|
19
|
-
VERSION: "0.5.0-src",
|
20
|
-
|
21
|
-
function(something) {
|
22
|
-
var myVar = 4;
|
23
|
-
return myVar + this._foo + something;
|
24
|
-
}
|
25
|
-
};
|
26
|
-
|
27
|
-
|
28
|
-
Basic.Ext = "SRC";
|
data/test/expected/ext-min.js
DELETED
data/test/expected/ext.js
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Jake test files should all include this
|
3
|
-
* even if they have been minified.
|
4
|
-
* 0.5.0-src
|
5
|
-
**/
|
6
|
-
|
7
|
-
Basic = {
|
8
|
-
VERSION: "0.5.0-src",
|
9
|
-
|
10
|
-
function(something) {
|
11
|
-
var myVar = 4;
|
12
|
-
return myVar + this._foo + something;
|
13
|
-
}
|
14
|
-
};
|
15
|
-
|
16
|
-
|
17
|
-
Basic.Ext = "SRC";
|
@@ -1,15 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Jake test files should all include this
|
3
|
-
* even if they have been minified.
|
4
|
-
* 0.5.0-src
|
5
|
-
**/
|
6
|
-
|
7
|
-
Foo = (function(my, vars) {
|
8
|
-
var another = true;
|
9
|
-
|
10
|
-
return {
|
11
|
-
_priv: null,
|
12
|
-
field: another,
|
13
|
-
global: foo
|
14
|
-
};
|
15
|
-
})(window, something);
|