I've started using npm for JavaScript package management recently. Although I do have a fair understanding of package management in different environments (let’s say using apt, rvm/gem, and pythonbrew/virtualenv/pip), I don't quite understand how npm fully fits in.

I would like to know more on how the "-g" flag works and why should I use it.

As in most blogs and wiki, they refer to using "-g" when installing without explaining why, and I understand that these packages are installed globally.

  • But why should I always install these packages globally?
  • What does it mean to install these packages without the "-g" flag?
  • What do I do to installed packages locally, let’s say sandboxed for different projects?
  • How can I then, make a list of npm packages used in a project and bundle it in the project if I needed it to check it in with version control (if possible at all)?
npm
Edit
Report