我的 npm 模块应该安装在 Mac OS X 的啥位置?

Posted

技术标签:

【中文标题】我的 npm 模块应该安装在 Mac OS X 的啥位置?【英文标题】:Where should my npm modules be installed on Mac OS X?我的 npm 模块应该安装在 Mac OS X 的什么位置? 【发布时间】:2014-09-22 15:12:12 【问题描述】:

当我开始遇到麻烦时,我正试图通过npm 升级phonegap。长话短说,我的电脑上有两个node_modules 目录。

/usr/local/lib/node_modules
/usr/local/share/npm/lib/node_modules

当我运行npm upgrade -g phonegap 时,npm 似乎更新了驻留在/usr/local/lib/node_modules 中的包的副本。但是,如果我 which phonegap 我发现符号链接指向 /usr/local/share/npm/lib/node_modules 的旧安装。

另外,当我尝试安装诸如express 之类的独立包时,文件安装在/usr/local/lib/node_modules 目录中,但在我的$PATH 中的任何位置都没有创建指向可执行文件的符号链接。

两个问题:

Mac OS X 上节点模块的正确目录是什么? 如何配置npm 以在我的$PATH 安装软件时链接可执行文件?

加分项:node的安装方法会影响配置吗?有一个lot of options。


编辑:我发现在我的/usr/local/bin 中创建了符号链接,但我的.bash_profile 在我的$PATH 中设置为/usr/local/share/npm/bin/usr/local/bin 之前。我隐约记得在某个时候将该路径添加到我的个人资料中,但我不确定为什么。

所以现在的问题变成了:我是如何在我的计算机上得到两个不同的node_modules 目录的?为什么我要将我的node_modules 放在share/npm/lib 子目录中而不是在/usr/local/lib 中?

【问题讨论】:

使用npm root -g 查找全局包根路径 【参考方案1】:

/usr/local/lib/node_modules 是全局安装节点模块的正确目录。

/usr/local/share/npm/lib/node_modules 对我来说毫无意义。这里的一个问题是您感到困惑,因为有两个名为 node_modules 的目录:

/usr/local/lib/node_modules/usr/local/lib/node_modules/npm/node_modules

后者似乎是 Node 附带的节点模块,例如 lodash,而前者是我使用 npm 安装的 Node 模块。

【讨论】:

这两个节点有什么区别?对于 OS X 用户,建议在安装时使用来自节点的那个。迁移到正确安装 npm 会更好吗? 从 macports 安装 npm2,你的路径在这些位置不存在,在 /opt/local/share 中也不存在..【参考方案2】:

第二个Thomas David Kehoe,有以下警告--

如果您使用的是节点版本管理器 (nvm),您的全局节点模块将存储在您保存模块时使用的任何节点版本下。

所以~/.nvm/versions/node/version/lib/node_modules/

【讨论】:

正是我想要的。【参考方案3】:
npm root -g

检查 npm_modules 全局位置

【讨论】:

找到node_modules的全局路径的最好最简单的方法。【参考方案4】:

如果你想知道你的 NPM 包的位置,你应该:

which npm // locate a program file in the user's path SEE man which
// OUTPUT SAMPLE
/usr/local/bin/npm
la /usr/local/bin/npm // la: aliased to ls -lAh SEE which la THEN man ls
lrwxr-xr-x  1 t04435  admin    46B 18 Sep 10:37 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js

因此,鉴于 npm 本身是一个 NODE 包,它与其他包安装在同一位置(EUREKA)。所以要确认你应该 cd 进入 node_modules 并列出目录。

cd /usr/local/lib/node_modules/
ls
#SAMPLE OUTPUT
@angular npm .... all global npm packages installed

npm root -g

根据@anthonygore 的评论

【讨论】:

更简单:npm root -g 对我来说,npm root -gwhich npm 没有给出相同的结果。我想卸载expo-cli,我成功地从/usr/local/bin/npm 中删除了expoexpo-cli 目录。谢谢@T04435!【参考方案5】:

查找当前活动npm 安装的当前路径:

npm root -g

或尝试以下流行的默认设置之一:

Linux:

/usr/local/lib/node_modules

MacOS(通过 brew 安装):

/opt/homebrew/lib/node_modules

使用 nvm 安装的 Linux(可能还有 macos):

~/.nvm/versions/node/version/lib/node_modules/

Windows(奖励?)

C:\Program Files\nodejs\node_modules\

【讨论】:

【参考方案6】:

使用这个命令: npm -t -> 找到你的全局 npm 包的路径。

如果您使用的是 nvm(节点版本管理器包)。那么你的路径可能 看起来像这样/Users/yourName/.nvm/versions/node/v14.15.3/lib/node_modules/npm

【讨论】:

以上是关于我的 npm 模块应该安装在 Mac OS X 的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

markdown 如果你已经在Mac OS X或Linuxbrew上通过Homebrew安装了Node,那么如何修复npm的说明

Mac OS X 10.9 后无法安装 PIL

cabal 在 Mac OS X 上安装加速 cuda 错误 [重复]

013_Mac OS X下应该如何卸载软件和安装应用软件

最新Mac OS X 10.12.1 安装cocoapods及使用详解

npm 命令自动通过淘宝镜像源安装(MAC OS下)