在 JavaScript 中,无论是老手还是专家都可能在命令行中应用过 NPM。在本篇文章中,我将会整顿超实用的 NPM 命令、快捷方式及技巧,帮忙 JavaScript 开发人员进步生产力和效率。
在这篇文章中,咱们将涵盖以下主题:
- npm 的定义。
- 应用 npm 包管理系统管理应用程序依赖项,来公布或勾销公布包。
- 按版本号安装包。
package.json
和package-lock.json
文件之间的区别。- 应用 npm 命令审核包安全性。
在开始之前,让咱们回顾一下什么是 NPM 以及如何应用它。
什么是 NPM?
从概念上讲,NPM(Node Package Manager)相似于 PiP(Python),RubyGems(Ruby on Rails),apt-get(Debian),rpm / yum(Red Hat/Fedora),CPAN(Perl)或 PEAR(PHP)等工具。NPM 于 2010 年公布,是 Node.js 的包治理和散发零碎,Node 是一个用于构建服务器端应用程序的环境。其目标是应用简略的命令行界面在互联网上公布和散发 Node.js 包。近年来,它也被宽泛用于散发前端库,如 React 或 TailwindCss。应用 npm,用户能够在 npm 的网站上疾速找到用于特定目标的软件包、下载、装置或治理用户已装置的软件包。
如何应用 NPM
应用 NPM 很简略,能够了解为像 Node 一样从命令提示符运行的另一个命令。举个例子,当初创立一个名为 tester 的目录,并应用以下命令初始化我的项目:npm init-yes
。此文件夹中主动生成一个名为 package.json
的文件,此文件蕴含无关我的项目的所有信息。之后,执行以下命令:npm install ioredis
在这里,NPM 是命令行界面(CLI)程序,能够向其收回装置命令。ioredis
是该命令的参数,这是用户与 NPM 的交互将采纳的个别模式。通过执行上一个命令,咱们将在 tester 文件夹中创立一个名为 node_modules
的新目录。这是形成 ioredis
模块的所有代码。
package.json 和 package-lock.json 之间的区别
通过应用命令:npm install ioredis
,还会主动生成名为 package-lock.json
和 package.json
的两个文件。一般来说咱们会认为 package.json
文件相似于 package-lock.json
文件。
实际上这两个文件的确区别不大。package.json
蕴含我的项目的所有信息,尤其是我的项目中应用的依赖项或模块及其本地版本。package-lock.json
是 package.json
文件的正本、版本化的依赖树,它还包含用户应用的依赖项和开发依赖项。
NPM 全局与本地包
包能够在本地或全局模式下装置。在本文咱们是以本地模式装置软件包。
- 本地软件包 装置在运行
npm install
的目录中,并放在此目录下的node_modules
文件夹中。 - 全局软件包 都放在零碎中的一个地位(确切的地位取决于用户的设置),无论用户在哪里运行
npm install -g
。通常,全局装置的包提供从 shell(CLI)运行的可执行命令,并且跨我的项目重复使用该命令。全局模式包可从命令行界面(CLI)取得,而本地模式下的包装置在npm install
目录下的node_modules
文件夹中。全局软件包的例子有 nodemon,grunt-cli,forever,cross-env 等等。
按版本号装置软件包
npm 中的版本号匹配功能强大且灵便。有了它,用户能够定位给定包的特定版本或任何版本号范畴。默认状况下,NPM 会装置命名包的最新版本,就像咱们在上一节中所做的那样。无论是采纳默认值还是指定版本号,NPM 都将确定要装置的内容。包版本在 package.json
文件中申明,因而让咱们看一下相干字段:
{ …“version”:“4.28.2”,“dist-tags”: {“latest”:“4.28.2”},
… }
版本字段显然申明了以后包版本。dist-tags
包字段列出了软件包维护者能够用来帮忙用户抉择正确版本的符号标记。此字段由 npm dist
标记命令保护。npm install
命令反对以下变体:
$ npm install @tag
$ npm install @version
$ npm install @version-range
用户能够指定 ioredis@4.28.0 以定位准确版本,或指定 ioredis@“>3.1.0 < 4.0”以定位一系列 ioredis V3 版本。版本匹配说明符包含以下选项:
- 齐全版本匹配:4.28.0
- 至多版本 N:>4.28.0
- 最高版本 N:<4.28.0
- 两个版本之间:>=4.24.3 <4.28.3
@tag 属性是一个符号名称,例如 @latest、@stable 或 @canary。包所有者将这些符号名称调配给特定的版本号,并能够依据须要重新分配它们。@latest 比拟非凡,每当公布包的新版本时都会更新。
卸载包
如果你想下载安装过的包,应用以下指令:
$ npm uninstall <package-name>
更新包
我的项目建设之后,有时咱们会须要更新它所依赖的包。这能够这么操作:
$ npm update
NPM 将敞开并将所有软件包更新到最新版本。如果要将包更新到特定版本,请应用以下命令:
$ npm update <package-name>@version
审核包的安全性
有时应用的软件包会被发现存在安全漏洞,NPM 团队构建了以下命令来解决这个问题:
$ npm audit
运行此命令将扫描用户的 package.json
文件,并将依赖项列表提交到默认 NPM 镜像仓库,申请无关其中任何已知破绽的报告。此报告还将蕴含无关如何修改的信息。如果想要疾速修复问题,请运行以下命令:
$ npm audit fix
通过执行这个命令,NPM 将应用未报告破绽的最新可用版本,来更新易受攻击的软件包。如果要查看具体的审核报告,请执行:
$ npm audit –json
如果须要查看纯文本报告,请执行:
$ npm audit –readable
如果想看看 npm audit fix 怎么执行的,能够应用这个命令:
$ npm audit fix –dry-run
反复数据删除和批改
用户们经常埋怨的是 node_modules
目录的大小会忽然减少。尽管当初磁盘空间很便宜,然而可能节俭空间有什么不好呢?NPM 提供了两个命令来解决这种状况,第一个是:
$ npm dedupe
或:
$ npm ddp
此命令在 node_modules
中搜寻 tree of packages,并查找能够在 tree 中向上挪动并在依赖项之间共享的包,来缩小冗余并节俭空间。当装置 NPM 软件包时,packge tree 会随之被构建。只管包之间会有独特的依赖项,但 package tree 有很多独立的分支,而通过该命令能够从新组织这些分支。
第二个命令:
$ npm prune
此命令将查看已装置的软件包并查找可能不再须要的任何软件包。这通常产生在卸载软件包时,特地是用户在某个时候反复进行数据删除。
公布和勾销公布包
将包公布到镜像仓库很简略!当用户写好包之后,npm 会出初始化我的项目并将代码集中在一起,而后转到镜像仓库网站并创立一个新帐户。用户须要从命令行登录到该帐户。
$ npm login
输出用户名、明码和电子邮件地址。登录后,进行公布:
$ npm publish
应用此命令,将应用默认名称公布包。不过可能会呈现包名称被占用的状况。因而倡议在公布之前先对包名称进行搜寻,如果名称没有被占用的话,包就会立刻被公布并在镜像仓库中可用。
提醒
如果所需的名称不可用,NPM 还容许用户公布到 scope。例如,用户能够将名称更改为 @/
(或执行 npm init-scope=
)。而后,还须要将 -access public
增加到发布命令中。这样,只有包名称在 scope 内是惟一的就可用了,该名称同样还能够在其余 scope 中应用。如果用户须要从镜像仓库中删除这个软件包,只需:
npm unpublish [<@scope>/]<package-name>[@<version>]
到当初为止,咱们曾经摸索了一些十分高频实用的 NPM 命令。当然,NPM 还有许多其余实用命令咱们还没有波及到,你能够应用 command_npm help_
获取帮忙,或去 NPM 官网文档网站来摸索更多命令。
接下来我将列举一些技巧和快捷方式,帮忙你更无效地应用 NPM。
快捷方式和小 tips
在删除包时咱们总会有所顾虑,因为其余开发人员可能也依赖于这个包。在这个状况下能够应用以下命令:
npm deprecate <pkg>[@<version range>] <message>
这个命令将包标记为已弃用,能够抉择利用能够指定无关产生的状况的音讯。
- 将
private: true
增加到package.json
,以避免意外公布任何公有仓库。 - 疾速生成
package.json
文件,请应用以下命令:npm init -y
- 请不要删除
package.json
,但能够在提交之前删除package-lock.json
。 - 在从 Git 存储库克隆我的项目后运行
npm install
。 - 不倡议将
node_modules
推送到源代码治理存储库(如 Git)。如果您应用 Git 作为版本控制,请在推送我的项目之前将node_modules
增加到.gitignore
文件。