A Grunt plugin to bundle one or more AMD packages into a single define statement. This means you can just require the bundle and get all the packages loaded via requirejs.
This plugin requires Grunt ~0.4.1
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-requirejs-bundle --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-requirejs-bundle');
In your project's Gruntfile, add a section named requirejs-bundle
to the data object passed into grunt.initConfig()
.
grunt.initConfig({
'requirejs-bundle': {
components: {
src: 'src/components/',
dest: 'tmp/components.js'
},
extensions: {
src: 'src/extensions/',
dest: 'tmp/extensions.js'
},
},
})
The requirejs-bundle
task will enumerate all Bower packages (containing bower.json) in the provided src directory and build them into a single AMD statement.
define(["package1", "package2", "package3" /*and so on*/])
The path to the main javascript file is identified by the 'main' property in each packages bower.json, if this is not present then index.js will be assumed.
Type: String
Default value: undefined
Paths of source files globbed in the src parameter can be treated as relative to this path.
Type: String
Default value: '*'
Packages that are bundled with this task are only included if their name matches this grunt filespec pattern.
Type: String
Default value: '.'
The AMD call will be called with this as the first parameter.
Type: String
Default value: 'require'
Possible values: 'require'
or 'define'
The requirejs-bundle task will emit either an AMD require statement or an AMD define. The default is an AMD require.
Type: String
Default value: undefined
Directory to look for overrides in. Files found in this directory will superceed the files found elsewhere.
Requires options.requireOverrideBaseUrl
to be set.
Type: String
Default value: undefined
The require path to prepend to each overridden file.
Requires options.appOverrideUrl
to be set.
define("module-name", ["package1", "package2", "package3" /*and so on*/])
In this example, custom options are used bundle all the packages in the components directory into a single AMD module called 'my-components', the module is going to be compiled by requirejs with the baseUrl set to 'src', so we also set the 'requirejs-bundle' baseUrl to make the paths the same.
grunt.initConfig({
requirejs_bundle: {
src: 'src/components/',
dest: 'tmp/my-components.js'
options: {
moduleName: 'my-components',
baseUrl: 'src'
}
},
})
Assuming we have a two bower packages (package1 and package2) in the components directory, the resulting AMD module will look like this:-
define("my-components", ["components/package1/index", "components/package1/index"]);
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.
- 0.0.8 - Fixed a bug that added the module name to require() calls
- 0.0.7 - Added support for requireCall option
- 0.0.6 - expand the full package name
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1