有两种方式能够装置 npm 包:

  • 在本地,进入node_modulesnpm 在当时目录及其先人中查找(或创立)的目录:

    npm install some-package
    
  • 大局,进入大局node_modules目录:

    npm install --global some-package
    

    (除了这个标志的长版别--global,咱们也能够运用更短的-g。)

后者需要 macOS 和其他一些 Unix 平台上的 root 拜访权限——这是一个相当大的缺陷。这就是为什么这篇博客文章探讨了大局装置的替代计划。

预备作业:更改指令行 PATH

咱们需要为某些办法更改指令行 PATH。这个 PATH 是一个指令行变量,它列出了当咱们输入指令时指令行查找可执行文件的一切途径。假如咱们想通过 npm 装置可执行文件,正确设置 PATH 十分重要。

网上有许多很好的教程,只需上网查找一下:

  • Windows:设置途径 powershell
  • MacOS:设置途径 zsh
  • Linux(例如):设置途径 bash

在 Windows 上,咱们能够像这样显现当时的 PATH:

$env:PATH

在 Unix 上,咱们能够这样显现:

echo $PATH

办法 1:更改“npm 前缀”

npm 文档主张更改 npm 前缀。

咱们能够如下显现当时前缀(我正在显现我的 Mac 的成果):

% npm config get prefix
/usr/local

在该前缀下,有两个重要的子目录。

首要,一个node_modules目录:

% npm root --global
/usr/local/lib/node_modules

其次,bin包含可执行文件的目录:

% npm bin --global
/usr/local/bin

默认情况下,此目录是 macOS PATH 的一部分。npm 将其中的链接增加到大局中node_modules——例如:

/usr/local/bin/tsc -> ../lib/node_modules/typescript/bin/tsc

咱们怎么更改 npm 的前缀?

设置

咱们创立一个目录并将 npm 的前缀设置为该目录:

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'

波涛号 (~) 自身是指 Unix 和 Windows 上的主目录。除了那个符号,咱们还能够运用 shell 变量$HOME(在 Unix 和 Windows 上),但有必要注意 shell 变量的扩展。

之后,咱们有必要增加~/.npm-global到 PATH。

装置包

咱们现在能够持续运用 flag 装置软件--global,但它们不会大局装置,它们将装置到咱们的主目录中:

npm install --global some-package

长处和缺陷

  • 长处:npm install --global无处不在。
  • 缺陷:没有package.json装置的东西会使重新装置更多的作业。
  • 缺陷:npm 自身现在也装置到了~/.npm-global(例如,假如你告知它自己更新)。

办法2:装置到主目录

大局装置的另一种替代办法是在本地装置到node_modules咱们的主目录中,而且只正确设置 PATH。

设置

咱们首要将咱们的主目录变成一个包:

cd ~
npm init --yes

然后咱们增加"~/node_modules/.bin"到咱们的PATH。

装置第一个包后,将存在以下新文件:

~/node_modules
~/package-lock.json
~/package.json

装置包

相反,咱们不是大局装置包,而是这样做:

cd ~
npm install some-package

这至少会增加以下目录node_modules(可能更多,取决于有多少依赖some-package项):

~/node_modules/some-package

每个提供的可执行文件cmdsome-package咱们还得到:

~/node_modules/.bin/cmd -> ../some-package/bin/cmd

也就是说,可执行文件是包的链接。

长处和缺陷

  • Pro:~/package.json记载一切已装置的软件包。这有助于重新装置。
  • 缺陷:咱们有必要先进入主目录才干装置包。
  • 缺陷:主目录中的三个新文件 –package.json,package-lock.json,node_modules.

装置到主目录的子目录中

这种办法是办法 2 的变体。但是,咱们没有将主目录转换为包,而是运用主目录的子目录。

设置

mkdir ~/npm
cd ~/npm
npm init --yes

然后咱们增加~/npm/node_modules/bin到咱们的PATH。

装置第一个包后,将存在以下新文件:

~/npm/node_modules
~/npm/package-lock.json
~/npm/package.json

装置包

cd ~/npm
npm install some-package

长处和缺陷

  • Pro:~/npm/package.json记载一切已装置的软件包。这有助于重新装置。
  • 缺陷:咱们有必要先去,~/npm然后才干装置包。

办法 4:运用 npx

假如咱们感兴趣的可执行文件与其包同名,则 npx 是一个选项。(这不是一个严格的要求,但咱们有必要输入更多。)

它的作业原理如下。假如咱们cowsay大局装置可执行文件并以这种方式运转它:

cowsay 'Moo'

然后咱们也能够这样运转它——无需装置任何东西:

npx cowsay 'Moo'

咱们第一次运用这个指令时,npx 下载cowsay到用户本地缓存并从那里运转它。下载可能需要一些时刻,但只需要一次。因此,从第2次开始,cowsay通过 npx 运转几乎与运转已装置版别相同快。

npm 文档有更多关于 npx的信息。

长处和缺陷

  • 长处:无需装置——这对于咱们不经常需要的可执行文件十分有用。
  • 缺陷:运转可执行文件意味着更多的输入。
  • 缺陷:假如可执行文件与其包的名称不同,则不是一个真实的挑选。
  • 缺陷:使离线预备变得更加困难。

办法 5:运用 Node.js 版别管理器

有一些东西能够让咱们装置多个 Node.js 版别并在它们之间切换——例如:

  • 节点版别管理器 (nvm)
  • 伏打

这些东西通常将 npm 前缀设置为当时主目录内的某个目录。