.npm 文件夹的备用位置(以避免安装 NFS 的主目录)
Posted
技术标签:
【中文标题】.npm 文件夹的备用位置(以避免安装 NFS 的主目录)【英文标题】:alternate location for .npm folder (to avoid NFS-mounted home) 【发布时间】:2013-02-20 22:00:33 【问题描述】:我有一个 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 readme 建议使用 sudo,这是如何设计的,并且 b) 在这种情况下,我真的不想要任何与我的特定用户相关的东西(它是一个构建服务器)
所以我想真正的问题是如何让 npm 忽略我的主文件夹并为 .npm 使用其他位置?
【问题讨论】:
您可以将主目录中的.npm
替换为指向可写的非nfs 位置的符号链接。
【参考方案1】:
尝试用这个改变缓存的位置。
npm config set cache /SOMEWHERE/ELSE
/SOMEWHERE/ELSE 应该是运行命令的用户可以写入的地方。
【讨论】:
谢谢,但看起来这在“sudo npm install -g some_package”场景中仍然无法解决它,因为 sudo 不会查看用户的本地 npm 配置sudo npm -g config get cache
仍然给我~/.npm
。缓存只是为了最大限度地减少您需要再次下载的内容。你试过了还是没用?
是的,尝试了你的命令,然后是我上面原始问题中的命令,得到了同样的错误。但是,看起来有一个 --global 可以放在命令的末尾,这将使其甚至适用于 sudo 环境设置。在别处设置 tmp 也需要类似的命令
对我没有帮助,因为这个命令本身正在尝试创建~/.npmrc
,而写入~
正是我想要避免的。
npm_config_userconfig=/tmp npm ...
将使用 /tmp 作为 .npmrc 的位置【参考方案2】:
我还遇到了在 nfs 挂载上执行 npm 的问题,对我来说,问题是,nfs 挂载不是可执行的,这通常适用于存储位置,因为它可以保护您免于执行从其他地方下载的潜在危险代码。
尽管如此,有时您还是需要从 nfs 挂载上执行脚本。我建议使用单独的挂载点,然后挂载可执行文件。
这可以通过以下方式达到:
检查您的安装选项:挂载 | grep nfs
其中列出了您的 nfs 挂载,例如:
设备挂载点 nfs (rw,noexec,nosuid,nodev,nolock,addr=...)仔细查看选项部分。如果列出了“noexec”选项,则无论您使用 chmod 设置什么文件权限,您都无法从那里执行某些代码。
所以在 'etc/fstab' 中,而不是例如
设备挂载点 nfs rw,nolock,用户
使用
设备挂载点 nfs rw,nolock,exec
('exec' 和 'users' 选项可能会相互干扰,如果需要,请参阅 'mount' 手册页以了解它们的正确顺序)
【讨论】:
以上是关于.npm 文件夹的备用位置(以避免安装 NFS 的主目录)的主要内容,如果未能解决你的问题,请参考以下文章