如何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全局安装模块?
- 要么启动一个新的terminal会话,要么只需input“source〜/ .bashrc”
- 现在你可以运行任何可执行文件,比如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"