Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在OSX中安装npm模块时权限被拒绝_Node.js_Macos_Npm - Fatal编程技术网

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目录的路径:

    npm配置获取前缀

    对于许多系统,这将是
    /usr/local

    警告:如果显示的路径正好是
    /usr
    ,请切换到选项2,否则您将破坏您的权限

  • 将npm目录的所有者更改为当前用户的名称(您的用户名):

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

    这将更改npm和其他一些工具(lib/node_modules、
    bin
    share
    )使用的子文件夹的权限

  • 选项2:将npm的默认目录更改为另一个目录 有时您不想更改npm使用的默认目录(即
    /usr
    )的所有权,因为这可能会导致一些问题,例如,如果您与其他用户共享系统

    相反,您可以将npm配置为完全使用不同的目录。在我们的例子中,这将是主文件夹中的一个隐藏目录

  • 为全局安装创建目录:

    mkdir~/.npm global

  • 配置npm以使用新的目录路径:

    npm配置集前缀“~/.npm global”

  • 打开或创建
    ~/.profile
    文件并添加此行:

    导出路径=~/.npm全局/bin:$PATH

  • 返回命令行,更新系统变量:

    source~/.profile

  • Test:不使用
    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}