Sabo Boz
Sabo Boz

Reputation: 2575

permission needed to install serverless via npm

I am trying to install serverless via npm (npm install -g serverless) but get the following error:

npm ERR! code EACCES
npm ERR! syscall rename
npm ERR! path /usr/local/lib/node_modules/serverless
npm ERR! dest /usr/local/lib/node_modules/.serverless-Ls3sFIzE
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/serverless' -> '/usr/local/lib/node_modules/.serverless-Ls3sFIzE'
npm ERR!  [Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/serverless' -> '/usr/local/lib/node_modules/.serverless-Ls3sFIzE'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'rename',
npm ERR!   path: '/usr/local/lib/node_modules/serverless',
npm ERR!   dest: '/usr/local/lib/node_modules/.serverless-Ls3sFIzE'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

Does anyone know how to do this without having to switch the node versions you're using?

EDIT: When I run this with sudo I get the following output:

npm WARN deprecated [email protected]: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: this library is no longer supported
npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142

changed 672 packages, and audited 673 packages in 25s

50 packages are looking for funding
  run npm fund for details

found 0 vulnerabilities

However, when I try to run serverless invoke local --function f1 I get zsh: command not found: serverless - after I install with sudo what do I need to do so that the command is recognised?

Upvotes: 3

Views: 4366

Answers (1)

Aaron Stuyvenberg
Aaron Stuyvenberg

Reputation: 3787

Your permissions are goofed. Speaking generally, you don't want to install anything from npm with sudo.

You can sudo chown yourUser:yourGroup -R /usr/local/lib/node_modules. (If you're on macOS, your group is probably staff. You can find your group by running ls -l in your home directory and looking at the label adjacent to your username)

A simple alternative is a best practice anyway - install the serverless framework as a development dependency of your project:

npm i -D serverless

And then instead of running serverless deploy you can run npx serverless deploy.

Then as you check in the package.json file to version control, other collaborators will use the same version of the serverless framework.

Upvotes: 5

Related Questions