# broccoli-watchify [](https://travis-ci.org/eploko/broccoli-watchify)
[](https://gitter.im/eploko/broccoli-watchify?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
The broccoli-watchify plugin bundles your assets with
[watchify](https://github.com/substack/watchify).
## Installation
```bash
npm install --save-dev broccoli-watchify
```
## Example
```js
const watchify = require('broccoli-watchify');
const options = {
browserify: {
entries: ['./app.js'],
debug: true
},
nodeModulesPath: process.cwd() + '/node_modules', // provide the node_modules you want to resolve from
outputFile: 'bundled/app.js',
cache: true,
init: function (b) {
b.transform('reactify', {'es6': true});
b.external('$');
}
};
const tree = watchify(tree, options);
```
## API
### watchify(tree, options)
* `tree`: A [broccoli tree](https://github.com/broccolijs/broccoli#plugin-api-specification) or a directory path as a string
#### Options
* `browserify`: (defaults to `{}`) Options passed to the [browserify constructor](https://github.com/substack/node-browserify#var-b--browserifyfiles-or-opts)
* `outputFile`: (defaults to `"./browserify.js"`) Output file
* `cache`: (defaults to `true`) A boolean flag to potentially switch the caching off and act like a plain browserify. Can be helpful in assembling bundles for production and _not_ including all the full local path names in the bundle, which is not possible in the watchify mode.
* `init`: (defaults to a no-op) A callback function that receives the browserify instance after it's created. Use this to call any of the [browserify API methods](https://github.com/substack/node-browserify#methods) on the instance, including `add`, `require`, `external`, `exclude` and so on.
* `nodeModulesPath`: (defaults to `process.cwd()/node_modules`) Absolute path to node_modules.
## Changelog
### 2.0.0
* expose a way to configure which node_modules to resolve from
* support broccoli 1x and 2x
* modernize codebase
* upgrade dependencies
### 1.0.0
* No longer use watchify directly, as we do not require its watcher and it is not configurable. Rather we populate the cache, the same way watchify does.
* Stable output, so downstream plugins aren't invalidated if our output doesn't change.
* Much faster.
* Basic tests.
* Browserified files are browserified relative to the broccoli `inputPath`, not the realpath.
### 0.2.0
* Add the `init` option to provide a possibility of configuration of the browserify instance with a custom function.
* Remove the `entries` and `require` options.
* Add the `cache` option to turn off the watchify behavior and act like a plain browserify.
### 0.1.3
* Initial release
## Contributors
The code of this plugin is originally based on the [broccoli-browserify](https://github.com/gingerhendrix/broccoli-browserify) plugin by [Gareth Andrew](http://github.com/gingerhendrix).
## License
The MIT License (MIT). See [LICENSE](LICENSE) for details.
Copyright © 2014 Andrey Subbotin.