有两种方式能够装置 npm 包:
-
在本地,进入
node_modules
npm 在当时目录及其先人中查找(或创立)的目录: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
每个提供的可执行文件cmd
,some-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 前缀设置为当时主目录内的某个目录。