gpt4 book ai didi

node.js - npm 为全局安装的包设置奇怪的权限

转载 作者:搜寻专家 更新时间:2023-10-31 22:30:52 25 4
gpt4 key购买 nike

我正准备在家里开始一些 node.js 开发,但在全局安装 npm 包时偶然发现了一些奇怪的行为。

我使用 WebStorm 作为我的 IDE,并且想使用 ECMAScript6 功能,这意味着我必须转译源代码,WebStorm 通过使用 Babel 来完成。

所以我尝试全局安装 Babel:

$ sudo npm install -g babel-cli

发生的事情是,这些文件都可以从 root 用户正常访问,并且 babel-cli 目录和其中的所有文件和目录看起来都很好,只要我以 root 身份查看。当我尝试以另一个用户的身份查看或使用包时,问题就来了:

$ ls -l /usr/lib/node_modules/babel-cli/
ls: cannot access '/usr/lib/node_modules/babel-cli/lib': Permission denied
ls: cannot access '/usr/lib/node_modules/babel-cli/index.js': Permission denied
ls: cannot access '/usr/lib/node_modules/babel-cli/scripts': Permission denied
ls: cannot access '/usr/lib/node_modules/babel-cli/node_modules': Permission denied
ls: cannot access '/usr/lib/node_modules/babel-cli/package.json': Permission denied
ls: cannot access '/usr/lib/node_modules/babel-cli/README.md': Permission denied
ls: cannot access '/usr/lib/node_modules/babel-cli/bin': Permission denied
total 0
d????????? ? ? ? ? ? bin/
d????????? ? ? ? ? ? lib/
d????????? ? ? ? ? ? node_modules/
d????????? ? ? ? ? ? scripts/
-????????? ? ? ? ? ? index.js
-????????? ? ? ? ? ? package.json
-????????? ? ? ? ? ? README.md

无论我安装哪个包,都变成这样

我在 Ubuntu 16.04 上使用 node.js v6.3.0 和 npm 3.10.3。

我按照说明全新安装了 node.js here .如果我尝试更新 npm,则全局 npm 目录会发生同样的情况,并且 npm 变得不可用,root 除外。

当我将全局 node_modules 作为用户列出时,我看到了

$ ll /usr/lib/node_modules/
total 8,0K
drwxr--r-- 6 nobody root 4,0K jul 15 23:50 babel-cli/
drwxr-xr-x 10 root root 4,0K jul 15 23:21 npm/

除了目录归nobody 所有,我看不出有什么特别之处。

安装包当然没有错误

npm 和/或 node 有问题吗? Ubuntu有问题吗?或者我如何安装 Node ?可能是什么原因喜欢那样吗?

本地安装工作正常,对于 babel-cli 包,将其安装为本地开发包是一个可接受的解决方法。我仍然想知道在全局安装包时会发生什么,以及为什么。


问题 answered here .问题与 npmnode 无关。

最佳答案

如果你想全局安装一个包,只需要使用不带sudo的命令喜欢:

$ npm install -g <package>

如果您遇到 EACCES 或权限错误,请使用 sudo应该避免,但您应该修复您的权限,以便 npm 可以在没有 sudo 的情况下运行.

如果您没有写入 npm 用于存储全局包的文件夹的权限,则会引发这些错误。要解决这个问题,您可以先找到 npm 默认目录的路径:

$ npm config get prefix

在大多数系统上,它将是 /usr/local并且您将能够修复此文件夹的权限。如果文件夹是/usr/usr/lib ,你不应该改变这个目录的权限,因为它会导致一些问题,在这种情况下,如果你不想改变默认目录的权限,你可以配置 npm 使用不同的目录。

如果您可以并且想要更改默认文件夹的权限,您可以使用:

$ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

它将 npm 目录的所有者更改为当前用户的名称。

如果你想改变 npm 的默认目录,你可以从创建这个新文件夹开始:

$ mkdir ~/.npm-packages

然后,配置 npm 以使用这个新文件夹:

$ npm config set prefix '~/.npm-packages'

您还需要将这个新文件夹添加到您的 PATH (例如使用 ~/.profile):

export PATH=~/.npm-packages/bin:$PATH

此时,您可以使用 source ~/.profile 更新您的系统变量并测试在不使用 sudo 的情况下全局安装包.

您应该能够安装包而不会出现任何权限错误,因为 npm 将使用 ~/.npm-packages文件夹。

您可以在 npm documentation 上找到有关此事的更多信息.

关于node.js - npm 为全局安装的包设置奇怪的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com