npm is not just for node... npm is for EVERYTHING
npm -- the node package manager -- is a bit of a beast. In fact it's a lot of a beast. it's a crazed, snaggle-toothed snarling monster hell-bent on ruling the entire world and crushing all opposition beneath its giant cloven hoofs.
If you've only heard of
npm in connection with node, you may be excused for thinking, as the name implies, that it is just for managing node packages.
node is a specific server-side technology, so perhaps that is all that
npm cares about?
Not at all.
npm cares about everything.
npm does everything.
Here is how I thought of it, when I was young and foolish.
Consider these three basic types of package managers:
- Machine-level package managers
These package managers install entire applications. Think chocolatey, apt-get or yum.
- Application-level package managers
These package managers install components an application relies upon during dev/build. Think nuget (or gem, or npm)
- Front-end package managers
These specialize in components for the front end component. Think Bower. (Or
nugetin previous asp.net versions)
npm comfortably belonged in that second tier. It's like
nuget I thought, but for
Then I learned about the "-g" (global) parameter. And realized that with
npm you can install packages that are available "globally".
So it has crept up into that top tier as well. It can do what chocolatey, apt-get and yum do.
Not a problem I thought... then I took a closer look at Bower. It's an interesting and well-liked package manager for the front end.
But I started hearing more and more about people preferring to use
npm for front end packages too. Apparently you combine
dedupe -- and you quickly see it's got the 3rd category covered as well.
Not to worry I thought.
npm is just one part of a rich tapestry of tools.
Task runners, for example, are another category of tool used by web developers. There's a growing number of these task runners out there, and two in particular always seem to be vying for supremacy: Grunt and Gulp. But recently I've been hearing more and more about
"npm scripts" are a way of making
npm aware of easy to use aliases that point to longer scripts, exposed by a
They give you a convenient way to just use
npm for everything.
And that's where we've come to now. You can just do every damn thing in
npm. I'm kind of hearing an update to Atwood's law, something like:
Everything that can be done in npm will be done in npm. Any thing that can't be done in npm will be replaced by a thing that can.
npm stands for "node's perfect monster".
Even if you have never used node, and never want to use node, you will still need to use npm.
By January of 2017, all other technologies are being phased out permanently, in order to make room for nothing but pure npm.
Introducing intellisense-like command completion for npm on windows
I say all of this by way of introducing a helpful tool that gives you intellisense-like behavior when using npm on windows.
Doug Finke has written a powershell module that gives you tab-completion when using npm on windows.
Find-Module TabExpansionPlusPlus -repository PsGallery | Install-Module -Scope AllUsers Find-Module NPMTabCompletion -repository PsGallery | Install-Module -Scope AllUsers
(As shown, you first install
Then, from a freshly opened prompt (that does not need to be elevated), import the module into your session.
Import-Module TabExpansionPlusPlus Import-Module NPMTabCompletion
(You will also need to either add those commands to your profile, or run them in every powershell session where you want
npm tab completion to work.)
This not only gives you intellisense-style completion for
npm commands, it also looks in the nearest
package.json file to see if there are any commands (i.e.
npm scripts) you've specified locally.
Here's an animated gif of it in action:
I've published a more thorough guide to installing it, here: npm tab completion with powershell. There are troubleshooting notes as well, in case you fall into the same problems I fell into (including the sad news that the time came to uninstall PsGet which has been replaced with PowerShellGet)
(That documentation is at a "Today I Learned" site I've been building out, day by day. There's a lot of stuff there already. I'll blog about how to build a site like it as soon as I get a moment!)Next → ← Previous
I'm currently writing a book about how to build your first product. If you want to build your first product, please sign up to be notified when the book is available.