【问题标题】: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 查找全局包根路径

标签: node.js macos npm


【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 2013-04-15
      • 2015-10-11
      • 2010-12-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      相关资源
      最近更新 更多