如何npm安装全局不作为根?

我在一个unix框,我没有root权限。

我将我的.npmrc文件(在我的用户的根目录下)更改为:

prefix=~/global_npm 

现在当我做“npm install -g packagename”时,它会安装在我的global_npm目录中。 哪个好。 然后我给自己path访问它通过更新我的.bashrc文件:

 export PATH=$PATH:~/global_npm/bin 

我需要做其他事情吗? 我想我需要设置NODE_PATH,但我不确定?

Sindre Sorhus在github.com/sindresorhus/guides有一个很好的指导,我已经在这里转贴了。


在OS X和Linux上全局安装npm软件包,不使用sudo

默认情况下,npm会在您的项目中本地安装软件包。 您也可以在全局安装软件包(例如npm install -g <package> )(对于命令行应用程序很有用)。 然而这样做的缺点是你需要成为根(或使用sudo )才能够全局安装。

这是一种为给定用户全局安装软件包的方法。

1.为您的全局包创build一个目录

 mkdir "${HOME}/.npm-packages" 

2.在.bashrc / .zshrc引用此目录以备将来使用:

 NPM_PACKAGES="${HOME}/.npm-packages" 

3.指出npm在哪里存储您的全球安装软件包。 在您的$HOME/.npmrc文件中添加:

 prefix=${HOME}/.npm-packages 

4.确保node能find它们。 将以下内容添加到.bashrc / .zshrc

 NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH" 

5.确保你会find安装的二进制文件和手册页。 将以下内容添加到.bashrc / .zshrc

 PATH="$NPM_PACKAGES/bin:$PATH" # Unset manpath so we can inherit from /etc/manpath via the `manpath` # command unset MANPATH # delete if you already modified MANPATH elsewhere in your config MANPATH="$NPM_PACKAGES/share/man:$(manpath)" 

检查npm-g_nosudo自动执行上述步骤


注:如果您正在运行OS X,那么.bashrc文件可能还不存在,terminal将从其他文件(如.profile.bash_profile获取其环境参数。 这些文件也驻留在用户的主文件夹中。 在这种情况下,简单地将下面一行添加到它们将指示terminal也加载.bashrc文件:

 source ~/.bashrc 

除非由于相关性而很less需要软件包安装,否则我build议您使用NVM( https://github.com/creationix/nvm )来安装Node。

如果你没有使用sudo,你也不需要在全局安装模块时使用sudo。

如果您正在安装二进制工具(我收集到的是您更新的PATH ),那么您几乎可以完成所有工作。

NODE_PATH只需要设置你已经安装了一个模块,你想要从不相关的节点脚本require() ,但你不应该真的这样做。 作为其他模块/脚本的依赖关系需要的模块应该在本地安装(即在package.json指定),这样可以严格控制版本。

编辑:在这里接受的答案解释它比我能够更好: 我如何使用npm全局安装模块?

  1. 要么启动一个新的terminal会话,要么只需input“source〜/ .bashrc”
  2. 现在你可以运行任何可执行文件,比如grunt / bower / yo / whatever(取决于你在全局安装的npm包)。

PS BTW改变全局npm目录可以用一个命令完成:npm config set prefix〜/ global_npm

尝试切换用户:

 su - username 

如果您没有其他用户,请尝试:

 useradd username 

然后,

 su - username 

Rowno的答案适用于我,但只是稍作编辑后,才会步骤4:

 NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH" 

并将其更改为:

 NODE_PATH="$NPM_PACKAGES/node_modules:$NODE_PATH"