5

我有一个 NFS 挂载的主文件夹,并试图通过 npm 设置全局包,例如:

sudo npm install -g jshint

这给了我一个错误,因为在 sudo 下我无法在远程服务器上创建任何东西(在 npm 之外尝试过)

npm ERR! Error: EACCES, open '/home/explunit/.npm/a02a2468-jshint.lock'
npm ERR!  { [Error: EACCES, open '/home/explunit/.npm/a02a2468-jshint.lock']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/home/explunit/.npm/a02a2468-jshint.lock' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

我敢肯定有人会在 2 分钟内出现并说“不要使用 sudo——真正的开发人员会明白如何在没有它的情况下设置 node/npm!”,但是 a) 我一直不清楚这是怎么回事考虑到npm 自述文件建议使用 sudo 和 b) 在这种情况下,我真的不想要任何与我的特定用户相关的东西(它是一个构建服务器)

所以我想真正的问题是如何让 npm 忽略我的主文件夹并为 .npm 使用其他位置?

4

2 回答 2

7

尝试使用此更改缓存的位置。

npm config set cache /SOMEWHERE/ELSE

/SOMEWHERE/ELSE 应该是运行命令的用户可以写入的地方。

于 2013-02-21T00:44:54.473 回答
0

我还遇到了在 nfs 挂载上执行 npm 的麻烦,对我来说,问题是,nfs 挂载没有挂载可执行文件,这通常适用于存储位置,因为它可以保护您免于执行从其他地方下载的潜在危险代码。

尽管如此,有时您还是需要从 nfs 挂载执行脚本。我建议使用单独的挂载点,然后挂载可执行文件。

这可以通过以下方式实现:

  • 检查您的安装选项:
安装 | grep nfs

其中列出了您的 nfs 挂载,例如:

设备挂载点 nfs (rw, noexec ,nosuid,nodev,nolock,addr=...)
  • 仔细查看选项部分。如果列出了“ noexec ”选项,则无论您使用 chmod 设置什么文件权限,您都无法从那里执行某些代码。

所以在'etc/fstab'里面,而不是例如

设备挂载点 nfs rw,nolock, users

利用

设备挂载点 nfs rw,nolock, exec

('exec' 和 'users' 选项可能会相互干扰,如果需要,请参阅 'mount' 手册页以了解它们的正确顺序)

于 2018-08-25T11:18:46.160 回答