cram.js has three modes of command-line operation:
- HTML auto-configuration via Code Inference
- run.js auto-configuration via Code Inference
- Manual configuration
If your server-side environment allows you to place your HTML documents in a static location, you may be able to use Code Inference on your HTML file(s) directly. In its simplest form, the command line looks like this:
node path/to/cram client/myapp.html
If your app's HTML documents are generated dynamically and don't exist at
development time, you can still take advantage of some of cram.js's Code
Inference features. Point cram at a "run.js" file
and tell cram where to find the app's modules using the --root
command line option.
node path/to/cram client/myapp/run.js --root client/myapp/
If the file has a ".html" extension, it is assumed to be an HTML-formatted file. All other file extensions are assumed to reference a run.js file.
However, in most situations, you'll want to specify some configuration options that don't apply to the run-time operation of your application. These "compile-time" overrides should be placed in a separate file from your run-time files.
Here's how you specify an additional overrides file:
node path/to/cram client/myapp.html production_build_options.json
This is simply a shortcut for the following, more explicit way to specify a configuration file:
node path/to/cram client/myapp.html --config production_build_options.json
These files do not need to be strictly JSON. They can be simple object literals.
cram.js uses the same config options as curl.js, including baseUrl
, main
,
and paths
, packages
, plugins
, and preloads
with the
following additions and caveats.
excludes
: an array of module ids (strings) that should not be bundledexcludeRx
: a RegExp (or array of Regexp or array of strings) that may also be used to exclude the ids of modules from the bundlepaths
,packages
,plugins
, andpreloads
: unlike other config options, these lists are merged with the same lists in earlier config files.apiName
,apiContext
,defineName
, anddefineContext
are not yet supported.
The caveat to the the merged lists is that it's impossible to remove items
from the lists. You can, however, remove the entire list by specifying a null
value for the config option. This allows the list to be ignored by cram.js,
but still used by curl.js.
Once you've removed the list, you could include a new one in a subsequent config file:
node path/to/cram client/myapp.html remove_paths.json production.json
In some cases, cram.js may not properly infer your intentions. Also, for advanced applications, you'll need fine-grained control over what cram.js does. For both of these situations, cram.js looks for a few other options on the command line.
cram.js supports the following command-line arguments. In cases where these conflict with configuration options, the command-line arguments take precedence.
-? -h --help
provides this help message.
-m --main --include
includes the following file into the bundle.
You may specify more than one by repeating this option.
--exclude
excludes the following file from the bundle.
You may specify more than one by repeating this option.
-r --root --appRoot
specifies the path from the current working directory to
the effective location of your html documents. This serves as the
root of the baseUrl in an AMD configuration.
-c --config
specifies an AMD configuration file.
You may specify more than one by repeating this option.
-o --output
specifies the output folder for the generated bundle(s).
--loader -l
tells cram to include the following file as an AMD loader.