What This Error Means
npm failed due to missing filesystem permissions (EACCES).
How to Fix It
- Identify the path npm is failing on (look for the last referenced file path in the error output).
- Avoid
sudo npm installfor project installs. It often causes mixed ownership insidenode_modules. - Fix ownership of npm cache and project folder (example:
sudo chown -R $(whoami) ~/.npm). - If the error is for global installs, use a user-writable prefix (example:
npm config set prefix ~/.npm-global) and ensurePATHincludes it. - Retry after cleaning local state when safe (common: remove
node_modulesand retry install).
Why It Happens
- The current user does not have permission to write to the project folder, npm cache, or global prefix.
How to Verify
- Re-run the original command and confirm the filesystem error no longer appears.
- If this is a permission fix, confirm new files in
node_modulesare owned by the expected user.
Manual filesystem checks
- Check ownership/permissions for the failing path:
ls -la <path>.
Common CLI Output
npm ERR! code EACCESnpm ERR! Error: EACCES: permission deniednpm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/package' Prevention Tips
- Keep npm cache and project directories owned by the build user.
- Avoid running project installs as root unless you know exactly why you need it.
- Ensure CI runners have enough disk space and sensible file descriptor limits.
Where This Can Be Triggered
github.com/npm/cli/blob/417daa72b09c5129e7390cd12743ef31bf3ddb83/lib/commands/cache.js
This is a representative filesystem write path during npm operations. Filesystem codes like this are raised by Node/OS when this write fails. - GitHub
break
}
output.standard(`Deleted: ${key}`)
await cacache.rm.entry(cachePath, key)
// XXX this could leave other entries without content!
await cacache.rm.content(cachePath, entry.integrity)
}