What is the purpose?
Package Phobia reports the size of an npm package before you install it.
This is useful for inspecting potential
devDependencies without using up precious disk space or waiting minutes for
npm install. Ain't nobody got time for dat.
Results are saved so the first person might wait a bit to view package size, but everyone else gets to see the results instantly!
A good use case might be comparing test runners, web frameworks, or even bundlers. Click one of the links below to see Package Phobia in action!
- Test Harnesses: tap vs tape
- Web Frameworks: express vs micro
- Task Runners: grunt vs gulp
- HTTP Requests: request vs node-fetch
- Glob Patterns: glob vs tiny-glob
- Arguments: yargs vs arg
- Site Generators: gatsby vs hexo
- Type Checkers: typescript vs flow-bin
- Linters: eslint vs jslint
- Color Formatters: chalk vs colorette
- Command Line Interfaces: @angular/cli vs @babel/cli
- Desktop Frameworks: nw vs electron
- Headless Browsers: puppeteer vs chrome-aws-lambda
- Package Managers: npm vs yarn
How is this different?
- Package Phobia THIS TOOL web app that reports the install size of a package over time.
- Bundle Phobia web app that reports the size after webpack bundles the package over time.
- Cost Of Modules cli that reports the size of your currently installed packages.
- Badge Size badge service that reports the gzip size of a single file from a package as svg.
- Size Limit cli that fails if the bundled (or non-bundled) size of your app is too large.
- Bundle Size cli that fails CI if a file's size is too large.
- package-size cli that compares the bundle size of multiple packages.
- npm-size cli that compares the npm install size of multiple packages.
- Require So Slow cli that traces the time of each
requiremodule in a node.js app.
- Why Bundled? cli that uses webpack stats to show your number of imports and package size.
- Do you even lift? - cli that reports size after rollup bundles the package via npm team.
- Import Cost extension (and cli) that displays package size inline in the editor.
- npm download size web app that reports the download size (network traffic) of a package.
- npm download size cli cli that reports the download size (network traffic) of a package.
- Build Size - GitHub App that comments on a PR with the size of your build artifacts
Why is the size different than size on disk?
Did you install a package and compare the size on disk with the size reported on Package Phobia?
This number will likely be different because Package Phobia doesn't know anything about your hard drive so it can't predict how blocks are allocated.
Packages are known to contain many small
.js files which can actually use up a lot of disk space, more than if there was one large, contiguous file.
See this question for more details.
What are the long term goals?
Ideally, this information could be listed on npmjs.com, npms.io, or bundlephobia.com.
Below are the relevant feature requests for each website.
- GitHub issue for bundlephobia.com
- GitHub issue for npmjs.com
- GitHub issue for npms.io
- GitHub issue for staticgen.com
- GitHub issue for cost-of-modules
- GitHub issue for npm-cli
- GitHub issue for bundlesize
- GitHub issue for npmgraph.an
Hopefully, this would lead to publishers taking notice of their bloated packages such as the following:
- micro is not micro
- ava is not minimal
- typescript has doubled in size since v2.0.0
- bundlesize is 10x larger after npm install since v0.14.0
- email@example.com accidentally adds 300 dependencies
- socket.io is 6x smaller
- firstname.lastname@example.org is 3x smaller
- email@example.com is 4x smaller
- firstname.lastname@example.org is 11x smaller
- email@example.com is 2x smaller
npm dependencies in the media
I'm not the first one to notice npm packages are snowballing into bloated dependencies of dependencies.
Below are some other users who comically point out this JS bloat.
Developed by ceriously.com