节点版本管理器 (NVM) npm 将模块安装到公共文件夹

Posted

技术标签:

【中文标题】节点版本管理器 (NVM) npm 将模块安装到公共文件夹【英文标题】:Node Version Manager (NVM) npm installing modules to common folder 【发布时间】:2012-02-26 08:58:26 【问题描述】:

我已经按照这篇文章中的说明为 node.js 安装了 NVM:

http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/

当我在节点版本之间切换然后使用 npm 安装模块时,所有模块都放置在同一个“node_modules”文件夹(~/node_modules/)中,而不是特定于该节点版本的“node_modules”目录中?

知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

基于来自https://github.com/creationix/nvm/pull/97的cmets:

使用 npm 安装包时,使用全局开关 -g 包最终在正确的目录中(即 .nvm/$VERSION/lib/node_modules),但是节点无法要求它 因为它以某种方式没有搜索它的前缀。

因此,使用npm install -g xxxxx 会将模块放置在 NVM 的正确位置,但如果您尝试 require 其中一个节点找不到模块。我还在玩这个,如果我找到解决方案会更新。

更新

NPM 将 node_modules 放在哪里? (见https://docs.npmjs.com/files/folders)

本地安装(默认):将内容放入当前包根目录的 ./node_modules 中。 全局安装(使用 -g):将内容放入 /usr/local 或安装节点的任何位置。 如果你要去require()它,请在本地安装它。 如果您要在命令行上运行它,请全局安装它。 如果两者都需要,则将其安装在两个位置,或使用npm link

所以我所做的是在生成 package.json 的项目根目录中运行 npm init(请参阅 http://npmjs.org/doc/init.html)。现在,当我运行 npm install xxxxx 时,它会在我的项目文件夹中创建一个 node_modules 目录(我将其添加到我的 .gitignore 中)。这适用于我在代码中需要的模块。

对于诸如 CoffeeScript 之类的命令,我使用 npm install -g coffee-script 安装它,它将它放在正确的目录 (.nvm/$VERSION/lib/node_modules) 中。虽然我不需要这些模块(npm 链接应该可以解决这个问题),但我可以运行命令 - 即 coffee

【讨论】:

【参考方案2】:

我刚刚全局安装了 express (-g),但在 require("express") 时遇到了问题。就像 Jesse Vogt 说的我刚刚重新安装了 express 但这次没有 -g 就像这样:“sudo npm install express”,现在工作正常!

【讨论】:

说实话;我不知道,我对此很陌生。然而,在 Jesse 离开的网上冲浪 (docs.npmjs.com/getting-started/installing-npm-packages-locally) 我发现了以下内容:“如果你想使用 Node 的 require 等依赖于你自己模块中的包,那么你想在本地安装......”我愿意不太了解其中的区别,但是可以肯定的是,如果您需要使用 require() 来运行服务器,则应在本地进行安装(不带 -g),因为这对我有用。【参考方案3】:

对于最新的 nvm 窗口版本1.1.7。 软件包已安装并放入相应的 nodejs 版本中。

nvm use 16.8.0
npm install truffle

nvm use 16.7.0
npm install mysql

【讨论】:

以上是关于节点版本管理器 (NVM) npm 将模块安装到公共文件夹的主要内容,如果未能解决你的问题,请参考以下文章

安装node.js版本管理器nvm以及添加npm

节点版本管理器安装 - 未找到 nvm 命令

安装nvm管理多版本nodejs

node节点版本管理器NVM,详解安装教程,建议收藏

nvm Nodejs 版本管理器 安装及配置

NVM:npm install -g 一直使用错误的节点版本