For the quick reader : this QA is about the package.json bundledDependencies field, not about the package.
What bundledDependencies do
"bundledDependencies" are exactly what their name implies. Dependencies that should be inside your project. So the functionality is basically the same as normal dependencies. They will also be packed when running npm pack
.
When to use them
Normal dependencies are usually installed from the npm registry.
Thus bundled dependencies are useful when:
- you want to re-use a third party library that doesn't come from the npm registry or that was modified
- you want to re-use your own projects as modules
- you want to distribute some files with your module
This way, you don't have to create (and maintain) your own npm repository, but get the same benefits that you get from npm packages.
When not to use bundled dependencies
When developing, I don't think that the main point is to prevent accidental updates though. We have better tools for that, namely code repositories (git, mercurial, svn...) or now lock files.
To pin your package versions, you can use:
Option1: Use the newer NPM version 5 that comes with node 8. It uses a package-lock.json
file (see the node blog and the node 8 release)
Option2: use yarn instead of npm
.
It is a package manager from facebook, faster than npm
and it uses a yarn.lock
file. It uses the same package.json
otherwise.
This is comparable to lockfiles in other package managers like Bundler
or Cargo. It’s similar to npm’s npm-shrinkwrap.json, however it’s not
lossy and it creates reproducible results.
npm
actually copied that feature from yarn
, amongst other things.
- Option3: this was the previously recommended approach, which I do not recommend anymore. The idea was to use
npm shrinkwrap
most of the time, and sometimes put the whole thing, including the node_module folder, into your code repository. Or possibly use shrinkpack. The best practices at the time were discussed on the node.js blog and on the joyent developer websites.
See also
This is a bit outside the scope of the question, but I'd like to mention the last kind of dependencies (that I know of): peer dependencies. Also see this related SO question and possibly the docs of yarn
on bundledDependencies.