gulp-requirejs-optimize
Version:
RequireJS optimizer plugin for gulp
143 lines (111 loc) • 4.57 kB
Markdown
[](https://travis-ci.org/jlouns/gulp-requirejs-optimize)
[](http://badge.fury.io/js/gulp-requirejs-optimize)
[](https://coveralls.io/r/jlouns/gulp-requirejs-optimize)
[](https://david-dm.org/jlouns/gulp-requirejs-optimize)
Optimize AMD modules in javascript files using the requirejs optimizer.
```sh
$ npm install --save-dev gulp-requirejs-optimize
```
```js
var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
gulp.task('scripts', function () {
return gulp.src('src/main.js')
.pipe(requirejsOptimize())
.pipe(gulp.dest('dist'));
});
```
gulp-requirejs-optimize accepts almost all of the same options as [r.js optimize](https://github.com/jrburke/r.js/blob/master/build/example.build.js) (see below).
```js
var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
gulp.task('scripts', function () {
return gulp.src('src/main.js')
.pipe(requirejsOptimize({
optimize: 'none',
insertRequire: ['foo/bar/bop'],
}))
.pipe(gulp.dest('dist'));
});
```
Each file passed to the plugin is optimized as a separate module.
```js
var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
gulp.task('scripts', function () {
return gulp.src('src/modules/*.js')
.pipe(requirejsOptimize())
.pipe(gulp.dest('dist'));
});
```
Options can also be specified in the form of an options-generating function to generate custom options for each file passed. This can be used to apply custom logic while optimizing multiple bundles or modules in an app.
```js
var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
gulp.task('scripts', function () {
return gulp.src('src/modules/*.js')
.pipe(requirejsOptimize(function(file) {
return {
name: '../vendor/bower/almond/almond',
optimize: 'none',
useStrict: true,
baseUrl: 'path/to/base',
include: 'subdir/' + file.relative
};
}))
.pipe(gulp.dest('dist'));
});
```
The plugin supports [gulp-sourcemaps](https://github.com/floridoo/gulp-sourcemaps) only if `preserveLicenseComments` is set to false, as described in the `r.js` docs. If `preserveLicenseComments` is not specified and the `gulp-sourcemaps` plugin is detected, the plugin will automatically set `preserveLicenseComments` to false.
```js
var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
var sourcemaps = require('gulp-sourcemaps');
gulp.task('scripts', function () {
return gulp.src('src/main.js')
.pipe(sourcemaps.init())
.pipe(requirejsOptimize())
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist'));
});
```
Options are the same as what is supported by the [r.js optimizer](https://github.com/jrburke/r.js/blob/master/build/example.build.js) except for `out`, `modules`, and `dir`.
The options parameter can be specified as a static object or an options-generating function. Options-generating functions are passed a file object and are expected to generate an options object.
r.js supports `out` as a string describing a path or a function which processes the output. Since we need to pass a virtual file as output, we only support the string version of `out`.
r.js supports an array of `modules` to optimize multiple modules at once, using the `dir` parameter for the output directory. The same thing can be accomplished with this plugin by passing the main file of each module as input to the plugin. `gulp.dest` can be used to specify the output directory.
This means an r.js config file for optimizing multiple modules that looks like this:
```json
{
"baseUrl": "src/modules",
"dir": "dist",
"modules": [{
"name": "one"
}, {
"name": "two"
}]
}
```
Would look like this as a gulp task with this plugin:
```js
gulp.task('scripts', function () {
return gulp.src('src/modules/*.js')
.pipe(requirejsOptimize())
.pipe(gulp.dest('dist'));
});
```
MIT © [Jonathan Lounsbury](https://github.com/jlouns)