# Building a customized D3.js bundle
The D3.js version distributed with pprof is customized to only include the modules required by pprof.
## Dependencies
First, it's necessary to pull all bundle dependencies. We will use a JavaScript package manager, [npm](https://www.npmjs.com/), to accomplish that. npm dependencies are declared in a `package.json` file, so create one with the following configuration:
```js
{
"name": "d3-pprof",
"version": "1.0.0",
"description": "A d3.js bundle for pprof.",
"scripts": {
"prepare": "rollup -c && uglifyjs d3.js -c -m -o d3.min.js"
},
"license": "Apache-2.0",
"devDependencies": {
"d3-selection": "1.1.0",
"d3-hierarchy": "1.1.5",
"d3-scale": "1.0.6",
"d3-format": "1.2.0",
"d3-ease": "1.0.3",
"d3-array": "1.2.1",
"d3-collection": "1.0.4",
"d3-transition": "1.1.0",
"rollup": "0.51.8",
"rollup-plugin-node-resolve": "3",
"uglify-js": "3.1.10"
}
}
```
Besides the bundle dependencies, the `package.json` file also specifies a script called `prepare`, which will be executed to create the bundle after `Rollup` is installed.
## Bundler
The simplest way of creating a custom bundle is to use a bundler, such as [Rollup](https://rollupjs.org/) or [Webpack](https://webpack.js.org/). Rollup will be used in this example.
First, create a `rollup.config.js` file, containing the configuration Rollup should use to build the bundle.
```js
import node from "rollup-plugin-node-resolve";
export default {
input: "index.js",
output: {
format: "umd",
file: "d3.js"
},
name: "d3",
plugins: [node()],
sourcemap: false
};
```
Then create an `index.js` file containing all the functions that need to be exported in the bundle.
```js
export {
select,
selection,
event,
} from "d3-selection";
export {
hierarchy,
partition,
} from "d3-hierarchy";
export {
scaleLinear,
} from "d3-scale";
export {
format,
} from "d3-format";
export {
easeCubic,
} from "d3-ease";
export {
ascending,
} from "d3-array";
export {
map,
} from "d3-collection";
export {
transition,
} from "d3-transition";
```
## Building
Once all files were created, execute the following commands to pull all dependencies and build the bundle.
```
% npm install
% npm run prepare
```
This will create two files, `d3.js` and `d3.min.js`, the custom D3.js bundle and its minified version respectively.
# References
## D3 Custom Bundle
A demonstration of building a custom D3 4.0 bundle using ES2015 modules and Rollup.
[bl.ocks.org/mbostock/bb09af4c39c79cffcde4](https://bl.ocks.org/mbostock/bb09af4c39c79cffcde4)
## d3-pprof
A repository containing all previously mentioned configuration files and the generated custom bundle.
[github.com/spiermar/d3-pprof](https://github.com/spiermar/d3-pprof)
|