Allow configuration of JVM arguments in build

This commit is contained in:
Tim Schaub
2014-04-18 08:39:49 -06:00
parent fbdbbfb7a7
commit 3dd5fb88e5
3 changed files with 20 additions and 5 deletions
+1 -1
View File
@@ -15,7 +15,7 @@
"url": "https://github.com/openlayers/ol3/issues" "url": "https://github.com/openlayers/ol3/issues"
}, },
"devDependencies": { "devDependencies": {
"closure-util": "~0.10.0", "closure-util": "~0.11.0",
"async": "~0.2.10", "async": "~0.2.10",
"htmlparser2": "~3.7.1", "htmlparser2": "~3.7.1",
"jshint": "~2.4.4", "jshint": "~2.4.4",
+13 -4
View File
@@ -30,6 +30,10 @@ function assertValidConfig(config, callback) {
callback(new Error('Config missing "compile" object')); callback(new Error('Config missing "compile" object'));
return; 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)) { if (config.src && !Array.isArray(config.src)) {
callback(new Error('Config "src" must be an array')); callback(new Error('Config "src" must be an array'));
return; return;
@@ -88,15 +92,20 @@ function getDependencies(src, callback) {
/** /**
* Run the compiler. * 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 {Array.<string>} paths List of paths to source files.
* @param {function(Error, string)} callback Called with the compiled output or * @param {function(Error, string)} callback Called with the compiled output or
* any error. * any error.
*/ */
function build(options, paths, callback) { function build(config, paths, callback) {
log.info('ol', 'Compiling ' + paths.length + ' sources'); log.info('ol', 'Compiling ' + paths.length + ' sources');
var options = config.compile;
options.js = paths.concat(options.js || []); options.js = paths.concat(options.js || []);
closure.compile(options, callback); if (config.jvm) {
closure.compile(options, config.jvm, callback);
} else {
closure.compile(options, callback);
}
} }
@@ -112,7 +121,7 @@ function main(config, callback) {
assertValidConfig.bind(null, config), assertValidConfig.bind(null, config),
generateExports.bind(null, config.exports), generateExports.bind(null, config.exports),
getDependencies.bind(null, config.src), getDependencies.bind(null, config.src),
build.bind(null, config.compile) build.bind(null, config)
], callback); ], callback);
} }
+6
View File
@@ -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. 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. * **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`). * **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. * **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. 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. 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.