pnpm install is used to install all dependencies for a project.

In a CI environment, installation fails if a lockfile is present but needs an update.

Inside a workspace, pnpm install installs all dependencies in all the projects. If you want to disable this behavior, set the recursive-install setting to false.

tl;dr

Command Meaning
pnpm i --offline no network requests
pnpm i --frozen-lockfile pnpm-lock.yaml is not updated
pnpm i --prefer-frozen-lockfile when possible, pnpm-lock.yaml is not updated

Options

--offline

If true, pnpm will use only packages already available in the store. If a package won't be found locally, the installation will fail.

--prefer-offline

Added in: v1.28.0

If true, staleness checks for cached data will be bypassed, but missing data will be requested from the server. To force full offline mode, use --offline.

--ignore-scripts

Do not execute any scripts defined in the project package.json and its dependencies.

Note: this flag does not prevent the execution of pnpmfile.js

--prod, -P

pnpm will not install any package listed in devDependencies if the NODE_ENV environment variable is set to production. Use this flag to instruct pnpm to ignore NODE_ENV and take its production-or-not status from this flag instead.

--dev, -D

Only devDependencies are installed regardless of the NODE_ENV.

--no-optional

optionalDependencies are not installed.

--lockfile-only

Added in: v1.26.0 (initially named shrinkwrap-only)

When used, only updates pnpm-lock.yaml and package.json instead of checking node_modules and downloading dependencies.

--frozen-lockfile

Added in: v1.37.1 (initially named frozen-shrinkwrap)

If true, pnpm doesn't generate a lockfile and fails if an update is needed or no lockfile is present.

--reporter=<name>

Allows to choose the reporter that will print info about the installation progress.

--use-store-server

Added in: v1.30.0

Starts a store server in the background. The store server will keep running after installation is done. To stop the store server, run pnpm server stop

--filter <package_selector>

Read more about filtering.