我想使用分发Node.js包(或更新版本的chris-lea ppa),但是将NPM安装到我的主目录 .
这可能看起来很挑剔,但对于使用polyglot / github的开发人员来说,在Linux下设置语言运行时/库环境是一种非常惯用的方式:运行时的发行版包,每用户环境中的第三方库(参见virtualenv,RVM - RVM)如果你愿意,也会为你构建Ruby) . 如果有必要,我将在本地构建节点,但它是一个PITA,因为Node正成为许多项目的附带开发需求 .
第二个链接似乎可能适用于分发nodejs包,但它看起来很粗略 .
Update this paste总结了上面的第二个链接,但不适用于我(似乎npm忽略〜/ .npmrc,至少在安装期间) .
7 回答
NPM已经将本地软件包安装到您的项目中,但我仍然希望系统远离我的操作系统文件 . 以下是我建议划分Nodejs包的方法:
通过chris-lea PPA安装Nodejs和NPM . 然后我在homedir中设置了一个包根,以保存Node“global”包:
设置NPM以将此目录用于其全局程序包安装:
通过将以下内容添加到.zshrc / .bashrc,配置PATH和MANPATH以查看$ NPM_PACKAGES前缀中的命令:
现在,当您执行
npm install -g
时,NPM会将库安装到~/.npm-packages/lib/node_modules
中,并将可执行工具链接到~/.npm-packages/bin
,这位于PATH
中 .像往常一样使用
npm install -g
:Jake的答案发布于2012年,虽然很有用,但它引用了Chris Lea自2015年3月起不再更新的Node.js PPA .
这是我用来在我的主目录中安装Node.js和npm的步骤:
用nvm安装Node.js(不需要sudo):
现在你可以
install -g
没有sudo
,一切都进入~/.nvm/
或者在没有nvm的情况下安装Node.js(官方说明):
安装Node.js.
将npm的默认目录更改为本地目录:
或者,将
.npm-global
替换为您选择的目录 .更新npm并检查它是否已安装在$ HOME目录中:
现在你可以
install -g
没有sudo
并且不会弄乱你的系统文件 .Just Jake发布的解决方案很棒 . 但是,由于npm> 1.4.10的错误,它可能无法按预期工作 . (见this和this)
虽然bug已经解决,但您可以按照以下步骤降级到npm 1.4.10:
注释$ HOME / .npmrc中的前缀行
运行
sudo npm install -g npm@1.4.10
确保安装了正确版本的npm(
npm --version
)取消注释$ HOME / .npmrc中的前缀行
继续在您的主文件夹中安装全局包!
因为python已经很好
virtualenv
,我使用nodeenv . 与nvm
相比,您可以为同一节点版本创建多个环境(例如,节点0.10
的两个环境,但具有不同的包集) .自述文件相当不错:https://github.com/ekalinin/nodeenv
我使用@ just-jake solution一段时间后发现nvm更容易设置 . 此外,它是功能强大的解决方案,允许安装和使用不同版本的
nodejs
.在Ubuntu 14.04或16.04上:
nodejs
的必备软件包:如果有更新版本的nvm,您可以在nvm网站上找到实际的安装命令 .
nvm
安装程序会将引导脚本添加到~/.bashrc
,因此您需要重新打开终端才能运行它,或者执行以下操作:nodejs
版本,在它们之间切换等 .使用
nvm ls-remote
列出可用的nodejs
版本 .例如,要安装
nodejs
v4.2.4,请执行以下操作:为了扩展Just Jake和user1533401提供的答案:我无法降级,因为我使用共享主机并且节点安装在系统目录中 . 这也是我更改npm安装全局脚本的目录的原因,如果我想要它那样做的话 . 对于那些在同一条船上的人,这是我找到的另一个临时修复工程:
npm install -g --prefix=$(npm config get prefix) <package>
问题是npm没有读取每个用户的配置文件,但是每次安装全局脚本时都指定它,修复了这个问题 . 找到here .
如前所述here和here