ChatGPT解决这个技术问题 Extra ChatGPT

How can I change the cache path for npm (or completely disable the cache) on Windows?

I've installed Node.js on my Windows 7 x64 development machine, the manual way:

mkdir C:\Devel\nodejs
cd C:\Devel\nodejs
set NODE_PATH=%CD%
setx /M PATH "%PATH%;%NODE_PATH%"
setx /M NODE_PATH "%NODE_PATH%\node_modules"

I've placed the main node x64 binary along with npm package manager in C:\Devel\nodejs. Works like a charm and I can update the main binary without dealing with the installer.

The only problem I can't solve is moving the cache folder. When I install a local package:

npm install express

... cache is placed under %APP_DATA%\npm-cache folder. I'd like to change it to:

C:\Devel\nodejs\npm-cache

How can I change the npm cache folder, or disable it completely?

Shouldn't the location be: %APPDATA%\npm-cache

B
Ben McCann

You can change npm cache folder using the npm command line. (see https://docs.npmjs.com/cli/v6/using-npm/config#cache)

So you might want to try this command :

> npm config set cache C:\Devel\nodejs\npm-cache --global 

Also note that if you're going to go down the npmrc route, the global npmrc file isn't located directly at $PREFIX, but rather in $PREFIX\etc
When doing this on Windows 7 using Cygwin I had to add a forward slash in front of every backslash to avoid the backslashes being removed.
After executing do a npm config list to verify correct setting
I'm having trouble finding command that you are referring, anywhere in linked document
Run npm --global cache verify after running this command
R
Rui Jarimba

You can also set an environment variable with export npm_config_cache=/path/to/cache (Unix) or set npm_config_cache=C:\path\to\cache (Win) as an alternative to npm config set (this is true for all config options in npm).

For anyone using docker you can add the env var at runtime with:

docker run -e npm_config_cache=/path/to/cache mydockerimage:tag

Just for the sake of curiosity, why would i change the cache directory using dockers? Which scenario are you aware of that could use benefit of this?
@fudo it is often useful to use a persistent cache as a volume mount with docker. If I'm running an npm install repeatedly in docker, I can mount a cache directory in from my host machine, so I don't lose the cache every time I run.
L
Luke P. Issac

You can also do following:

For having cache path as you wish, for a single package while installing it:

npm install packageName --cache path/to/some/folder

For having cache path as you wish, for all the packages in package.json:

Just be in the directory where package.json is as usual and do

npm install --cache path/to/some/folder

You may not find this in npm documentation but i have tried it with npm 6 and it works. Looks like it works since npm 5 [Refer: How to specify cache folder in npm5 on install command?


S
Stanley85

In Windows you can simply cd to the desired cache folder and do npm set cache --global


R
Rui Jarimba

In addition, I found that running an update command works also - for example:

npm update npm

Lastly, one can check their npm-cache directory to see if is being filled or not.


L
LAW WEI LIANG

Solution

Paste the following code into npmrc file.

Location of npmrc file: C:\Program Files\nodejs\node_modules\npm\npmrc

prefix=D:\nodejs\npm
cache=D:\nodejs\npm-cache

Notes: There is no '.' in front of npmrc

Diagrams

NPMRC file folder look like this

https://i.stack.imgur.com/apgCQ.png

NPMRC Content look like this

https://i.stack.imgur.com/3NTEi.png

Hope it helps. Cheers