Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
可能导致错误的原因 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
看起来您 运行 遇到了权限问题。如果您正在安装 npm-packages
,那么在尝试全局安装软件包时可能会出现 EACCES
错误。这意味着您无权写入 npm
用于存储全局包和命令的目录。
尝试 运行ning 命令:sudo chmod u+x -R 775 ~/.npm
和 sudo chown $USER -R ~/.npm
或者您可以 运行 任何 npm
命令和 sudo
,应该解决您的问题。
如果您在本地安装 npm-package
,那么您应该在本地项目目录中,并且可以尝试 运行ning sudo npm install <pkg-name>
命令来安装所需的包。使用 sudo
的目的是它会更改您的所有者权限,这样您就可以让您当前的用户获得 运行 npm
命令的授权。
我建议你看看https://docs.npmjs.com/getting-started/fixing-npm-permissions
尝试在您尝试的任何命令之前附加 sudo。
像这样:sudo npm install
将 sudo 与 Linux/UNIX 中的命令一起使用通常会将您的权限提升到超级用户级别。在 Windows 中,超级用户帐户通常称为 'Administrator.' 在 Linux/Unix 中,超级用户帐户通常称为 'root'。
root 用户有权访问、修改或删除您计算机上的几乎所有文件。普通用户帐户可以访问、修改或删除的文件要少得多。对普通帐户的限制可保护您的计算机免受未经授权或有害的程序或用户的侵害。某些流程要求您对您通常无权访问的文件或文件夹执行操作。安装每个人都可以访问的程序是这些操作之一。
在你的情况下,运行带有 sudo 的安装命令为你提供了超级用户的权限,并允许你修改普通用户无权修改的文件。
使用此命令安装 npm
作为 sudo 用户:
sudo npm install -g create-react-app
而不是
npm install -g create-react-a pp.
更改您的文件权限...像这样
首先检查谁拥有该目录
ls -la /usr/local/lib/node_modules
拒绝访问,因为 node_module 文件夹归 root
所有
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
在 ubuntu 中安装全局包时,您需要特殊的写入权限,因为您正在写入 usr/bin
文件夹。这是出于安全原因。
所以,每次安装全局包时,使用:
sudo npm install -g [package-name]
对于您的具体情况,它将是:
sudo npm install -g typescript
小心 所有响应都会更改 /usr/local 下所有目录的所有者
基本上不要乱Linux系统!!!
将 sudo
用于本地产品确实是一个 糟糕的建议。
来自 www.competa.com 的原始 link 已损坏,因此这是来自那里的原始方法:
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
这样的版本管理器
您似乎试图在全局而非本地安装 npm 包,如 man npm install
所述:
The -g or --global argument will cause npm to install the package globally rather than locally.
通常,当您设置一个 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
,则必须使用 sudo
(如果您的用户具有 sudo 权限:请参阅 /etc/sudoers) 执行时 npm install express-generator -g
,但确实不是一个好主意,可能会导致权限问题。
通知
有使用 -g
选项安装 express-generator
的说明,以便在系统路径上提供脚本 express-cli.js
,但您也可以使用本地安装的脚本,如果您的 npm 项目位于 node_modules
:
$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp
If a message like /usr/bin/env: ‘node’: No such file or directory shows up, install nodejs-legacy
(Debian/Ubuntu)
恕我直言,如果您不确定后果,使用 -g
(也使用 sudo
)就像 hic sunt dracones。
更多信息:
您只需将 USER 添加到 /local/lib
的所有者
sudo chown -R $USER /usr/local/lib
编辑:
要精确定位 node_modules 文件夹,请在使用前一个命令之前尝试使用此命令:
sudo chown -R $USER /usr/local/lib/node_modules
您可以简单地更改所有者或在您发出这样的命令之前使用 sudo
sudo chown -R [owner]:[owner] /usr/local/lib/node_modules
(更改所有者)
或
sudo npm install -g json-server
就是这样。
为了尽量减少权限错误的可能性,您可以将 npm 配置为使用不同的目录。在此示例中,您将在主目录中创建和使用隐藏目录。
备份您的计算机。
在命令行上,在您的主目录中,为全局安装创建一个目录:
mkdir ~/.npm-global
配置 npm 以使用新的目录路径:
npm config set prefix '~/.npm-global'
在您喜欢的文本编辑器中,打开或创建一个
~/.profile
文件并添加这一行:
export PATH=~/.npm-global/bin:$PATH
在命令行中,更新您的系统变量:
source ~/.profile
要测试您的新配置,请在不使用 sudo 的情况下全局安装包
您需要超级用户级别的权限才能安装 React。在 Linux/Unix 中,超级用户帐户通常命名为 'root'。
要获得超级用户权限,只需 运行 在您的终端上执行以下命令:
sudo -i
然后只需 运行 安装 React 的命令:
npm install -g create-react-app
然而,reactjs 团队鼓励我们使用以下命令而不是安装全局包。
npx create-react-app app_name
我正在尝试安装 React expo,除了 sudo 之外,我还必须添加 --unsafe-perm
像这样。这解决了我的问题
sudo npm install -g expo-cli --unsafe-perm
如果您正面临这个问题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
就是这样。
我用了sudo,但是没有解决问题,
我已通过更改 node_modules 文件夹权限
解决了这个问题
sudo chmod -R 777 node_modules
如果您没有为所有设置权限,您可以将 777 替换为任何其他代码 user/group。
我可以通过安装 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
default -> v10.12 (-> v10.12.0)
node -> stable (-> v10.12.0) (default)
stable -> 10.12 (-> v10.12.0)
…
- 选择要使用的节点版本
nvm use v10.12
nvm is not compatible with the npm config "prefix" option: currently set to ""
- 运行 取消设置选项:
nvm use --delete-prefix v10.12.0
执行上述命令后,您将能够在 Ubuntu 中安装 react/angular。
对于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
仅帮助:
sudo chown -R ownerName: /usr/local/lib/node_modules
我能够使用 mac 中的以下方法解决问题。
sudo npm install -g @aws-amplify/cli --unsafe-perm=true
我尝试了@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/
对于 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
替换为您正在使用的节点版本。
您可以通过 Node 版本管理器或 Node 安装程序安装 npm。在 docs 中指出:
We do not recommend using a Node installer, since the Node
installation process installs npm in a directory with local
permissions and can cause permissions errors when you run npm packages
globally.
NPM 实际上 recommends using a Node Version Manager 可以避免这些错误。
因为你有 permission error,你可能通过节点安装程序安装了 npm,现在你需要使用 nvm(节点版本管理器)重新安装它。
幸运的是,这非常简单。您甚至不需要删除当前版本的 npm 或 Node.js.
您只需
安装nvm。
对于 OSX 或 Linux 节点使用:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
这会在您的主目录中创建一个 nvm 文件夹。
然后
通过 nvm 安装 npm 和 node.js。为此,只需调用
nvm install node
(“节点”是最新版本的别名)
现在您可以在不使用 sudo
或更改 usr
文件夹中 node_modules
的所有者的情况下全局安装包。
经过长时间的研究,我了解到 mac OS 不需要安装 angular cli 只需使用 sudo npm install -g @angular/cli
您的终端将提示密码输入您的密码它将继续安装 cli。它对我有用。
sudo chown -R $USER /usr/local/lib/node_modules
使用'sudo npm install xyz'就可以了。
这是因为 npm
无法在本地访问您的全局 node_modules
目录,运行宁
sudo chown -R Name: /usr/local/lib/node_modules
例如
sudo chown -R developerayo: /usr/local/lib/node_modules
问题已解决,现在您可以 运行 您再次 运行 的命令。
类似于 POsha 的回答,但这对我有用 ubuntu 19
sudo npm i -g ngrok --unsafe-perm=true --allow-root
由此link
如果你是运行 Linux(即:Arch)
# npm -g install packageName
默认情况下,此命令会在 /usr/lib/node_modules/npm 下安装软件包,并且需要 root 权限才能执行此操作。
允许用户范围的安装
要允许当前用户安装全局软件包,请设置 npm_config_prefix
环境变量。 npm 和 yarn 都使用它。
~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules
重新登录或源以更新更改。
您还可以为 npm install
指定 --prefix
参数。但是,不建议这样做,因为每次安装全局包时都需要添加它。
$ npm -g install packageName --prefix ~/.node_modules
因此您不必更改文件夹权限
对于使用上述解决方案后仍然无法解决问题的用户。试试这个
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
应该可以了,干杯!
只需在 npm 命令前添加 "sudo"。就是这样。
如果授予权限后仍然无法正常工作,请尝试运行这些命令:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
source ~/.profile
最后用这个命令测试
npm install -g jshint
这不适用于 Windows。
在我的情况下它有效,即我想要 npm link 所以当我点击 sudo npm link 它有效
sudo npm install
因为 sudo 授予您超级用户级别的权限。
超级用户帐户通常称为 'Administrator.' 在 Linux/Unix 中,超级用户帐户通常称为 'root'.
root 用户有权访问、修改或删除您计算机上的几乎所有文件。普通用户帐户可以访问、修改或删除的文件要少得多。对普通帐户的限制可保护您的计算机免受未经授权或有害程序或用户的侵害。
工作 100%
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
以下命令对我有用:
sudo npm install -g appium --unsafe-perm=true --allow-root
linux 用户的简单解决方案,只需在 npm运行 的任何命令前添加 sudo
brew uninstall node
brew install node
sudo npm install -g "your_package" --unsafe-perm=true --allow-root
希望这对某人有帮助
解决此问题的最佳方法(解决方案可能因设备而异)是仔细阅读错误以找出哪个文件夹需要 write
访问权限。
就我而言,我必须授予 /usr/local/lib
和 /usr/local/bin
权限。
仔细查看:
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
如果有人想让用户像 root 用户一样访问,请查看此 https://support.apple.com/en-us/HT204012
如果用户帐户是帐户的所有者,这应该是最好的方法
在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/
可能导致错误的原因 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
看起来您 运行 遇到了权限问题。如果您正在安装 npm-packages
,那么在尝试全局安装软件包时可能会出现 EACCES
错误。这意味着您无权写入 npm
用于存储全局包和命令的目录。
尝试 运行ning 命令:sudo chmod u+x -R 775 ~/.npm
和 sudo chown $USER -R ~/.npm
或者您可以 运行 任何 npm
命令和 sudo
,应该解决您的问题。
如果您在本地安装 npm-package
,那么您应该在本地项目目录中,并且可以尝试 运行ning sudo npm install <pkg-name>
命令来安装所需的包。使用 sudo
的目的是它会更改您的所有者权限,这样您就可以让您当前的用户获得 运行 npm
命令的授权。
我建议你看看https://docs.npmjs.com/getting-started/fixing-npm-permissions
尝试在您尝试的任何命令之前附加 sudo。
像这样:sudo npm install
将 sudo 与 Linux/UNIX 中的命令一起使用通常会将您的权限提升到超级用户级别。在 Windows 中,超级用户帐户通常称为 'Administrator.' 在 Linux/Unix 中,超级用户帐户通常称为 'root'。
root 用户有权访问、修改或删除您计算机上的几乎所有文件。普通用户帐户可以访问、修改或删除的文件要少得多。对普通帐户的限制可保护您的计算机免受未经授权或有害的程序或用户的侵害。某些流程要求您对您通常无权访问的文件或文件夹执行操作。安装每个人都可以访问的程序是这些操作之一。
在你的情况下,运行带有 sudo 的安装命令为你提供了超级用户的权限,并允许你修改普通用户无权修改的文件。
使用此命令安装 npm
作为 sudo 用户:
sudo npm install -g create-react-app
而不是 npm install -g create-react-a pp.
更改您的文件权限...像这样
首先检查谁拥有该目录
ls -la /usr/local/lib/node_modules
拒绝访问,因为 node_module 文件夹归 root
所有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
在 ubuntu 中安装全局包时,您需要特殊的写入权限,因为您正在写入 usr/bin
文件夹。这是出于安全原因。
所以,每次安装全局包时,使用:
sudo npm install -g [package-name]
对于您的具体情况,它将是:
sudo npm install -g typescript
小心 所有响应都会更改 /usr/local 下所有目录的所有者 基本上不要乱Linux系统!!!
将 sudo
用于本地产品确实是一个 糟糕的建议。
来自 www.competa.com 的原始 link 已损坏,因此这是来自那里的原始方法:
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
这样的版本管理器您似乎试图在全局而非本地安装 npm 包,如 man npm install
所述:
The -g or --global argument will cause npm to install the package globally rather than locally.
通常,当您设置一个 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
,则必须使用 sudo
(如果您的用户具有 sudo 权限:请参阅 /etc/sudoers) 执行时 npm install express-generator -g
,但确实不是一个好主意,可能会导致权限问题。
通知
有使用 -g
选项安装 express-generator
的说明,以便在系统路径上提供脚本 express-cli.js
,但您也可以使用本地安装的脚本,如果您的 npm 项目位于 node_modules
:
$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp
If a message like /usr/bin/env: ‘node’: No such file or directory shows up, install
nodejs-legacy
(Debian/Ubuntu)
恕我直言,如果您不确定后果,使用 -g
(也使用 sudo
)就像 hic sunt dracones。
更多信息:
您只需将 USER 添加到 /local/lib
的所有者sudo chown -R $USER /usr/local/lib
编辑:
要精确定位 node_modules 文件夹,请在使用前一个命令之前尝试使用此命令:
sudo chown -R $USER /usr/local/lib/node_modules
您可以简单地更改所有者或在您发出这样的命令之前使用 sudo
sudo chown -R [owner]:[owner] /usr/local/lib/node_modules
(更改所有者)
或
sudo npm install -g json-server
就是这样。
为了尽量减少权限错误的可能性,您可以将 npm 配置为使用不同的目录。在此示例中,您将在主目录中创建和使用隐藏目录。
备份您的计算机。 在命令行上,在您的主目录中,为全局安装创建一个目录:
mkdir ~/.npm-global
配置 npm 以使用新的目录路径:
npm config set prefix '~/.npm-global'
在您喜欢的文本编辑器中,打开或创建一个
~/.profile
文件并添加这一行:
export PATH=~/.npm-global/bin:$PATH
在命令行中,更新您的系统变量:
source ~/.profile
要测试您的新配置,请在不使用 sudo 的情况下全局安装包
您需要超级用户级别的权限才能安装 React。在 Linux/Unix 中,超级用户帐户通常命名为 'root'。
要获得超级用户权限,只需 运行 在您的终端上执行以下命令:
sudo -i
然后只需 运行 安装 React 的命令:
npm install -g create-react-app
然而,reactjs 团队鼓励我们使用以下命令而不是安装全局包。
npx create-react-app app_name
我正在尝试安装 React expo,除了 sudo 之外,我还必须添加 --unsafe-perm
像这样。这解决了我的问题
sudo npm install -g expo-cli --unsafe-perm
如果您正面临这个问题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
就是这样。
我用了sudo,但是没有解决问题, 我已通过更改 node_modules 文件夹权限
解决了这个问题sudo chmod -R 777 node_modules
如果您没有为所有设置权限,您可以将 777 替换为任何其他代码 user/group。
我可以通过安装 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
default -> v10.12 (-> v10.12.0)
node -> stable (-> v10.12.0) (default)
stable -> 10.12 (-> v10.12.0)
…
- 选择要使用的节点版本
nvm use v10.12
nvm is not compatible with the npm config "prefix" option: currently set to ""
- 运行 取消设置选项:
nvm use --delete-prefix v10.12.0
执行上述命令后,您将能够在 Ubuntu 中安装 react/angular。
对于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
仅帮助:
sudo chown -R ownerName: /usr/local/lib/node_modules
我能够使用 mac 中的以下方法解决问题。
sudo npm install -g @aws-amplify/cli --unsafe-perm=true
我尝试了@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/
对于 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
替换为您正在使用的节点版本。
您可以通过 Node 版本管理器或 Node 安装程序安装 npm。在 docs 中指出:
We do not recommend using a Node installer, since the Node installation process installs npm in a directory with local permissions and can cause permissions errors when you run npm packages globally.
NPM 实际上 recommends using a Node Version Manager 可以避免这些错误。
因为你有 permission error,你可能通过节点安装程序安装了 npm,现在你需要使用 nvm(节点版本管理器)重新安装它。
幸运的是,这非常简单。您甚至不需要删除当前版本的 npm 或 Node.js.
您只需
安装nvm。 对于 OSX 或 Linux 节点使用:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
这会在您的主目录中创建一个 nvm 文件夹。
然后
通过 nvm 安装 npm 和 node.js。为此,只需调用
nvm install node
(“节点”是最新版本的别名)
现在您可以在不使用 sudo
或更改 usr
文件夹中 node_modules
的所有者的情况下全局安装包。
经过长时间的研究,我了解到 mac OS 不需要安装 angular cli 只需使用 sudo npm install -g @angular/cli
您的终端将提示密码输入您的密码它将继续安装 cli。它对我有用。
sudo chown -R $USER /usr/local/lib/node_modules
使用'sudo npm install xyz'就可以了。
这是因为 npm
无法在本地访问您的全局 node_modules
目录,运行宁
sudo chown -R Name: /usr/local/lib/node_modules
例如
sudo chown -R developerayo: /usr/local/lib/node_modules
问题已解决,现在您可以 运行 您再次 运行 的命令。
类似于 POsha 的回答,但这对我有用 ubuntu 19
sudo npm i -g ngrok --unsafe-perm=true --allow-root
由此link
如果你是运行 Linux(即:Arch)
# npm -g install packageName
默认情况下,此命令会在 /usr/lib/node_modules/npm 下安装软件包,并且需要 root 权限才能执行此操作。
允许用户范围的安装
要允许当前用户安装全局软件包,请设置 npm_config_prefix
环境变量。 npm 和 yarn 都使用它。
~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules
重新登录或源以更新更改。
您还可以为 npm install
指定 --prefix
参数。但是,不建议这样做,因为每次安装全局包时都需要添加它。
$ npm -g install packageName --prefix ~/.node_modules
因此您不必更改文件夹权限
对于使用上述解决方案后仍然无法解决问题的用户。试试这个
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
应该可以了,干杯!
只需在 npm 命令前添加 "sudo"。就是这样。
如果授予权限后仍然无法正常工作,请尝试运行这些命令:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
source ~/.profile
最后用这个命令测试
npm install -g jshint
这不适用于 Windows。
在我的情况下它有效,即我想要 npm link 所以当我点击 sudo npm link 它有效
sudo npm install
因为 sudo 授予您超级用户级别的权限。 超级用户帐户通常称为 'Administrator.' 在 Linux/Unix 中,超级用户帐户通常称为 'root'.
root 用户有权访问、修改或删除您计算机上的几乎所有文件。普通用户帐户可以访问、修改或删除的文件要少得多。对普通帐户的限制可保护您的计算机免受未经授权或有害程序或用户的侵害。
工作 100%
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
以下命令对我有用:
sudo npm install -g appium --unsafe-perm=true --allow-root
linux 用户的简单解决方案,只需在 npm运行 的任何命令前添加 sudo
brew uninstall node
brew install node
sudo npm install -g "your_package" --unsafe-perm=true --allow-root
希望这对某人有帮助
解决此问题的最佳方法(解决方案可能因设备而异)是仔细阅读错误以找出哪个文件夹需要 write
访问权限。
就我而言,我必须授予 /usr/local/lib
和 /usr/local/bin
权限。
仔细查看:
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
如果有人想让用户像 root 用户一样访问,请查看此 https://support.apple.com/en-us/HT204012
如果用户帐户是帐户的所有者,这应该是最好的方法
在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/