Skip to content

Commit

Permalink
Allow configuration of JVM arguments in build
Browse files Browse the repository at this point in the history
  • Loading branch information
tschaub committed Apr 29, 2014
1 parent fbdbbfb commit 3dd5fb8
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"url": "https://github.com/openlayers/ol3/issues"
},
"devDependencies": {
"closure-util": "~0.10.0",
"closure-util": "~0.11.0",
"async": "~0.2.10",
"htmlparser2": "~3.7.1",
"jshint": "~2.4.4",
Expand Down
17 changes: 13 additions & 4 deletions tasks/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ function assertValidConfig(config, callback) {
callback(new Error('Config missing "compile" object'));
return;
}
if (config.jvm && !Array.isArray(config.jvm)) {
callback(new Error('Config "jvm" must be an array'));
return;
}
if (config.src && !Array.isArray(config.src)) {
callback(new Error('Config "src" must be an array'));
return;
Expand Down Expand Up @@ -88,15 +92,20 @@ function getDependencies(src, callback) {

/**
* Run the compiler.
* @param {Object} options Options for Closure Compiler.
* @param {Object} config Build configuration object.
* @param {Array.<string>} paths List of paths to source files.
* @param {function(Error, string)} callback Called with the compiled output or
* any error.
*/
function build(options, paths, callback) {
function build(config, paths, callback) {
log.info('ol', 'Compiling ' + paths.length + ' sources');
var options = config.compile;
options.js = paths.concat(options.js || []);
closure.compile(options, callback);
if (config.jvm) {
closure.compile(options, config.jvm, callback);
} else {
closure.compile(options, callback);
}
}


Expand All @@ -112,7 +121,7 @@ function main(config, callback) {
assertValidConfig.bind(null, config),
generateExports.bind(null, config.exports),
getDependencies.bind(null, config.src),
build.bind(null, config.compile)
build.bind(null, config)
], callback);
}

Expand Down
6 changes: 6 additions & 0 deletions tasks/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,18 @@ Builds the library based on a configuration file. See the `--help` option for m

Build configuration files are JSON files that are used to determine what should be exported from the library and what options should be passed to the compiler.

**Required configuration properties**

* **exports** - `Array.<string>` An array of symbol names or patterns to be exported (names that are used in your application). For example, including `"ol.Map"` will export the map constructor. Method names are prefixed with `#`. So `"ol.Map#getView"` will export the map's `getView` method. You can use a `*` at the end to match multiple names. The pattern `"ol.Map#*"` will export all map methods.

* **compile** - `Object` An object whose properties are [Closure Compiler options](https://github.com/openlayers/closure-util/blob/master/compiler-options.txt). Property names match the option names without the `--` prefix (e.g. `"compilation_level": "ADVANCED_OPTIMIZATIONS"` would set the `--compilation_level` option). Where an option can be specified multiple times, use an array for the value (e.g. `"externs": ["one.js", "two.js"]`). Where an option is used as a flag, use a boolean value (e.g. `"use_types_for_optimization": true`).

**Optional configuration properties**

* **src** - `Array.<string>` Optional array of [path patterns](https://github.com/isaacs/minimatch/blob/master/README.md) for source files. This defaults to `["src/**/*.js"]` which will match all `.js` files in the `src` directory. To include a different set of source files, provide an array of path patterns. Note that these patterns are `/` delimited even on Windows.

* **jvm** - `Array.<string>` Optional array of [command line options](https://code.google.com/p/closure-compiler/wiki/FAQ#What_are_the_recommended_Java_VM_command-line_options?) for the compiler. By default, the Compiler is run with `['-server', '-XX:+TieredCompilation']`.

The build task generates a list of source files sorted in dependency order and passes these to the compiler. This takes the place of the `--js` options that you would use when calling the compiler directly. If you want to add additional source files, typically you would use the `src` array described above. This works with sources that have `goog.require` and/or `goog.provide` calls (which are used to sort dependencies). If you want to force the inclusion of files that don't use `goog.require` or `goog.provide`, you can use the `js` property of the `compile` object. Paths in the `js` array will be passed to the compiler **after** all other source files.

Paths in your config file should be relative to the current working directory (when you call `node tasks/build.js`). Note that this means paths are not necessarily relative to the config file itself.
Expand Down

0 comments on commit 3dd5fb8

Please sign in to comment.