作为 JavaScript 开发者应该知道的 NPM 命令和快捷方式

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 作为 JavaScript 开发者应该知道的 NPM 命令和快捷方式

无论您是 JavaScript 世界的新手还是精通者,您可能已经或将要在命令行中使用那些烦人的三个小字母 — npm —,绝望地尝试下载包,这些包是来自中央包注册表的可重用 JavaScript 模块。但是您知道使用此命令可以执行一些惊人的操作来帮助您加速应用程序的开发吗?

在本文中,我将为您提供最重要的 NPM 命令、快捷方式和技巧,以帮助您提高 JavaScript 开发人员的生产力和效率。

在这篇文章中,我们将讨论以下主题:

  • NPM 的定义。
  • 使用 npm 包管理系统来管理应用程序依赖项,发布和取消发布包。
  • 按版本号安装包。
  • package.json 和 package-lock.json 文件之间的区别。
  • 使用 NPM 命令审计包安全性。
  • 以及更多

在开始之前,让我们回顾一下什么是 NPM 以及如何使用它。

什么是 NPM?

从概念上讲,NPM 代表节点包管理器,类似于 PiP (Python)、RubyGems (Ruby on Rails)、apt-get (Debian)、rpm/yum (Red Hat/Fedora)、CPAN (Perl) 等工具, 或 PEAR (PHP)。NPM 于 2010 年发布,是 Node.js 的包管理和分发系统,Node.js 是用于构建服务器端应用程序的环境。它的目的是使用简单的命令行界面在 Internet 上发布和分发 Node.js 包。近年来,它还广泛用于分发非 Node.js 模块的前端库,如 React 或 TailwindCss。使用 npm,您可以在npm 网站上快速找到用于特定目的的包,下载它们,安装它们,或管理您已经安装的包。

如何使用 NPM

使用 npm 很简单,它只是从命令提示符运行的另一个命令,就像 Node 一样。例如,假设您创建了一个名为tester的目录并使用以下命令初始化您的项目npm init –yes:在此文件夹中自动生成一个名为package.json的文件。 该文件包含有关您的项目的所有信息。之后,您执行以下命令:

npm install ioredis
复制代码

在这里,npm是命令行界面 (CLI) 程序,它本身就是 NPM,而 install 是您可以向它发出的一个命令。然后,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.json只是 package.json 文件的副本,版本化的依赖树。它还包括您使用的依赖项和 devDependencies。

NPM 全局和本地包

软件包以本地或全局模式安装。到目前为止,我们已经在本地模式下安装了包。

让我们知道如何在这两种模式下安装包。

  • 本地包安装在您运行npm install的目录中,它们放在该目录下的node_modules文件夹中。
  • 全局包都放在系统中的一个位置(确切位置取决于您的设置),无论您在哪里运行npm install -g。通常,全局安装的包会提供您从 shell (CLI) 运行的可执行命令,并且它会在项目中重复使用。全局模式包可从命令行界面 (CLI) 获得,而本地模式下的包安装在父工作文件的 node_modules 文件夹中。您可能知道的流行全局包的好例子是nodemongrunt-cliforevercross-env ……

按版本号安装包

npm 中的版本号匹配功能强大且灵活。有了它,您可以针对给定包的特定版本或任何版本号范围。默认情况下,npm 会安装指定包的最新版本,就像我们在上一节中所做的那样。无论您采用默认值还是指定版本号,npm 都会确定要安装的内容。包版本在package.json文件中声明,我们看一下相关字段:

{ …
“version”: “4.28.2”,
“dist-tags”: {
“latest”: “4.28.2”
},
… }
复制代码

version 字段显然声明了当前的包版本。dist-tags 字段列出了包维护者可以用来帮助用户选择正确版本的符号标签。该字段由npm dist-tag命令维护。npm install 命令支持这些变体:

$ npm install <package-name>@tag
$ npm install <package-name>@version
$ npm install <package-name>@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
复制代码

重复数据删除和修剪

您经常会看到的关于 NPM 和 Node 的抱怨之一是node_modules目录的大小可能会迅速膨胀。幸运的是,您很少需要深入研究它,但这仍然是磁盘空间的问题,虽然现在磁盘空间很便宜,但浪费它仍然不时髦!

NPM 提供了两个命令来处理这种情况,首先是:

$ npm dedupe
复制代码

或者

$ npm ddp
复制代码

此命令搜索node_modules中的包树,并寻找可以将包向上移动并在依赖项之间共享的机会,从而减少冗余并节省空间。包树是在您安装包时构建的,随着 NPM 安装包,它依赖于等等。

有时,包会有共同的依赖关系,但作为一棵树,分支大多是独立的。此命令尝试重新组织这些分支以提高它们的效率。

第二个命令是这样的:

$ npm prune
复制代码

此命令将检查已安装的软件包并查找可能不再需要的任何软件包。这通常发生在您卸载软件包时,尤其是当您在某个时候进行了重复数据删除时。

发布和取消发布包

发布到注册表非常简单!首先,你需要,嗯,写你的包裹!总得有东西,发布,对不对?您不需要做任何特别的事情,但 npm 初始化您的项目并将您的代码拼凑在一起。

之后,转到注册表网站并创建一个新帐户。您将需要从命令行登录到该帐户。

$ npm login
复制代码

这将提示您输入用户名、密码和电子邮件地址。登录后,发布非常简单:

$ npm publish
复制代码

通过使用此命令,您的包将以其默认名称发布。好吧,等等,有一件事可能会出错:您的包裹名称可能已经被占用了。首先对名称进行 npm 搜索总是一个好主意,但假设该名称未被使用(或者您在发现冲突后更改了它),那么它将立即发布并在注册表中可用。

提示

如果您想要的名称不可用,NPM 还允许您发布到一个范围。这意味着,例如,您可以将名称更改为 @/ (或执行npm init — scope=)。然后,您还需要将 –access public 添加到发布命令。这样,只要您的包名称在范围内是唯一的,那么您就可以开始了;该名称可以毫无问题地用于其他范围(并且没有范围实际上是默认范围!)。所以,如果像域名一样,您想要的那个被占用了,那么在 NPM 土地上有一种解决方法。如果您出于某种原因决定需要从注册表中删除您的包,这很简单:

npm unpublish [<@scope>/]<package-name>[@<version>]
复制代码

现在,我们已经探索了对您有用的最相关的 NPM 命令。但也有一些我们没有接触的有用的 npm 命令。您可以使用命令_npm help_ 获取帮助或移至 npm 文档网站以发现更多命令。

现在我们已经深入了解了 NPM,让我们列举一些有助于您高效使用 NPM 的提示、技巧和快捷方式。

提示和快捷方式

  1. 删除包通常被认为是错误的形式,因为其他开发人员可能依赖于它。更好的做法是使用另一个命令:
npm deprecate <pkg>[@<version range>] <message>
复制代码

这会将您的包标记为已弃用,可选择应用一条消息,您可以指定发生的情况。

  1. 添加private: truepackage.json以防止意外发布任何私有存储库。
  2. 要快速生成 package.json 文件,使用命令:npm init --y
  3. 不要删除package.json,但您可以在提交之前删除package-lock.json 。
  4. 从 Git 存储库克隆项目后,您需要运行npm install 。
  5. 不建议将node_modules推送到您的源代码控制仓库,例如 Git。如果您使用 Git 作为版本控制,请在推送项目之前将 node_modules 添加到 .gitingore文件

结论

现在您已经了解了基本的 NPM 命令和快捷方式,是时候将它们付诸实践了!继续在您的下一个项目中试用它们。而且,如果您遇到任何其他有用的 NPM 命令,请不要犹豫,在下面的评论中分享它们。您的贡献可以帮助使 JavaScript 开发世界更加高效和简化。那么,让我们开始并充分利用 NPM!


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
JavaScript
使用node.js控制CMD命令——修改本机IP地址
使用node.js控制CMD命令——修改本机IP地址
|
3月前
|
缓存 JavaScript 前端开发
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
这篇文章介绍了如何解决npm版本与Node.js版本不兼容的问题,提供了查看当前npm和Node.js版本的步骤,以及如何根据Node.js版本选择合适的npm版本并进行升级的详细指导。
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
|
3月前
|
运维 JavaScript Serverless
Serverless革命:一键上云,Egg.js开发者的超级加速器!
【8月更文挑战第8天】本教程介绍如何结合Egg.js与Serverless技术简化Web应用部署。首先确保已安装Node.js及npm,并使用`egg-init`脚手架创建新应用。接着添加`egg-serverless`插件支持Serverless部署,编写基本的应用代码及路由规则。通过配置`fc.yml`文件集成阿里云Function Compute作为Serverless平台,并借助`@alicloud/fun`工具完成部署。最后,通过部署生成的URL验证应用是否成功上线。采用Serverless架构,开发者可以专注于业务逻辑,大幅提高部署效率和资源利用。
56 5
|
3月前
|
JavaScript 前端开发 测试技术
Vue.js开发者必看!Vue Test Utils携手端到端测试,打造无懈可击的应用体验,引领前端测试新风尚!
【8月更文挑战第30天】随着Vue.js的普及,构建可靠的Vue应用至关重要。测试不仅能确保应用质量,还能提升开发效率。Vue Test Utils作为官方测试库,方便进行单元测试,而结合端到端(E2E)测试,则能构建全面的测试体系,保障应用稳定性。本文将带你深入了解如何使用Vue Test Utils进行单元测试,通过具体示例展示如何测试组件行为;并通过Cypress进行E2E测试,确保整个应用流程的正确性。无论是单元测试还是E2E测试,都能显著提高Vue应用的质量,让你更加自信地交付高质量的应用。
65 0
|
3月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
164 0
|
3月前
|
JavaScript
【Deepin 20系统】Jupyter notebook解决ValueError: Please install Node.js and npm before continuing installa
文章讨论了在Deepin 20系统上安装Jupyter Notebook的debug插件时出现的"ValueError: Please install Node.js and npm before continuing installation"错误,并提供了使用conda安装Node.js的解决方法。
117 1
|
5月前
|
JSON JavaScript 前端开发
Node.js命令大全:让你的编程效率翻倍
探索Node.js常用命令!本文作者木头左带你了解文件操作:`ls`、创建/删除文件夹、复制/移动文件及读写文件内容。此外,还介绍了查看系统信息、CPU和内存详情的方法。一起提升Node.js开发效率![[1](https://mutouzuo.oss-cn-hangzhou.aliyuncs.com/my/mudouzuo1.png)]
Node.js命令大全:让你的编程效率翻倍
|
5月前
|
缓存 JavaScript 前端开发
npm命令介绍
npm命令介绍
|
5月前
|
JavaScript 前端开发 编译器
探讨TypeScript如何帮助JavaScript开发者避免这些常见错误,从而提高代码质量和开发效率
【6月更文挑战第13天】TypeScript,JavaScript的超集,通过添加静态类型检查和面向对象特性,帮助开发者避免常见错误,提升代码质量和开发效率。它能检测类型错误,防止运行时类型转变引发的问题;使用可选链和空值合并避免引用错误;通过枚举减少逻辑错误中的魔法数字;接口和泛型等特性提高代码可维护性。学习TypeScript对提升JavaScript开发质量有显著效果。
60 4
|
4月前
|
缓存 JavaScript 前端开发
npm常用命令详解与实践
npm常用命令详解与实践

推荐镜像

更多