什么可能导致错误 Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
?
npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log
更改您的文件权限...像这样
首先检查谁拥有该目录
ls -la /usr/local/lib/node_modules
它拒绝访问,因为 node_module 文件夹归根用户所有
drwxr-xr-x 3 root wheel 102 Jun 24 23:24 node_modules
所以这需要通过将 root 更改为您的用户来更改,但首先运行下面的命令以检查您当前的用户 How do I get the name of the active user via the command line in OS X?
id -un
或 whoami
然后更改所有者
sudo chown -R [owner]:[owner] /usr/local/lib/node_modules
或者
sudo chown -R ownerName: /usr/local/lib/node_modules
或者
sudo chown -R $USER /usr/local/lib/node_modules
为了最大限度地减少权限错误的可能性,您可以将 npm 配置为使用不同的目录。在此示例中,您将在主目录中创建并使用一个隐藏目录。
备份您的计算机。在命令行的主目录中,为全局安装创建一个目录:
mkdir ~/.npm-global
配置 npm 以使用新的目录路径:
npm config set prefix '~/.npm-global'
在您首选的文本编辑器中,打开或创建一个
~/.profile
文件并添加这一行:
export PATH=~/.npm-global/bin:$PATH
在命令行上,更新您的系统变量:
source ~/.profile
要测试您的新配置,请在不使用 sudo 的情况下全局安装包
npm config set prefix
(尤其是在编写非 root 安装程序时),您可能需要覆盖 PREFIX
env var 或提供 --prefix
选项,两者都等效到 npm config set prefix
。 (不确定哪个覆盖哪个)
您需要做的就是将 USER 添加到 /local/lib 的所有者
sudo chown -R $USER /usr/local/lib
编辑 :
要精确定位 node_modules 文件夹,请在使用前一个命令之前尝试使用此命令:
sudo chown -R $USER /usr/local/lib/node_modules
chown
之上运行,您很有可能破坏整个文件系统的权限结构。
sudo chmod -R 777 /
一样具有破坏性。
我尝试了@okanda 给出的答案的解决方案,但它对我不起作用。
但是,当我对这个线程中提到的几个文件夹执行此操作时,它工作得很好:https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493
sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/
dest: '/usr/local/bin/.npm-uJtxIR1m'
。所以我应该 chown /usr/local/bin 因为 .npm.. 似乎是一个动态文件/文件夹?
尝试在您尝试的任何命令之前附加 sudo。
像这样:sudo npm install
在 Linux/UNIX 中将 sudo 与命令一起使用通常会将您的权限提升到超级用户级别。在 Windows 中,超级用户帐户通常称为“管理员”。在 Linux/Unix 中,超级用户帐户通常命名为“root”。
root 用户有权访问、修改或删除您计算机上的几乎所有文件。普通用户帐户可以访问、修改或删除更少的文件。对普通帐户的限制可保护您的计算机免受未经授权或有害的程序或用户的侵害。某些进程要求您对通常无权访问的文件或文件夹执行操作。安装每个人都可以访问的程序是这些操作之一。
在您的情况下,使用 sudo 运行安装命令会为您提供超级用户的权限,并允许您修改普通用户无权修改的文件。
您可以通过 Node 版本管理器或 Node 安装程序安装 npm。在 docs 中它指出:
我们不建议使用 Node 安装程序,因为 Node 安装过程会将 npm 安装在具有本地权限的目录中,并且在全局运行 npm 包时可能会导致权限错误。
NPM 实际上是 recommends using a Node Version Manager 来避免这些错误。
由于您拥有 permission error,您可能通过 Node 安装程序安装了 npm,现在您需要使用 nvm(节点版本管理器)重新安装它。
幸运的是,这非常简单。您甚至不需要删除当前版本的 npm 或 Node.js。
你需要做的就是
安装非虚拟机。对于 OSX 或 Linux 节点,请使用: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh |重击
这会在您的主目录中创建一个 nvm 文件夹。
然后
通过 nvm 安装 npm 和 node.js。为此,只需调用 nvm install node
(“node”是最新版本的别名)
现在您无需使用 sudo
或更改 usr
文件夹中 node_modules
的所有者即可全局安装您的软件包。
fish
上的人,为了正常工作,nvm 需要一个 fish-wrapper github.com/FabioAntunes/fish-nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
。此外,我必须关闭并打开终端才能运行 nvm install stable
。
npm install -g mongodb-realm-cli
的问题。
如果您在 Mac 上遇到此问题。按着这些次序
首先使用以下命令检查谁是该文件的所有者
ls -la /usr/local/lib/node_modules
你会发现一些像下面这样的文件,其中一个在下面
drwxr-xr-x 3 root wheel 768 May 29 02:21 node_modules
你有没有注意到上面的文件是由 root 拥有的,因为你需要在里面进行更改,因为你需要更改路径的所有者。
您可以通过此命令使用检查谁是当前用户
id -un (in my case user is yamsol)
然后您可以通过调用此命令进行更改(只需将您的用户名替换为 ownerName)
sudo chown -R ownerName: /usr/local/lib/node_modules
就我而言,您知道用户是“yamsol”,我将以这种方式调用此命令
sudo chown -R yamsol: /usr/local/lib/node_modules
而已。
$USER:$USER
来避免查找用户 ID
看起来您遇到了权限问题。如果您正在安装 npm-packages
,那么您在尝试全局安装软件包时可能会遇到 EACCES
错误。这意味着您无权写入 npm
用于存储全局包和命令的目录。
尝试运行命令:sudo chmod u+x -R 775 ~/.npm
和 sudo chown $USER -R ~/.npm
,或者您可以使用 sudo
运行任何 npm
命令,这应该可以解决您的问题。
如果您在本地安装 npm-package
,那么您应该在本地项目目录中,并且可以尝试运行 sudo npm install <pkg-name>
命令来安装所需的软件包。使用 sudo
的目的是它会更改您的所有者权限,以便您可以授权当前用户运行 npm
命令。
我建议你看看 https://docs.npmjs.com/getting-started/fixing-npm-permissions
在 ubuntu 中安装全局软件包时,您需要特殊的写入权限,因为您正在写入 usr/bin
文件夹。这是出于安全原因。因此,每次安装全局包时,请使用:
sudo npm install -g [package-name]
对于您的具体情况,它将是:
sudo npm install -g typescript
小心所有改变 /usr/local 下所有目录所有者的响应 基本上,不要把 Linux 系统弄乱了!!!
将 sudo
用于本地内容也是一个非常糟糕的建议。
www.competa.com 的原始链接已损坏,因此这是从那里开始的原始方法:
npm config set prefix ~/.npm
# open your .bashrc (Linux) or .bash_profile (Mac) file for editing:
nano ~/.bashrc # for Linux
# or...
nano ~/.bash_profile # for Mac if you haven't created a .bashrc file
# add these lines:
export PATH="$PATH:$HOME/npm/bin"
export NODE_PATH="$NODE_PATH:$HOME/npm/lib/node_modules"
# save the file and then enter this command or logout and login to make the changes take effect:
. ~/.bashrc
# or...
. ~/.bash_profile
选项 B: 使用 NVM 之类的版本管理器
我试图安装 react expo,除了 sudo 我必须添加 --unsafe-perm
像这样。这解决了我的问题
sudo npm install -g expo-cli --unsafe-perm
如果在授予权限后仍然无法正常工作,请尝试运行以下命令:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
source ~/.profile
最后用这个命令测试
npm install -g jshint
这不适用于 Windows。
仔细检查:
https://ionicframework.com/docs/developing/tips#resolving-permission-errors
sudo chown -R $(whoami) /usr/local/{lib/node_modules,bin,share}
sudo chown -R $(whoami) ~/.npm ~/.npmrc
在 CentOS 8 流中遇到
解决方案
(1/4) 创建 node_modules 文件夹
$ sudo mkdir /usr/local/lib/node_modules
(2/4) 当前用户拥有
$ sudo chown -R $USER /usr/local/lib/node_modules/
(3/4) 拥有 bin
文件夹
$ sudo chown -R $USER /usr/local/bin/
(4/4) 拥有 share
文件夹
$ sudo chown -R $USER /usr/local/share/
对于 nvm 用户
sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules
和
sudo chown -R $USER /usr/local/lib/node_modules/
将 v8.9.1
替换为您正在使用的节点版本。
sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
这是因为 npm
无法在本地访问您的全局 node_modules
目录,正在运行
sudo chown -R Name: /usr/local/lib/node_modules
例如
sudo chown -R developerayo: /usr/local/lib/node_modules
解决了这个问题,现在您可以再次运行您运行的命令。
使用此命令以 sudo 用户身份安装 npm
:
sudo npm install -g create-react-app
而不是 npm install -g create-react-a pp。
好像您试图在全局而不是本地安装 npm 包,如 man npm install
所述:
-g 或 --global 参数将导致 npm 全局而不是本地安装包。
通常,当您设置 npm 项目(以及您可能拥有的许多其他项目)时,在 Node.js 全局模块(/usr/local/lib/node_modules)上安装软件包并不是一个好主意,因为您的调试日志建议。
不使用 -g
,而是使用 --save
,它会自动将包保存为 package.json
文件的依赖项:
像这样:
$ npm install express-generator --save
$ cat package.json
{
"name": "first_app_generator",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "ivanleoncz",
"license": "MIT",
"dependencies": {
"express-generator": "^4.16.0"
}
}
但正如其他答案所提到的,如果您要使用 -g
,则在执行 {3 },但实际上,这不是一个好主意,可能会导致权限问题。
注意
有使用 -g
选项安装 express-generator
的说明,以使脚本 express-cli.js
在系统路径上可用,但您也可以使用本地安装的脚本,如果您的 npm 项目位于 node_modules
:
$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp
如果像 /usr/bin/env: 'node': No such file or directory 出现这样的消息,请安装 nodejs-legacy (Debian/Ubuntu)
恕我直言,如果您不确定后果,使用 -g
(也使用 sudo
)就像 hic sunt dracones。
了解更多信息:
创建 NPM 包 (npm init)
Express.js 生成器
我能够在 mac 中使用以下内容解决此问题。
sudo npm install -g @aws-amplify/cli --unsafe-perm=true
--unsafe-perm=true
存在安全风险,允许节点以 root 身份运行
这是100%的工作
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
对于那些在使用上述解决方案后仍然无法解决问题的人。尝试这个
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
这应该可以解决问题,干杯!
下面的命令对我有用:
sudo npm install -g appium --unsafe-perm=true --allow-root
只需在这样的命令之前更改所有者或仅使用 sudo
sudo chown -R [owner]:[owner] /usr/local/lib/node_modules
(更改所有者)
或者
sudo npm install -g json-server
而已。
对于 linux/ubuntu 如果命令
npm install -g <package_name>
npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header). This notice will go away with v5.0.2+ once it is released.
npm ERR! path ../lib/node_modules/<package_name>/bin/..
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall symlink
npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'
npm ERR! { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']
npm ERR! cause:
npm ERR! { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'symlink',
npm ERR! path: '../lib/node_modules/<package_name>/bin/..',
npm ERR! dest: '/usr/local/bin/ionic' },
npm ERR! stack:
npm ERR! 'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'symlink',
npm ERR! path: '../lib/node_modules/<package-name>/bin/<package-name>',
npm ERR! dest: '/usr/local/bin/<package-name>' }
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 (though this is not recommended).
npm ERR! A complete log of this run can be found in:
npm ERR! /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log
修复:使用 root 权限安装
sudo npm install <package_name> -g
您需要超级用户级别的权限才能安装 React。在 Linux/Unix 中,超级用户帐户通常命名为“root”。
要获得超级用户权限,只需在终端上运行以下命令:
sudo -i
然后简单地运行命令来安装 React:
npm install -g create-react-app
但是,reactjs 团队鼓励我们使用以下命令而不是安装全局包。
npx create-react-app app_name
create-react-app
这样的一些包需要 root 权限才能安装为全局包;否则,您将无法安装它。但是,reactjs 团队鼓励我们使用以下命令 npx create-react-app app_name
而不是安装全局包。
sudo chown -R $USER /usr/local/lib/node_modules
类似于 POsha 的答案,但这对我在 ubuntu 19 上有用
sudo npm i -g ngrok --unsafe-perm=true --allow-root
从这个链接
https://github.com/inconshreveable/ngrok/issues/429
只需在 npm 命令前添加“sudo”即可。而已。
通过安装 nvm
,然后将节点设置为最新版本,我能够摆脱这个问题。
使用 curl 安装 nvm(最新版本请访问 nvm.sh)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
列出可用的节点版本
nvm ls
v10.12.0 默认 -> v10.12 (-> v10.12.0) 节点 -> stable (-> v10.12.0) (默认) stable -> 10.12 (-> v10.12.0) …
选择要使用的节点版本
nvm use v10.12
nvm 与 npm config "prefix" 选项不兼容:当前设置为 ""
运行此命令以取消设置该选项:
nvm use --delete-prefix v10.12.0
执行上述命令后,您将能够在 Ubuntu 中安装 react/angular。
只帮助了这个:
sudo chown -R ownerName: /usr/local/lib/node_modules
illegal group name
。所以我将命令更改为sudo chown -R ownerName: /usr/local/lib/node_modules
并且它起作用了。chown
更改文件所有者。 github.com/nvm-sh/nvm/usr/local/lib/node_modules
的权限