How to npm install to only save dependency to pack

2020-02-08 07:56发布

问题:

I'm adding dependencies to a package.json that will be used as part of a provisioning process for a virtual machine. As such, I don't actually need to install the modules locally since the provisioner will do that for me inside the VM. So is there any way to do the following:

npm install --save <module>

So that it only creates a dependency for the latest version of the module in package.json without actually downloading the module or creating a node_modules folder?

The --dry-run option is close, as it doesn't create a node_modules folder but it also doesn't write to package.json either.

For now, I'm manually doing the following each time I need to update packages before re-provisioning the VM:

rm -rf node_modules

Other reasons for this might include being able to easily build a package.json file in low-bandwidth situations such as tethering, where you know you'll need the module eventually but don't want to spare the bandwidth.

回答1:

There is no way to do that with npm that I'm aware of.

There are two npm packages for doing this; I've never used either of them, but they might be worth a try:

  • https://www.npmjs.com/package/npm-add
  • https://www.npmjs.com/package/adddep

Hope this helps!



回答2:

Interestingly combining --package-lock-only with --no-package-lock seems to do this

npm install --package-lock-only --no-package-lock PACKAGE

This does not create or update the package-lock.json file. Only adds an entry to the package.json

UPDATE

This was actually a bug and is now fixed in npm 6.9.0

https://github.com/npm/cli/pull/146

https://npm.community/t/release-npm-6-9-0/5911



回答3:

Was searching for the solution. Haven't found, then made a script which adds dependencies (latest versions) to the package.json file skipping the installation process.

https://www.npmjs.com/package/add-dependencies

Installation

If not using with npx (see below), you can install with:

$ npm install add-dependencies [-g]

Usage

Go to a directory with the target package.json and run:

$ add-dependencies <dependencies> [target] [--no-overwrite]

or with npx:

$ npx add-dependencies <dependencies> [target] [--no-overwrite]

where dependencies is the list of dependencies divided by space, and target is one of the following:

  • --dev / --save-dev / -D for devDependencies
  • --peer / --save-peer / -P for peerDependencies
  • --optional / --save-optional / -O for optionalDependencies

If no target argument passed, dependencies are written to dependencies.

Use --no-overwrite flag to prevent already existing packages in package.json from being overwritten.

Example:

$ add-dependencies moment@2.0.0 react@16.8 redux eslint --dev

or with npx:

$ npx add-dependencies moment@2.0.0 react@16.8 redux eslint --dev

Hope this could help someone else.



回答4:

npm install --save packagename then npm uninstall packagename (without --save flag) accomplishes this, though an empty node_modules folder is created