节点版本管理器 (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 将模块安装到公共文件夹的主要内容,如果未能解决你的问题,请参考以下文章