Does npm install work? A practical developer guide

Explore how npm install works, when to use npm ci, and how to troubleshoot common issues. Learn with clear examples, best practices, and step-by-step instructions for reliable Node.js project installs.

Install Manual
Install Manual Team
·5 min read
Quick AnswerFact

Yes. does npm install work in most Node.js projects: it reads package.json, resolves dependencies, and installs them into node_modules. It also respects lockfiles for deterministic installs when package-lock.json or npm-shrinkwrap.json exists. In CI, you might use npm ci for a clean, reproducible install. If it fails, check Node, network, and permissions.

What does npm install do and why it matters

The npm install command is the cornerstone of working with Node.js projects. At its core, does npm install work by reading the dependencies listed in your project’s package.json, resolving all required versions, and placing a complete set in the node_modules directory. When a lockfile such as package-lock.json exists, npm install honors it to ensure the exact same dependency tree across environments. This determinism is essential for reproducible builds, testing, and production parity. In real-world workflows, npm install is often the first step after cloning a repo. The flow typically starts with a clean workspace, then executes installation to prepare the environment for builds and tests. The Install Manual team emphasizes how lockfiles help teams avoid “works on my machine” problems by pinning precise versions.

Bash
# Initialize a new project and create a package.json npm init -y # Install dependencies listed in package.json (default behavior) npm install
Bash
# If a lockfile exists, npm install will use it to ensure deterministic resolution # This is the baseline for production-like environments npm install
Bash
# If you want a fresh install from lockfile only (no package.json parsing), use npm ci npm ci
  • Parameters and behavior overview:
    • Reads package.json and resolves dependencies
    • Creates or updates node_modules
    • Uses package-lock.json (or npm-shrinkwrap.json) for deterministic installs
    • Handles optional dependencies, peer dependencies, and engines constraints as defined

Common variations and notes:

  • npm i is an alias for npm install; both perform the same core task.
  • npm ci is optimized for CI environments, performing a clean install from the lockfile.
  • If the lockfile is out of sync, npm install can update it, while npm ci will error until the lockfile is aligned.
Bash
# Quick alias form npm i
Bash
# Determine exactly what is installed according to the lockfile npm ci --prefer-offline --no-audit --no-fund

In summary, npm install works reliably when you follow consistent project practices, including a committed lockfile and clear scripts that define your build and test workflow.

paragraphNote”:null},

] ,

prerequisites

Steps

Estimated time: 25-40 minutes

  1. 1

    Prepare project

    Ensure you have a project directory with a package.json. If you’re starting fresh, run npm init -y to generate a minimal package.json. This step sets the baseline for your dependency graph.

    Tip: Keep a clean repo by excluding node_modules from version control and committing the lockfile.
  2. 2

    Choose installation method

    For development, run npm install to install all dependencies. In CI or when you need a pristine install, use npm ci to reproduce the exact dependency tree from the lockfile.

    Tip: In CI, prefer npm ci for reproducibility.
  3. 3

    Verify installation

    List installed packages or run tests to confirm installation integrity. If there are peer dependency warnings, address compatibility in your package.json.

    Tip: Run npm ls to inspect the installed tree.
  4. 4

    Maintain dependencies

    Update dependencies deliberately with npm update or by editing package.json, then regenerate the lockfile with npm install. Commit changes to lockfile to keep environments aligned.

    Tip: Always test after updates before deploying.
Pro Tip: Use npm ci in CI to ensure deterministic, fast installs.
Warning: Avoid sudo or root ownership when installing global packages on Linux/macOS to prevent permission issues.
Note: Keep npm and Node.js up to date to benefit from performance and security fixes.
Pro Tip: Store exact versions with --save-exact to lock down tight reproducibility.

Prerequisites

Required

Optional

  • Optional: CI environment for npm ci (e.g., GitHub Actions)
    Optional

Commands

ActionCommand
Install dependencies from package.jsonInstalls all dependencies listed in package.json and updates node_modules and package-lock.json if needed.npm install
Install a specific package and save to dependenciesExample: npm install [email protected] installs a specific version and updates package.json and package-lock.json.npm install <pkg>@<version>
Install dependencies deterministically (CI)Uses lockfile to reproduce exact dependency tree; fails if lockfile is out of date.npm ci
Install a package globallyGlobal installation affects system-wide commands like typescript or eslint.npm install -g <pkg>
Remove a packageRemoves a package from node_modules and updates package.json if it’s saved.npm uninstall <pkg>

Got Questions?

What does npm install do in a new project?

In a new project, npm install reads package.json, fetches declared dependencies, and creates node_modules along with a package-lock.json. This ensures your environment matches the required versions. If a lockfile exists, npm install adheres to it for consistency.

In a new project, npm install downloads the dependencies listed in package.json, creates node_modules, and records exact versions in a lockfile to ensure consistent setups.

What is the difference between npm install and npm ci?

npm install updates dependencies and lockfiles as needed, great for development. npm ci performs a clean, deterministic install strictly from the lockfile, and fails if the lockfile is out of date, making it ideal for CI pipelines.

npm install is for development with flexible updates; npm ci is for CI and reproducible builds using the lockfile.

Why might npm install fail due to network issues?

Network problems can block package downloads, cause EAI_AGAIN or ENOTFOUND errors, or trigger partial installs. Check your internet connection, proxy settings, and registry access. Clearing the npm cache and retrying can help in some cases.

Network issues can block downloads. Check connectivity, proxies, and retry after clearing the cache.

Can npm install install dev dependencies?

Yes. By default, npm install installs both dependencies and devDependencies unless you set NODE_ENV=production or use --omit=dev in newer npm versions. Use npm ci to avoid installing dev dependencies in CI when appropriate.

Yes, it installs dev dependencies unless you tell it not to.

Should I commit package-lock.json?

Yes. Committing package-lock.json helps ensure deterministic installs across environments. Update it consistently with npm install and review changes during code reviews.

Lockfiles help ensure consistent installs across machines; commit them and keep them updated.

Main Points

  • Install dependencies with npm install to honor package.json and lockfiles
  • Use npm ci in CI for deterministic builds
  • Lockfile presence is critical for reproducible installs
  • Global vs local installs have different lifecycles and scopes

Related Articles