npm for Dependencies, npx for Execution: The Ultimate Node.js Cheat Sheet
I was mentoring a fresh Node.js dev yesterday who asked, "npm or npx, what's the difference?" I smiled and said: "Think of npm as your toolbox, you install tools to keep. npx is like borrowing one for a quick job, then returning it. Use npm for what your project needs forever; use npx for one-time tasks. Simple, right?" He nodded, and suddenly, it clicked.
If you're working with Node.js, you've undoubtedly used npm countless times. But what about npx? While they sound similar and work together seamlessly, they serve distinctly different purposes. Understanding when to use each can dramatically improve your development workflow.
What's the Fundamental Difference?
Here's the simplest way to think about it:
- npm = Manage (install, update, configure, and publish packages)
- npx = Execute (run packages quickly without permanent installation)
Let's dive deeper into when and why you'd use each tool.
npm: Node Package Manager
What It Does
npm is the package manager for Node.js. It's your go-to tool for installing, updating, configuring, publishing, and managing packages in your projects.
Key Characteristics
- Permanent Installation: When you use npm, packages are installed permanently, either locally in your project's
node_modules/folder or globally on your system - Dependency Management: It manages your entire project's dependency tree, including devDependencies, scripts, and version control
- Package.json Integration: Heavily relies on
package.jsonto track and manage dependencies - Long-term Storage: Downloads packages and their dependencies and keeps them for repeated use
When to Use npm
- When you need a package for long-term project use
- When managing project dependencies
- When you need faster repeated access to packages
- When publishing your own packages
Common npm Commands
npm install <package> # Install a package
npm uninstall <package> # Remove a package
npm update <package> # Update a package
npm init -y # Initialize a new project
npm list # List installed packages
Example:
npm install lodash
This installs lodash permanently in your project's node_modules folder.
🟢 npx: Node Package Execute
What It Does
npx is a package runner that comes bundled with npm (version 5.2+). It allows you to execute package binaries directly from the npm registry without installing them permanently.
Key Characteristics
- Temporary Execution: Downloads packages temporarily, runs them, and clears them from cache
- No Permanent Installation: By default, doesn't clutter your project with packages you only need once
- No package.json Required: Works even outside of a Node.js project
- On-Demand Downloading: Only downloads what you need, when you need it
When to Use npx
- When you need to try or test a tool once
- When running CLI tools occasionally
- When you want to avoid global installations
- When testing different versions of a package
Common npx Commands
npx <package> # Run a package
npx <package>@<version> # Run specific version
npx --package <package> <command> # Run with specific package
npx -p <package> <command> # Shorthand for above
Example:
npx cowsay "Hello World"
This runs cowsay instantly without installing it to your system.
Side-by-Side Comparison
| Feature | npm | npx |
|---|---|---|
| Purpose | Package manager | Package runner |
| Installation | Permanent (local/global) | Temporary (cached) |
| Storage | node_modules/ |
~/.npm/_npx/ (temporary) |
| Best For | Long-term dependencies | One-time execution |
| package.json | Required | Not required |
| Performance | Faster (already installed) | Slower first run (downloads) |
| Network Usage | Downloads & keeps | Downloads temporarily |
Real-World Use Cases
When to Choose npm
You're building a React application and need libraries like lodash, axios, or moment.js that you'll use throughout your project's lifecycle:
npm install lodash axios
These packages become part of your project's dependencies and are listed in package.json.
When to Choose npx
Scenario 1: Creating a new project
npx create-react-app my-app
You only need create-react-app once to scaffold your project. No need to install it globally!
Scenario 2: Testing a CLI tool
npx http-server
Quickly spin up a local server without permanently installing http-server.
Scenario 3: Running specific versions
npx [email protected] --version
Test a specific version without affecting your global installation.
Pro Tips
- npx is already installed! If you have npm version 5.2 or higher (which you probably do), npx comes bundled with it. No extra installation needed.
- Avoid global pollution: npx helps you avoid cluttering your system with globally installed packages you rarely use.
- Always up-to-date: When you run
npx <package>, it typically fetches the latest version, ensuring you're using current tools.
Force installation with npx: If you want npx to install a package, you can use:
npx --package <package> <package>
The Golden Rule
Use npm when you need it forever. Use npx when you just need it now.
This simple mantra will guide you in choosing the right tool for every situation.
Conclusion
Both npm and npx are essential tools in the Node.js ecosystem, but they serve different purposes:
- npm is your dependency manager, the foundation of your project's package ecosystem
- npx is your execution tool, the quick, temporary runner for CLI tools and one-off tasks
Mastering when to use each will make you a more efficient developer, keep your projects cleaner, and save you from unnecessary global installations.
What about you? Which tool do you reach for more often in your daily development? Are you team npm, team npx, or do you use both strategically? Drop your thoughts in an email!