如何使用npm全局安装模块?


202

我最近在OSX上安装了Node.js和npm模块,我认为设置有问题:

npm install [MODULE] is not installing the node.js module to the default path 
which is /usr/local/lib/node_modules.

Answers:


347

如果要全局安装npm模块,请确保使用new -g标志,例如:

npm install forever -g

1.0rc开始有关npm模块安装的一般建议(摘自blog.nodejs.org):

  • 如果要安装要在程序中使用的东西,请使用require('whatever'),然后在项目的根目录本地安装
  • 如果要在外壳程序中安装要使用的东西,在命令行或其他东西上,请全局安装它,以便其二进制文件最终位于PATH环境变量中。

我最近才使用了此建议,并且下降得非常顺利。我永远在全球范围内安装(因为它是一个命令行工具),所有我的应用程序模块都在本地安装。

但是,如果要全局使用某些模块(即express或mongodb),请遵循以下建议(也来自blog.nodejs.org):

当然,在某些情况下您需要同时执行这两种操作。Coffee-script和Express都是具有命令行界面和库的应用程序的很好示例。在这种情况下,您可以执行以下任一操作:

  • 在两个地方都安装它。说真的,您的磁盘空间不足吗?很好,真的。它们是很小的JavaScript程序。
  • 全局安装它,然后安装npm link coffee-script或npm link express (如果您在支持符号链接的平台上。)然后,只需更新全局副本即可更新所有符号链接。

我认为第一种选择是最好的。简单,清晰,明确。如果要在多个不同项目中重用同一库,第二个方法非常方便。(在以后的文章中,有关npm的更多链接。)

我没有测试这些变体之一,但是它们看起来非常简单。


7
感谢您的澄清。Isaacs应该使用上述文本替换整个npm manfile和git wiki。可以消除群众的困惑。
莫维斯·莱德福德

shweeet。这派上了用场,我被这个变化抓住了。在某个时候,npm install赋予了命令行访问权限,然后它消失了,我没有足够仔细地跟踪项目以赶上过渡。
马克·埃塞尔

这解释了为什么我的Apache config目录中有一个节点模块。。。
伊恩·亨特

1
来自blog.node.js.org:通常,全局二进制文件安装在{prefix} / bin中,全局模块安装在{prefix} / node_modules中,本地模块位于./node_modules中,可执行文件位于./node_modules/.bin/中。 。您可以运行npm prefix以获取本地前缀,并node prefix -g查看全局前缀:)
nacho4d 2012年

“如果要安装要在程序中使用的东西,请使用require('whatever'),然后在项目的根目录本地安装。” -我认为,如果模块包含已编译的二进制文件不是一个好主意:必须在linux和Windows上正确地重新编译它。我认为此类模块必须使用NODE_PATH环境变量(nodejs.org/api/…)设置
Sneg 2012年

8

在Mac上,我发现输出包含了我正在寻找的信息:

$> npm install -g karma
...
...
> ws@0.4.25 install /usr/local/share/npm/lib/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)
...
$> ls /usr/local/share/npm/bin
karma nf

在我/usr/local/share/npm/binexport PATH行中添加.bash_profile,保存并添加后source,我可以运行

$> karma --help

一般。






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.