node.js是否有虚拟环境?


133

我已经搜索了wiki模块页面,但是找不到与virtualenv(python)或rvm类似的东西。

这里有人在自己的环境中分隔node.js吗?我真的不喜欢在系统范围内安装npm。

Answers:


44

如果拥有系统范围的npm软件包是您的主要问题,那么可以考虑在npm中使用非常酷的'bundle'命令。这更接近于冻结宝石或在导轨中使用捆绑器,而不是rvm。

超级容易。只需创建一个package.json文件:

{ "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}}

然后运行:

npm bundle vendor

或如果您的npm版本> = 1.0,请运行:

npm install

冻结到供应商目录中。然后使用:

require.paths.unshift('./vendor');

1
@andho自己还没有测试过,但是我知道NPM的最新版本仅用npm install于此目的。
Marnen Laibow-Koser'2

13
现在测试并确认。我相信,自NPM 1.0起已npm install取代npm bundle
Marnen Laibow-Koser'2

184

nodeenv -node.js的虚拟环境(模拟virtualenv


一开始看起来确实很棒,但是我无法通过node.js编译同时在nodeenv上完成npm安装(在osx Lion上)。可能我只可以分别使用nvm install和为每个nodeenv安装npm ...在想到尝试时,我已经使用其他方法完成了多个节点版本。
MikaelLepistö12年

2
可用于现有的Python虚拟环境中安装,以便该node.js环境与Python环境一起被激活。请参阅nodeenv -p
naitsirhc 2014年

3
nodeenv(实际上是virtualenv + nodeenv)也适合鱼壳用户,因为nave和其他用户不支持bash和zsh之外的任何其他shell。
阿卡卡2014年

1
是否还有等效的virtualenv-wrapper?
vmonteco '18

25

还有一些Node版本管理系统可以提供帮助。

查看Nave https://github.com/isaacs/nave

也可以使用NVM https://github.com/creationix/nvm

还有一个叫做n https://github.com/visionmedia/n


1
如果您想同时安装各种版本的node.js和npm,则Nvm效果很好。对于其余的内容,我发现它足以使用npm将所需的模块安装到项目目录中。
MikaelLepistö12年

2
如果您正在查看nvmn希望在更改目录时自动切换,请查看avngithub.com/wbyoung/avn
wbyoung 2015年

1
据我所见,n不是虚拟环境。它仍然共享所有全局安装的库,但是npm。
Yannic Hamann

7

bxjx的答案在概念上是准确的。但是,请注意,bundle命令不再包含目录。它将始终将软件包放入node_modules文件夹中,以便npm知道以后可以在哪里找到它们(并且可以避免重复安装依赖项)。

任何解决方案都可能涉及在系统范围内安装npm和nave(即,在您的中PATH,可能在~某处),但是仅在虚拟环境中安装特定的依赖项

对github问题进行了更彻底的回应。

tl; dr:用例是有效且有用的,尽管它大部分都在那儿,但效果却不尽人意。我们应该确保仔细考虑并正确地做。


GitHub问题似乎不再存在。是否有更新的链接?
Drazisil

4

您不必总是全局安装依赖项。通常建议您这样做,因为这样您就可以使用npm软件包提供的命令,但是如果您将其安装在本地(在node_modules)目录中,则还可以使用这些命令,它们只会出现在node_modules/.bin/目录中,因此您必须输入node_modules/.bin/<command>,这很烦人,但是您当然可以将此路径添加到PATH环境变量中:

export PATH=node_modules/.bin:$PATH

然后,您只需键入即可使用<command>

实际上有一个npm命令返回.bin目录的绝对路径:

$ npm bin
/path/to/node_modules/.bin

当您位于项目的子目录中时,此命令也可以使用,它将返回在node_modules/.bin其父目录中找到的第一个目录。

您可以在自己.bashrc.bin/目录中添加此别名,以自动将目录添加到您的目录PATH

alias nodebin='export PATH=$(npm bin):$PATH'

因此,当您位于根目录中的项目的node_modules/目录中时,可以键入nodebin,然后可以使用目录中的所有命令.bin/



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.