Package: pwt.recipe.closurebuilder
This is a simple wrapper around the closurebuilder tools from the
Closure project from Google.DependenciesSetup 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())rootsGenerate 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 prefixGenerate 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'], []);CompileUsing 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  partsWe 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