Node.js 在OSX中安装npm模块时权限被拒绝
我正在尝试安装Node.js 在OSX中安装npm模块时权限被拒绝,node.js,macos,npm,Node.js,Macos,Npm,我正在尝试安装node-g.raphael,出现以下错误: Bender-03:htdocs alfred$ sudo npm install node-g.raphael --save Password: > contextify@0.1.15 install /Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify > node-gyp rebuild gyp ERR! configure error g
node-g.raphael
,出现以下错误:
Bender-03:htdocs alfred$ sudo npm install node-g.raphael --save
Password:
> contextify@0.1.15 install
/Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify
> node-gyp rebuild
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir
'/Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify/build'
gyp ERR! System Darwin 16.7.0
gyp ERR! command "/usr/local/bin/node"
"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js"
"rebuild"
gyp ERR! cwd
/Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify
gyp ERR! node -v v8.8.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: contextify@0.1.15
(node_modules/contextify):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: contextify@0.1.15
install: `node-gyp rebuild`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
+ node-g.raphael@0.0.9
added 2 packages and updated 1 package in 6.556s
我已经试过了,但它没有解决我的问题,仍然得到同样的错误
请告诉我是否有什么我可以补充的来帮助解决这个问题。从中看到了这一点,它很有帮助,也许你也可以试一试
选项1:将权限更改为npm的默认目录
npm配置获取前缀
对于许多系统,这将是/usr/local
警告:如果显示的路径正好是/usr
,请切换到选项2,否则您将破坏您的权限sudo chown-R$(whoami)$(npm-config-get-prefix)/{lib/node_-modules,bin,share}
这将更改npm和其他一些工具(lib/node_modules、bin
和share
)使用的子文件夹的权限/usr
)的所有权,因为这可能会导致一些问题,例如,如果您与其他用户共享系统
相反,您可以将npm配置为完全使用不同的目录。在我们的例子中,这将是主文件夹中的一个隐藏目录
mkdir~/.npm global
npm配置集前缀“~/.npm global”
~/.profile
文件并添加此行:
导出路径=~/.npm全局/bin:$PATH
source~/.profile
sudo
全局下载软件包
`npm install node-g.raphael --save`
代替步骤2-4,您可以使用相应的ENV变量(例如,如果您不想修改~/.profile
):
选项3:使用包管理器为您处理此问题。
如果要在Mac OS上重新安装Node,可以使用自制软件包管理器完全避免此问题<代码>自制
使用正确的权限进行开箱即用的设置
brew安装节点
我希望这有助于运行下面的命令来修复问题
sudo npm安装-g@angular/cli
能够安装angular
然后尝试运行ng-v进行确认。我使用:
npm配置获取前缀
sudo chown-R$(whoami)$(npm-config-get-prefix)/{lib/node_-modules,bin,share}
sudo npm安装
要访问Mac/Linux,只需使用以下命令
sudo npm install -g {package_name}
你可以走了。与其更改你的文件权限,冒着系统混乱的风险(我所做的事情,以后可能会后悔),不如建议我事后发现的以下内容
谢谢@Antz。我必须对我的本地node_模块做同样的事情,可能是因为我试图用sudo安装node-g.raphael。哦!虽然我现在有另一个关于xcode的问题。。。但这将是另一个问题。这个答案对我帮助很大。谢谢你精心设计和理解的答案。请注意,如果您使用的是Fish shell,并且您使用的是选项1,那么您需要删除命令中的$
,因此它的内容如下:sudo chown-R(whoami)(npm config get prefix)/{lib/node_modules,bin,share}
,再次感谢您的回答!我尝试了选项2的步骤。在MacOS Catalina v10上,默认shell是ZSH,它使用~/.zprofile而不是~/.profile。这就是为什么上面的配置最初在终端上不起作用,但在使用bashshell时起作用。您可以在这里找到详细描述:授予NPM与您的主用户帐户相同的所有权限是否授予NPM执行的脚本读/写主用户可以访问的所有目录的权限?并提出网络请求?由于下载用户很少对NPM脚本进行全面研究,从安全角度来看,为NPM创建一个单独的用户并仅在全局NPM目录+本地开发目录上向该用户授予r/w权限是否更有意义,我刚刚将npm
的全局目录移动到/Users/Shared/.npm global
,并相应地更改了shell的配置文件。所有用户都可以使用/Users/Shared
下的所有内容,因此它可以工作并避免使用sudo
。/usr/local
中的旧东西只要在路径中就可以继续工作,但是可以卸载所有东西(除了npm
)在更改prefix
参数之前,请在新位置重新安装所有内容。如果要在Mac或linux中全局安装任何依赖项,则必须在所有软件包的设置中手动使用sudo或configure,而不应使用它。
sudo npm install -g {package_name}