Grunt task to surround JavaScript code with the universal module definition.
Install this grunt plugin next to your project's grunt.js gruntfile with: npm install grunt-umd
Add the following line to your project's grunt.js
gruntfile:
grunt.loadNpmTasks('grunt-umd');
Then configure the task:
grunt.initConfig({
umd: {
all: {
options: {
src: 'path/to/input.js',
dest: 'path/to/output.js', // optional, if missing the src will be used
template: 'path/to/template.hbs', // optional, a template from templates subdir
// can be specified by name (e.g. 'umd'); if missing, the templates/umd.hbs
// file will be used from [libumd](https://github.com/bebraw/libumd)
objectToExport: 'library', // optional, internal object that will be exported
amdModuleId: 'id', // optional, if missing the AMD module will be anonymous
globalAlias: 'alias', // optional, changes the name of the global variable
deps: { // optional, `default` is used as a fallback for rest!
'default': ['foo', 'bar'],
amd: ['foobar', 'barbar'],
cjs: ['foo', 'barbar'],
global: ['foobar', {depName: 'param'}]
}
}
}
}
});
And finally use it:
grunt umd:all
Note! If you want to indent the output, consider using some other plugin for that. The output
grunt-umd
gives is functional but not entirely aesthetic.
The following predefined Handlebars-templates are available:
umd
- the default template; the template is based on umd/returnExports.jsunit
- the template that can be helpful to wrap standalone CommonJS/Node modules; it is slightly modified version ofumd
template; ifobjectToExport
option is not specified thenmodule.exports
value will be used by default
The template that should be applied can be specified by template
option (e.g. 'umd'
or 'unit'
).
You can create and use your own template (see predefined templates for examples).
The path to the template file should be set relative to Gruntfile.
- Install dependencies -
npm install
- Go to demo -
cd demo
- Go to some demo directory -
cd <demo directory>
- Execute demo -
grunt
You should see some /output
after this. Study Gruntfile.js
to understand how it generates.
- Alex Lawrence - Project founder, previous maintainer
- Juho Vepsäläinen - Handlerbars fixes etc., current maintainer
- Stéphane Bachelier - Code indentation option
- Milan Adamovsky - Enhanced configurability and Rails assets pipeline support
- Brian J. Miller - Indent only non-empty lines
- Denis - Add default value for objectToExport and template option support
- Boris Cherny - Properly export module IDs containing dashes to browser globals
- Paulo Gaspar - Fix GitHub user name at repo and homepage URLs
- tomyouds - Ignore indent option for empty lines
- Rameş Aliyev - Browserify example
- Daniel Koch - Fixed link to UMD template
- Louis Ameline - Made the
dest
property optional
MIT. See LICENSE for more info.