在 JavaScript 中,无论是新手还是专家都可能在命令行中使用过 NPM。在本篇文章中,我将会整理超实用的 NPM 命令、快捷方式及技巧,帮助 JavaScript 开发人员提高生产力和效率。

在这篇文章中,我们将涵盖以下主题:

  • npm 的定义。
  • 使用 npm 包管理系统管理应用程序依赖项,来发布或取消发布包。
  • 按版本号安装包。
  • package.jsonpackage-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.jsonpackage.json 的两个文件。一般来说我们会认为 package.json 文件类似于 package-lock.json 文件。

实际上这两个文件确实区别不大。package.json 包含项目的所有信息,尤其是项目中使用的依赖项或模块及其本地版本。 package-lock.jsonpackage.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 文件。

NPM 实用命令与快捷方式的更多相关文章

  1. npm常用命令解析

    npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载.安装.上传以及管理已经安装的包. npm ...

  2. npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)

    什么是npm npm有两层含义.一层含义是Node的开放式模块登记和管理系统,网址为npmjs.org.另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块. npm ...

  3. 【原】npm 常用命令详解

    今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...

  4. npm常用命令

    npm常用命令 环境:win7 npm 是什么 NPM(node package manager),通常称为node包管理器.顾名思义,它的主要功能就是管理node包,包括:安装.卸载.更新.查看.搜 ...

  5. npm常用命令小结

    目录(更新于2016.09.23): 1.认识和使用NPM 2.npm包安装模式 3.npm包管理(package的安装.卸载.升级.查看.搜索.发布,其他等) npm install [-g] 本地 ...

  6. 安装mysql数据库中的技巧、错误排查以及实用命令(持续更新)

    针对解压版本5.7.16(博主使用的这个版本.在某些低版本中部分命令失效) 一.初始化data目录(解压版解压后没有data目录) mysqld --initialize-insecure --use ...

  7. NoSQL之Redis高级实用命令详解--安全和主从复制

    Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim ...

  8. npm使用过程中的一些错误解决办法及npm常用命令

    node,npm在前端开发流程中提供了非常完善的自动化工具链,但是同样由于其复杂性导致有很多奇奇怪怪的问题.本文将记录使用过程中出现的一些问题及其解决方法备案. 国内由于gfw问题,导致很多国外的网站 ...

  9. npm常用命令总结

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: rgba(2 ...

  10. npm 常用命令详解[转]

    npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载.安装.上传以及管理已经安装的包. npm ...

随机推荐

  1. C# DevExpress gridview 字符串尾部带数字如何排序

    我们经常遇到这样的问题,字符串尾部带数字,如何正确排序; 首先设置GridView ,Columns 的相关列,设置属性中,SortMode为Custom 解决思路,把字符串尾缀数字,分离出来.先比较 ...

  2. CV入坑

    https://www.cnblogs.com/fldev/p/14360149.html

  3. manu check RAID GEM count and Fragment count of local FN>1

    cat MANU_CHK.sh echo "input Chr" read C echo "input Start" read S echo "inp ...

  4. 如何优化MySQL

    1.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率.b. 选择合适的表字段数据类型和存储 ...

  5. 使用selemium被反爬解决方法

    使用selenium进行自动化的时候,如csdn登录时可能会遇到检测反爬,从而需要验证       1. 反爬 有时候,我们利用 Selenium 自动化爬取某些网站时,极有可能会遭遇反爬. 实际上, ...

  6. docker&docker-compose安装

    一.docker安装 1.通过 uname -r 命令查看当前的内核版本,Docker 要求 CentOS 系统的内核版本高于 3.10 uname -r 2.查看系统是否安装过docker yum ...

  7. Go_day06

    Go基础语法 错误和异常 什么是错误error 错误是指可鞥出现问题的地方出现了问题,这种情况在预料之中 func main() { //打开一个文件 file, err := os.Open(&qu ...

  8. html、css、js 压缩或混淆方法

    普通的压缩代码的方法包括在线工具和服务器打包处理,有一个共同的痛点是:压缩后的代码无法还原成原始的带有注释的源代码.正如大家所知,在源代码中调试Bug事半功倍.在线工具HCJCompress(ihon ...

  9. SpringBoot之独立quartz数据源

    背景: 之前项目里面把quartz相关的表跟业务数据库(涉及系统业务的库)融合在一起,后面需要把quartz单独拎出来放在一个数据库里面, 旧的数据源配置(application.properties ...

  10. conda使用杂记

    总纲 https://docs.anaconda.com/anaconda/navigator/ 其中有链接 miniconda https://docs.anaconda.com/anaconda/ ...