soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
什么是npm?面向初学者的Node Package Manager教程

本文应该作为Node.js最喜欢的伙伴:npm的多合一基本指南。

自2009年以来,Node.js一直席卷全球。使用Node.js构建了成千上万的系统,这促使开发人员社区宣称“ JavaScript正在吞噬软件”。

Node成功的主要因素之一是npm-它受欢迎的软件包管理器,它使JavaScript开发人员可以快速方便地共享有用的软件包,例如lodash和moment。

在撰写本文时,npm促进了130万个软件包的发布,每周下载量超过160亿个!这些数字对于任何软件工具都非常有用。现在,让我们讨论一下npm到底是什么。

什么是NPM?

NPM(或“节点程序包管理器”)是JavaScript运行时Node.js的默认程序包管理器。

它也被称为“忍者南瓜突变体”,“非营利比萨饼制作者”,以及许多其他随机名称,您可以在npm-expansions上进行探索,甚至可以做出贡献。

NPM由两个主要部分组成:

一个用于发布和下载软件包的CLI(命令行界面)工具,以及

托管JavaScript程序包的在线存储库

为了获得更直观的解释,我们可以将存储库npmjs.com视为一个实现中心,该中心从卖家(npm包裹的作者)那里接收商品的包裹,并将这些商品分发给买方(npm包裹的用户)。

为了促进此过程,npmjs.com履行中心雇用了一群勤劳的袋熊(npm CLI),他们将被分配为每个npmjs.com客户的个人助理。因此,依赖项将交付给JavaScript开发人员,如下所示:

为您的JS伙伴发布软件包的过程如下:

让我们看看这只袋熊如何协助想要在项目中使用JavaScript包的开发人员。我们还将看到它们如何帮助开源向导将其出色的库推向世界。

package.json

JavaScript中的每个项目(无论是Node.js还是浏览器应用程序)都可以归类为npm软件包,并具有自己的软件包信息和package.json描述项目的工作。

我们可以将其package.json视为我们袋熊部队运送的npm好盒子上的加盖标签。

package.json将在npm init运行以初始化JavaScript / Node.js项目时生成,其中包含开发人员提供的以下基本元数据:

name:您的JavaScript库/项目的名称

version:项目的版本。通常,在应用程序开发中,由于显然没有必要对开源库进行版本控制,因此经常忽略该领域。但是,它仍然可以作为部署版本的来源方便使用。

description:项目说明

license:项目的许可证

npm脚本

package.json还支持scripts可定义为运行安装在项目本地上下文中的命令行工具的属性。例如,scripts一个npm项目的一部分可能看起来像这样:


{

  "scripts": {

    "build": "tsc",

    "format": "prettier --write **/*.ts",

    "format-check": "prettier --check **/*.ts",

    "lint": "eslint src/**/*.ts",

    "pack": "ncc build",

    "test": "jest",

    "all": "npm run build && npm run format && npm run lint && npm run pack && npm test"

  }

}

有eslint,prettier,ncc,jest不一定安装为全球的可执行文件,而是为您的本地项目中node_modules/.bin/。

最近引入的npx允许我们node_modules通过前缀npx ...(ie npx prettier --write **/*.ts)来像全局安装的程序一样运行这些项目范围的命令。

依赖vs开发依赖

这两个以键值对象的形式出现,其中npm库的名称为键,其语义格式的版本为值。这是来自Github的TypeScript Action模板的示例:

{

  "dependencies": {

    "@actions/core": "^1.2.3",

    "@actions/github": "^2.1.1"

  },

  "devDependencies": {

    "@types/jest": "^25.1.4",

    "@types/node": "^13.9.0",

    "@typescript-eslint/parser": "^2.22.0",

    "@zeit/ncc": "^0.21.1",

    "eslint": "^6.8.0",

    "eslint-plugin-github": "^3.4.1",

    "eslint-plugin-jest": "^23.8.2",

    "jest": "^25.1.0",

    "jest-circus": "^25.1.0",

    "js-yaml": "^3.13.1",

    "prettier": "^1.19.1",

    "ts-jest": "^25.2.1",

    "typescript": "^3.8.3"

  }

}

这些依赖关系通过npm install带有--save和--save-dev标志的命令安装。它们分别用于生产和开发/测试环境。在下一部分中,我们将更深入地研究这些软件包的安装。

同时,重要的是要了解语义版本之前可能出现的符号(假设您已阅读semvermajor.minor.patch模型):

^:最新的次要版本。例如,如果^1.0.4规范1.3.0是1主要系列中的最新次要版本,则该规范可能会安装。

~:最新的修补程序版本。与^次要版本相同,如果~1.0.4规范1.0.7是1.0次要系列中的最新次要版本,则可以安装规范。

所有这些确切的软件包版本都将记录在生成的package-lock.json文件中。

package-lock.json

该文件描述了npm JavaScript项目中使用的依赖项的确切版本。如果package.json是通用描述性标签,package-lock.json则是成分表。

就像我们通常不阅读产品的成分表(除非您太无聊或需要知道)一样,package-lock.json也不意味着开发人员逐行阅读(除非我们不顾一切地解决“在我的机器上工作”问题。

package-lock.json通常是由npm install命令生成的,也可以由我们的NPM CLI工具读取,以确保使用复制项目的构建环境npm ci。

如何有效地命令NPM袋熊作为“买方”

从前面提到的130万个发布的软件包中,有160亿次下载,可以推断出,大多数npm用户都朝着这个方向使用npm。因此,很高兴知道如何使用这个强大的工具。

npm安装

这是当今我们开发JavaScript / Node.js应用程序时最常用的命令。

默认情况下,npm install <package-name>将安装带有^版本符号的软件包的最新版本。一个npm install与NPM项目的范围内将软件包下载到该项目的node_modules按文件夹package.json规格,升级包版本(进而再生package-lock.json),无论它可以根据^和~版本匹配。

-g如果要在全局上下文中安装程序包,可以在机器的任何地方使用它,则可以指定一个全局标志(这对于命令行工具程序包(如live-server)很常见)。

npm使安装JavaScript软件包非常容易,以至于经常错误地使用此命令。这导致npm成为许多程序员的笑话的屁股:

这是--production救助旗帜的地方!在上一节中,我们分别讨论了在生产和开发/测试环境中的使用情况,dependencies并devDependencies打算分别在其中使用。此--production标志是如何产生差异的node_modules。

通过将此标志附加到npm install命令,我们将仅从安装软件包dependencies,从而极大地减小node_modules了应用程序的大小,这对于启动和运行应用程序是绝对必要的。

就像男孩和女童子军一样,我们没有将柠檬榨汁器带到我们的柠檬水摊位,就像我们不该将devDependencies其投入生产!

npm ci

因此,如果npm install --production对于生产环境是最佳的,是否必须有一个对于我的本地开发,测试设置最理想的命令?

答案是npm ci。

就像package-lock.json项目中不存在的项目一样,它在每次npm install调用时都会生成,它npm ci会消耗此文件来下载项目所依赖的每个软件包的确切版本。

这样,无论是用于开发的笔记本电脑还是Github Actions等CI(连续集成)构建环境,我们都可以确保项目上下文在不同机器上保持完全相同。

npm审核

由于已经发布了许多软件包并且可以轻松安装它们,因此npm软件包容易受到恶意作者的恶意攻击,这些恶意作者具有此类意图。

意识到有一个在生态系统中的问题,npm.js组织想出了这个主意的npm audit。他们维护了一个安全漏洞列表,开发人员可以使用此npm audit命令来审核其依赖项。

npm audit向开发人员提供有关漏洞以及是否有要修复的版本的信息。例如,

如果补救措施在下一个不间断的版本升级中npm audit fix可用,则可用于自动升级受影响的依赖项的版本。

如何有效地命令NPM袋熊成为“卖方”

我们已经经历了如何将NPM CLI工具用作使用者,但是如何有效地将其用作作者(又有可能成为JavaScript开源向导
2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示