npm 安装Node.js -使用Homebrew与手动管理的优点/缺点?

jjjwad0x  于 2023-08-06  发布在  Node.js
关注(0)|答案(4)|浏览(164)

因此,我正在寻找一些关于管理手动安装的Node.js包与使用Homebrew的优缺点的信息。
除了让 brew 为您管理所有内容的明显优势(与使用 nvm 保持Node更新相反)之外,在使用 brew(或通过 npmnvm 等)和手动管理某些内容时,是否有任何实际问题或潜在冲突需要注意?

dba5bblo

dba5bblo1#

对于Node.js(或Python或Ruby等)等应用程序解释器,我的情况是:

  • 我有很多项目,有时候一打又一打
  • 每个项目都与特定的解释器版本适度耦合或紧密耦合
  • 例如,需要Node v0.8.x或v0.10.24
  • 在系统范围内安装这些解释器会促进项目间的耦合,因此我升级了node,因为project8已经准备好升级,而project3中断了。

考虑到这些限制,我为每个项目安装解释器,因为对我来说,稳定性和解耦比其他因素(如减少磁盘空间需求)更重要。
Homebrew非常适合与项目无关的工具,如aggit等,以及相对稳定的其他工具,如PostgreSQL或MySQL或MongoDB。但是对于实际的语言运行时,耦合太紧了,所以我不使用Homebrew。
安装Node.js只是下载和提取tar存档,所以说实话,你不需要花哨的工具。但是,我有一个名为wallah的项目可以帮助解决这个问题。您还可以查看nvmenvirius

mitkmikd

mitkmikd2#

要更新npm本身,您需要运行npm update npm -g。其中-g代表全局。
知道如果您想更新系统上安装的全局软件包,您将运行npm update -g
如果在运行npm update时没有追加-g,它将尝试更新本地节点包(也称为您当前的目录$PWD)。要查看本地目录中是否安装了任何软件包,可以运行npm list,如果没有安装,将返回以下内容:

/your/current/directory/
└── (empty)

字符串
如果该文件夹中确实有节点包,则会看到如下所示的内容(注意:这是我运行npm list -g时返回的内容):

/usr/local/lib
└─┬ npm@1.4.7
  ├── abbrev@1.0.4
  ├── ansi@0.2.1
  ├── ...


您可能还需要运行brew update && brew upgrade && brew doctor以确保所有内容都是最新的。
对于第一个问题,我的建议是使用brew,因为从长远来看,它可以为您节省很多麻烦,因为它可以管理您安装在计算机上的几乎所有内容。看看这个https://github.com/nicolashery/mac-dev-setup,看看他们是如何设置开发计算机的。
请确保您查看此https://github.com/phinze/homebrew-cask,以便您可以通过brew cask <app you want>安装应用程序。
node使用brew的最大原因是它同时安装了Node.js和npm,它使用$(brew --prefix)路径,但在/usr/local/中仍然有自己的位置。您仍然可以使用与通过软件包安装安装时相同的所有命令。然而,你实际上可以通过简单地运行brew uninstall node来卸载node和npm,这是你不能用其他方式安装它的。
希望这对你有帮助。

附言

如果您已经通过其他方法安装了Node.js,那么sudo chown $USER /usr/local/*就是您的朋友。所有这一切都是允许读/写访问所有的文件夹和文件在/usr/local/这是只需要修复链接的brew。

uyhoqukh

uyhoqukh3#

有些人报告说,如果通过Brew安装,npm update本身无法工作(npm无法更新npm)。
我建议手动安装,因为NPM将管理node.js更新和包,而Brew只管理node.js + npm,而不管理模块。此外,Brew经常在更新版本中落后。

fcg9iug3

fcg9iug34#

以下是自制软件相对于手工安装node js的一些优点
1.通过安装程序安装node时,您需要sudo权限才能正确安装或取消安装软件包。sudo允许安装程序将文件放置在文件系统中只有管理员可以访问的区域。Homebrew的一个优点是,它不需要访问计算机的管理员专用区域来安装NodeJS
1.通过安装程序安装Node后,您必须将节点可执行文件的路径添加到您的系统$PATH中。
其中一个开箱即用的优势是它可以帮助Web开发人员在Mac上安装一些缺失的软件包。

相关问题