# Webpack Manifest Plugin [![Build Status](https://travis-ci.org/danethurber/webpack-manifest-plugin.svg?branch=master)](https://travis-ci.org/danethurber/webpack-manifest-plugin) [![codecov](https://codecov.io/gh/danethurber/webpack-manifest-plugin/badge.svg?branch=master)](https://codecov.io/gh/danethurber/webpack-manifest-plugin?branch=master) [![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/webpack-manifest-plugin#)
Webpack plugin for generating an asset manifest.
> NOTE: The following is related to the next major version of `webpack-manifest-plugin`, please check https://github.com/danethurber/webpack-manifest-plugin/blob/1.x/README.md for `v1` documentation
## Install
```bash
npm install --save-dev webpack-manifest-plugin
```
## Usage
In your `webpack.config.js`
```javascript
var ManifestPlugin = require('webpack-manifest-plugin');
module.exports = {
// ...
plugins: [
new ManifestPlugin()
]
};
```
This will generate a `manifest.json` file in your root output directory with a mapping of all source file names to their corresponding output file, for example:
```json
{
"mods/alpha.js": "mods/alpha.1234567890.js",
"mods/omega.js": "mods/omega.0987654321.js"
}
```
## API:
```js
// webpack.config.js
module.exports = {
output: {
publicPath
},
plugins: [
new ManifestPlugin(options)
]
}
```
### `options.fileName`
Type: `String`
Default: `manifest.json`
The manifest filename in your output directory.
### `options.publicPath`
Type: `String`
Default: `output.publicPath`
A path prefix that will be added to values of the manifest.
### `options.basePath`
Type: `String`
A path prefix for all keys. Useful for including your output path in the manifest.
### `options.writeToFileEmit`
Type: `Boolean`
Default: `false`
If set to `true` will emit to build folder and memory in combination with `webpack-dev-server`
### `options.seed`
Type: `Object`
Default: `{}`
A cache of key/value pairs to used to seed the manifest. This may include a set of [custom key/value](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json) pairs to include in your manifest, or may be used to combine manifests across compilations in [multi-compiler mode](https://github.com/webpack/webpack/tree/master/examples/multi-compiler). To combine manifests, pass a shared seed object to each compiler's ManifestPlugin instance.
### `options.filter`
Type: `Function(FileDescriptor): Boolean`
Filter out files. [FileDescriptor typings](#filedescriptor)
### `options.map`
Type: `Function(FileDescriptor): FileDescriptor`
Modify files details before the manifest is created. [FileDescriptor typings](#filedescriptor)
### `options.sort`
Type: `Function(FileDescriptor): number`
Sort files before they are passed to `generate`. [FileDescriptor typings](#filedescriptor)
### `options.generate`
Type: `Function(Object, FileDescriptor, string[]): Object`
Default: `(seed, files, entrypoints) => files.reduce((manifest, {name, path}) => ({...manifest, [name]: path}), seed)`
Create the manifest. It can return anything as long as it's serialisable by `JSON.stringify`. [FileDescriptor typings](#filedescriptor)
### `options.serialize`
Type: `Function(Object): string`
Default: `(manifest) => JSON.stringify(manifest, null, 2)`
Output manifest file in different format then json (i.e. yaml).
## FileDescriptor
```ts
FileDescriptor {
path: string;
name: string | null;
isInitial: boolean;
isChunk: boolean;
chunk?: Chunk;
isAsset: boolean;
isModuleAsset: boolean;
}
```
### `chunk`
Type: [`Chunk`](https://github.com/webpack/webpack/blob/master/lib/Chunk.js)
Only available is `isChunk` is `true`
### `isInitial`
Type: `Boolean`
Is required to run you app. Cannot be `true` if `isChunk` is `false`.
### `isModuleAsset`
Type: `Boolean`
Is required by a module. Cannot be `true` if `isAsset` is `false`.
## License
MIT © [Dane Thurber](https://github.com/danethurber)