pwt.recipe.closurebuilder

zc.buildout recipe for closurebuilder


License
Other
Install
pip install pwt.recipe.closurebuilder==0.9.8

Documentation

Closure builder zc.buildout recipe

This is a simple wrapper around the closurebuilder tools from the Closure project from Google.

Dependencies

Setup some JavaScript files.

>>> import os.path
>>> os.mkdir(os.path.join(sample_buildout, 'js'))
>>> write('js/a.js', '''
... goog.provide('pwt.provideA');
...
... goog.require('pwt.provideB');
... ''')
>>> write('js/b.js', '''
... goog.provide('pwt.provideB');
... ''')
>>> mkdir('js/goog')
>>> write('js/goog/base.js', open(os.path.join(os.path.dirname(__file__), "goog/base.js")).read())

roots

Generate a dependency file specifing where all your JavaScript files are located within your project.

>>> write('buildout.cfg', '''
... [buildout]
... parts = deps.js
...
... [deps.js]
... recipe = pwt.recipe.closurebuilder:dependency
... output = %(dir)s/deps.js
... roots = %(dir)s/js
... ''' %{'dir': sample_buildout})
>>> print system(buildout)
Installing deps.js.
<BLANKLINE>
>>> cat('deps.js')
// This file was autogenerated by buildout[deps.js].
// Please do not edit.
goog.addDependency('a.js', ['pwt.provideA'], ['pwt.provideB']);
goog.addDependency('b.js', ['pwt.provideB'], []);
goog.addDependency('goog/base.js', ['goog'], []);

roots with prefix

Generate a dependency file specifing where all your JavaScript files are located within your project. Sometimes files are served under different namespaces, then we use the root_with_prefix option.

>>> write('buildout.cfg', '''
... [buildout]
... parts = deps.js
...
... [deps.js]
... recipe = pwt.recipe.closurebuilder:dependency
... output = %(dir)s/deps.js
... root_with_prefix = %(dir)s/js /media
... ''' %{'dir': sample_buildout})
>>> print system(buildout)
Uninstalling deps.js.
Installing deps.js.
<BLANKLINE>
>>> cat('deps.js')
// This file was autogenerated by buildout[deps.js].
// Please do not edit.
goog.addDependency('/media/a.js', ['pwt.provideA'], ['pwt.provideB']);
goog.addDependency('/media/b.js', ['pwt.provideB'], []);
goog.addDependency('/media/goog/base.js', ['goog'], []);

Compile

Using the information above, generate a small minimized version of your JavaScript application.

>>> write('buildout.cfg', '''
... [buildout]
... parts = deps.js compiled.js
...
... [deps.js]
... recipe = pwt.recipe.closurebuilder:dependency
... output = %(dir)s/d1.js
... roots = %(dir)s/js
...
... [compiled.js]
... recipe = pwt.recipe.closurebuilder:compile
... dependency = deps.js
... output = %(dir)s
... inputs = %(dir)s/js/a.js
... ''' %{'dir': sample_buildout})
>>> output = system(buildout)
>>> output == '''root: Compiling with the following command: java -jar %(jar)s --js %(dir)s/js/goog/base.js --js %(dir)s/js/b.js --js %(dir)s/js/a.js
... Uninstalling deps.js.
... Installing deps.js.
... Installing compiled.js.
... ''' %{'jar': os.path.join(os.path.dirname(__file__), 'compiler-1111.jar'),
...       'dir': sample_buildout}
True
>>> ls(sample_buildout)
-  .installed.cfg
-  0fb0e24aea59f6281f3c615ffe650823.js
d  bin
-  buildout.cfg
-  d1.js
d  develop-eggs
d  eggs
d  js
d  parts

We can also specify extra files that might not have goog.provide declarations in them so won't be picked up by the depswriter recipe.

>>> write('js/c.js', '''
... alert('c');
... ''')
>>> write('buildout.cfg', '''
... [buildout]
... parts = deps.js compiled.js
...
... [deps.js]
... recipe = pwt.recipe.closurebuilder:dependency
... output = %(dir)s/d1.js
... roots = %(dir)s/js
...
... [compiled.js]
... recipe = pwt.recipe.closurebuilder:compile
... dependency = deps.js
... output = %(dir)s
... inputs = %(dir)s/js/a.js
... extra_js = js/c.js
... ''' %{'dir': sample_buildout})
>>> output = system(buildout)
>>> output == '''root: Compiling with the following command: java -jar %(jar)s --js js/c.js --js %(dir)s/js/goog/base.js --js %(dir)s/js/b.js --js %(dir)s/js/a.js
... Uninstalling compiled.js.
... Updating deps.js.
... Installing compiled.js.
... ''' %{'jar': os.path.join(os.path.dirname(__file__), 'compiler-1111.jar'),
...       'dir': sample_buildout}
True
>>> ls(sample_buildout)
-  .installed.cfg
-  b68ab8e7a5aa2b2787d35e9b762fb191.js
d  bin
-  buildout.cfg
-  d1.js
d  develop-eggs
d  eggs
d  js
d  parts