在 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. 关于css在html的三种使用方式

    关于css在html的三种使用方式 1.内联样式(直接在html里面使用style) eg:<h1 style="color:skyblue">这是一个测试标题< ...

  2. Float浮动、 CSS定位(position)

    Float浮动. CSS定位(position)1.CSS定位机制(1)普通流(标准流)-默认状态,元素自动从左往右,从上往下的排列(2)浮动-会使元素向左或向右移动,只能左右,不能上下-浮动元素碰到 ...

  3. html超链接相关代码

    1. <IDOCTYPE html>< html><head><title>图像和超链接</title><meta http-equi ...

  4. Java新手问题 请问各路大佬这是什么问题导致的呢?

  5. java.Text.ParseException:Unparseable date:"undefined 00:00:00"

    request.getParameter() 获取的日期要toString一下再parse,否则就会报这个异常

  6. vue3学习大全(1)

    # vue3.0 Vue3.0 在北京时间2020年9月19 日凌晨,发布了 3.0 版本,代号:*One Piece* ## 1.新特性 Vue 3 中一些需要关注的新功能包括: - [组合式 AP ...

  7. Windows快捷键学习

    Ctrl组合 Ctrl+C 复制 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+A 全选 Ctrl+Z 撤消 Ctrl+S 保存 Shift组合 Shift+Delete 永久删除 Shift+A ...

  8. 如何利用Apifox通过签名计算及数据加解密进行用户认证接口测试?

    用户注册场景:输入签名数据signature,appId,13位时间戳timestamp,6位随机数nonce,merchantId(非必填,本次不填)的请求参数发送给服务器,服务器返回响应数值后,校 ...

  9. spring aop切面说明

    execution:处理Join Point的类型,例如call.execution (* android.app.Activity.on**(..)):这个是最重要的表达式,第一个*表示返回值,*表 ...

  10. buildroot交叉编译ros过程中遇到的问题

    问题:Download error on https://pypi.python.org/simple/python-dateutil/:unknown url type:https --Some p ...