Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 ganache cli的npm全局安装失败(由于sudo/权限)_Node.js_Npm_Npm Install_Ganache - Fatal编程技术网

Node.js ganache cli的npm全局安装失败(由于sudo/权限)

Node.js ganache cli的npm全局安装失败(由于sudo/权限),node.js,npm,npm-install,ganache,Node.js,Npm,Npm Install,Ganache,我有npm版本6.5.0和节点v10.10.0。 npm全局安装以前没有任何问题 sudo npm install --global ganache-cli npm ERR! code 128 npm ERR! Command failed: /usr/bin/git clone --depth=1 -q -b master https://github.com/ethereumjs/ethereumjs-abi.git /root/.npm/_cacache/tmp/git-clone-30

我有npm版本6.5.0和节点v10.10.0。 npm全局安装以前没有任何问题

sudo npm install --global ganache-cli

npm ERR! code 128
npm ERR! Command failed: /usr/bin/git clone --depth=1 -q -b master https://github.com/ethereumjs/ethereumjs-abi.git /root/.npm/_cacache/tmp/git-clone-305900d8
npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-305900d8': Permission denied
npm ERR!     
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-12-12T20_49_21_325Z-debug.log

基本问题是,使用
npm
全局安装软件包会将它们链接到
/usr/local/
下的目录中,这些目录通常由root用户拥有

是规避此类棘手权限问题的一种方法。它允许将全局安装的软件包链接到主文件夹中
~/.nvm/versions/node/

使用我的软件包管理器,我删除了
节点
和相关软件,如
npm

我使用
find/usr/local/-name'node\u modules'
搜索
/usr/local/
,查找我以前使用
npm
全局安装的包的任何痕迹。全部删除

然后,我使用来自的最新安装脚本安装了
nvm

在我的情况下是这样的

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
然后我必须将
nvm
链接到我的环境路径中。 在我的情况下,这意味着手动编辑我的
.bashrc
配置文件以包括以下内容:

export NVM_DIR="/home/zack/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
从那以后,我就可以通过nvm获得node的最新LTS版本了

nvm install --lts

现在,全球安装的软件包可以在没有
sudo
的情况下安装,因为它们存放在
~/.nvm/versions/node/v10.14.2/
下,而且一切工作都很完美

不要使用
sudo
安装npm软件包。如果我是你,我会使用一个完全否定权限问题的节点版本管理器。如果你愿意的话,我可以发布一个答案解释怎么做。我在没有sudo的情况下尝试过,但那是另一个许可问题。我过去一直使用sudo进行全局安装。my/usr/local/lib/node_modules文件夹归root所有。您过去是否这样做过并不重要。您不应该以root用户身份在计算机上安装来自internet的随机代码,尤其是当使用版本管理器意味着您不必这样做时。如果你的权限一开始就被限制了,那么忽略sudo也不会有多大帮助。我删除了/usr/local/bin/node_modules/和/usr/local/lib/nodemodules/以及npm缓存中的所有内容,并将重新开始。干得好。这种方法还有一个好处,即您可以随意在Node/npm版本之间切换。