错误:在Elastic Beanstalk上运行`npm install`时EACCES:权限被拒绝

我已经通过Elastic Beanstalk调配了一个默认的干净node.js应用程序,并且有一个node.js脚本尝试在项目目录( /var/app/current/deploy-dist )中运行npm install ,但是,下面的权限错误被抛出:

 npm WARN locking Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' npm WARN locking at Error (native) npm WARN locking /tmp/.npm/_locks/staging-f212e8d64a01707f.lock failed { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' npm WARN locking at Error (native) npm WARN locking errno: -13, npm WARN locking code: 'EACCES', npm WARN locking syscall: 'open', npm WARN locking path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' } npm WARN deploy-dist No description npm WARN deploy-dist No repository field. npm WARN deploy-dist No license field. npm ERR! Linux 4.4.35-33.55.amzn1.x86_64 npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/npm" "install" npm ERR! node v6.9.1 npm ERR! npm v3.10.8 npm ERR! path /tmp/.npm/_locks/staging-f212e8d64a01707f.lock npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' npm ERR! at Error (native) npm ERR! { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' npm ERR! at Error (native) npm ERR! errno: -13, npm ERR! code: 'EACCES', npm ERR! syscall: 'open', npm ERR! path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' } npm ERR! npm ERR! Please try running this command again as root/Administrator. npm ERR! Please include the following file with any support request: npm ERR! /var/app/current/deploy-dist/npm-debug.log 

package.json只是一个:

 { "dependencies": { "node-fetch": "^1.3.3" } } 

用sudo运行npm install显然npm install ,但是作为解决scheme,最好避免使用。

根据npm docsbuild议,将NPM_CONFIG_PREFIX设置为~目录也不起作用,问题依然存在。

我怀疑问题在于/tmp/.npm权限不正确

 drwxr-xr-x 114 root root 4.0K Dec 27 17:04 .npm 

这是令人困惑的,因为我期望一个简单的npm install开箱即用。

更新:不应该说项目目录已经包含一个node_modules文件夹,但是即使删除它,运行npm install也不能修复它。

我有这个问题! 您可以使用ebextensions创建一个post-deploy脚本来更改tmp/npm/.locks文件夹的权限。

在您的node.js项目中,如果您还没有一个.ebextensions文件夹,请创建一个.ebextensions文件夹。 然后,用下面的yaml添加一个新的配置文件,例如00_create_postdeploy_script.config

 files: "/opt/elasticbeanstalk/hooks/appdeploy/post/99_fix_node_permissions.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash chown -R nodejs:nodejs /tmp/.npm/_locks/ 

部署时,将在/opt/elasticbeanstalk/hooks/appdeploy/post创建一个名为99_fix_node_permissions.sh ,如下所示:

 #!/usr/bin/env bash chown -R nodejs:nodejs /tmp/.npm/_locks/ 

因为它位于该文件夹中,所以在您的应用程序部署完成后它将自动运行 – 并根据需要更改权限。

编辑:如果您遇到了整个 .npm文件夹的权限问题,那么您应该将配置文件的最后一行更改为:

 chown -R nodejs:nodejs /tmp/.npm/ 

我以前有这个问题,在我的情况下清理缓存解决了我的问题。 请试试这个

 npm cache clean 

希望能帮助到你。