Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including whybundled with all npm packages installed. Try it out:

var whybundled = require("whybundled")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

whybundled v1.4.3

Answers the question – Why the hell is this module in a bundle?


NPM Version


Github Issues

Travis Status

Coverage Status

Commitizen Friendly

Ever wondered why any particular module ended up in a bundle? WhyBundled is here to answer exactly this question.

It's meant to be used alongside stats report from webpack.

Quick Start

npm i -g whybundled

whybundled stats.json ← stats file generated by wepback

whybundled default report


  $ whybundled stats.json "[pattern]"                   [default command]
  $ whybundled stats.json --ignore babel-runtime,tslib  [default command]
  $ whybundled stats.json --by styled-components        [by command]

Default options:
  [pattern]          Optional pattern used to filter output to only matched modules
                     Note: you might need to wrap the pattern in quotes to use wildcards, e.g. "*.jsx"
  --ignore           Comma separated list of glob pattern to exclude modules from final output
  --modulesOnly      Only include modules
  --filesOnly        Only include files
  --directOnly       Only include direct dependencies
  --transitiveOnly   Only include transitive dependencies
  --duplicatesOnly   Only include modules that have duplicates in a resulting bundle
  --limit            Limits output of reasons and files [default: 20]

By options [--by]:
  --ignore           Comma separated list of glob pattern to exclude modules from final output
  --limit            Limits output of reasons and files [default: 20]
  --only             Limits output to only include modules that were included by specified module exclusively

Other options:
  -v, --version      Shows version.
  --help             Shows help.

  $ whybundled stats.json --modulesOnly


Stats Analyses

  • Outputs list of all modules/files included in the bundle in from most imported to least imported order.
  • Builds a chain of dependencies for transitive dependencies.
  • Shows all files that were included for particular module.
  • Shows all reasons why particular module was included.
MODULE  isobject
├─ imported: 1 time     ← number of times module imported
├─ type: [transitive]   ← type of a dependency can be either direct or transitive
│  └─ isobject -> is-plain-object -> styled-components    ← for transitive dependencies whybundled outputs a chain of dependencies up to the closest direct
├─ locations:  ← where module is located in a project
│  └─ ../node_modules/isobject/
├─ files:      ← list of files that were included for this module
│  └─ ../node_modules/isobject/index.js
└─ reasons:    ← list of reasons why module was included in a bundle
   └─ is-plain-object
      └─ ../node_modules/is-plain-object/index.js  10:15-34  [cjs require]

Duplicates Badge

If module has been bundled several times from different locations whybundled adds [multiple] badge next to the locations field:

whybundled duplicates

Brought by

Using --by flag whybundled shows all modules that were brought into the bundle by a particular module:

whybundled stats.json --by styled-components

whybundled brought by


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free