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

Posted

技术标签:

【中文标题】如何使用 npm 全局安装模块?【英文标题】:How do I install a module globally using npm? 【发布时间】:2011-08-14 15:26:05 【问题描述】:

我最近在 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.

【问题讨论】:

【参考方案1】:

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

npm install forever -g

自 1.0rc 起关于 npm 模块安装的一般建议(取自blog.nodejs.org):

如果您要安装一些您想在程序中使用的东西,请使用 require('whatever'),然后安装它 本地,在你的根 项目。 如果您要安装一些要在 shell 中使用的东西,请在 命令行什么的,安装 它是全局的,所以它的二进制文件 最终进入您的 PATH 环境 变量。

我最近刚刚使用了这个建议,并且非常顺利。我永远安装在全局(因为它是一个命令行工具)和我所有的应用程序模块在本地。

但是,如果您想在全局范围内使用某些模块(即 express 或 mongodb),请接受此建议(也来自 blog.nodejs.org):

当然,在某些情况下 你想两者都做。咖啡脚本和 Express 都是很好的应用示例 具有命令行界面的,如 以及图书馆。在这些情况下,你 可以执行以下操作之一:

在两个地方都安装它。说真的,你的磁盘有那么短吗 空间?没关系,真的。它们很小 javascript 程序。 全局安装,然后 npm link coffee-script 或 npm link express (如果您使用的平台支持 符号链接。)然后你只需要 更新全局副本以更新所有 符号链接也是如此。

第一个选项是我最好的 观点。简单、清晰、明确。这 如果你是,第二个真的很方便 将在 a 中重用同一个库 一堆不同的项目。 (更多关于 npm 链接在以后的部分中。)

我没有测试其中一种变体,但它们似乎非常简单。

【讨论】:

感谢您的澄清。 Isaacs 应该用上面的文本替换整个 npm manfile 和 git wiki。可以消除大众的困惑。 谢了。这派上用场了,我被这个变化抓住了。在某些时候,npm install 提供了命令行访问权限,然后它就消失了,我没有足够密切地关注项目以赶上过渡。 这解释了为什么我的 Apache 配置目录中有一个节点模块。 . . 来自blog.node.js.org :通常全局二进制文件安装在 prefix/bin 中,全局模块安装在 prefix/node_modules 中,本地模块在 ./node_modules 中,可执行文件在 ./node_modules 中/.bin/ 。您可以运行npm prefix 来获取本地前缀,并运行node prefix -g 来查看全局前缀:) "如果你正在安装你想在你的程序中使用的东西,使用 require('whatever'),然后 在本地安装它,在你的项目的根目录。” - 我认为,如果模块包含已编译的二进制文件,这不是一个好主意:它必须在 linux 和 windows 上正确重新编译。我认为必须使用 NODE_PATH 环境变量设置此类模块(nodejs.org/api/…)【参考方案2】:

在 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/bin 添加到我的.bash_profile 中的export PATH 行,保存它并sourceing 之后,我就可以运行了

$> karma --help

通常。

【讨论】:

【参考方案3】:

我喜欢在应用文件夹的根目录中使用 package.json 文件。

这是我用的一个

nvm use v0.6.4
npm install

【讨论】:

【参考方案4】:

我在 Ubuntu 上安装 Express 时遇到问题:

如果由于某种原因缺少 NPM 命令,请使用 npm help 测试 npm 命令。如果没有,请按照以下步骤操作 - http://arnolog.net/post/8424207595/installing-node-js-npm-express-mongoose-on-ubuntu

如果只是 Express 命令不起作用,请尝试:

sudo npm install -g express

这让我在使用 Windows7 和 OSX 时一切正常。

希望这会有所帮助!

【讨论】:

【参考方案5】:

你需要有超级用户权限,

 sudo npm install -g <package name>

【讨论】:

【参考方案6】:

根据官方文档推荐的步骤在我的 Macbook 上对我有用。

总结步骤:

    使用以下命令实例化 nvm:

    卷曲 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh |重击

您可以在此页面查看最新版本: https://github.com/nvm-sh/nvm

    如果文件已经不存在,则在主目录中创建 .zshrc。

    触摸.zshrc

    将以下内容放入 .zshrc 文件中

导出 NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && 。 "$NVM_DIR/nvm.sh" # 这会加载 nvm

    使用命令安装 nvm

nvm install --lts

    重启终端 - 你现在可以使用 npm 安装全局包了。

【讨论】:

【参考方案7】:

在 Ubuntu 中,在 .bashrc 文件中设置 node_modules 的路径

export PATH="/home/username/node_modules/.bin:$PATH"

【讨论】:

【参考方案8】:

您可能没有在全局位置(例如/usr/local/lib/node_modules)安装节点模块的写入权限,在这种情况下,请以 root 身份运行 npm install -g package。

【讨论】:

以上是关于如何使用 npm 全局安装模块?的主要内容,如果未能解决你的问题,请参考以下文章

npm学习之如何安装全局包更新全局安装的包卸载全局安装的包

如何查看npm配置?

如何查看npm配置?

如何让 Grunt Deploy 使用全局 NPM 模块而不是本地模块

如何查看给定 npm 模块的依赖树?

如何确定 bash 中是不是安装了 npm 模块