‘‘Node 包管理器’’------npm

1、npm的发展历史与现状

npm(Node Package Manager)是由Isaac Z. Schlueter于2010年创立的,最初作为Node.js的包管理器,旨在让开发者能够轻松地安装和分享Node.js模块。自发布以来,npm因其开放性和易用性迅速普及,成为JavaScript生态系统中最流行的包管理工具。2014年,npm, Inc.在美国成立,以支持npm的持续开发和社区活动。

1.1 NPM 是什么

npm("Node 包管理器")是 JavaScript 运行时 Node.js 的默认程序包管理器。

它也被称为"Ninja Pumpkin Mutants","Nonprofit Pizza Makers",以及许多其他随机名称,你可以在 npm-expansions 上探索这些名称。

npm 由两个主要部分组成:

用于发布和下载程序包的 CLI(命令行界面)工具

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

2、npm的作用与价值

npm在JavaScript开发中扮演着至关重要的角色,其主要作用如下:

2.1 包管理

包管理是npm的核心功能之一,它允许开发者轻松地安装、更新和管理项目中的JavaScript代码库的包或模块。以下是包管理的详细解释:

在JavaScript项目中,包是指包含可重用代码的模块,这些模块可以是库、框架、工具或其他任何形式的代码。npm通过以下方式提升开发效率:

2.1.1 安装包

开发者可以使用npm install <package-name>命令来安装所需的包。

例如,安装流行的请求处理库express:

javascript 复制代码
npm install express

这个命令会在项目的node_modules目录中下载并安装express库,并在package.json文件中记录依赖信息。

2.1.2 更新包

随着包的更新,开发者可能需要将项目中的包更新到最新版本。

使用npm update <package-name>可以更新包:

javascript 复制代码
npm update express

2.1.3 管理包

npm允许开发者查看已安装的包、卸载不再需要的包以及管理包的版本。

例如,查看所有已安装的包:

javascript 复制代码
npm list

2.1.4 卸载包

卸载一个包:

javascript 复制代码
npm uninstall express

2.2 版本控制

npm的版本控制功能确保了项目依赖的稳定性和可预测性。

以下是版本控制的详细解释:

**精确版本控制:**每个npm包都会有一个版本号,例如1.0.0。开发者可以在package.json文件中指定依赖包的确切版本,以确保项目在不同环境中的一致性。

javascript 复制代码
"dependencies": {
  "express": "4.17.1"
}

**避免版本冲突:**在大型项目中,不同的包可能依赖于同一包的不同版本。npm通过解析依赖关系图来确保使用正确的版本,避免版本冲突。

**语义版本控制(SemVer):**npm遵循语义版本控制原则,版本号格式为MAJOR.MINOR.PATCH。开发者可以根据需要指定版本范围,例如^4.17.1表示兼容4.17.x的最新版本,但不会升级到5.0.0。

2.3 社区共享

npm的公共注册库是JavaScript开发者共享和分发代码的主要平台。以下是社区共享的详细解释:

庞大的注册库:npm注册库包含了数以百万计的包,开发者可以在这里找到几乎任何他们需要的模块。

分享代码:开发者可以通过npm publish命令将自己的代码库发布到npm注册库,供其他开发者使用。

javascript 复制代码
npm publish

获取模块:其他开发者可以通过npm install命令轻松地获取并使用这些共享的模块。

2.4 构建工具集成

现代前端框架和构建工具与npm紧密集成,以下是其集成方式的详细解释:

前端框架:如React和Angular等框架,通常通过npm来安装和管理其依赖包。

例如,安装React:

javascript 复制代码
npm install react react-dom

构建工具:如Webpack等构建工具,通过npm脚本在package.json中配置,以便于执行构建任务。

例如,定义一个构建脚本:

javascript 复制代码
"scripts": {
  "build": "webpack --mode production"
}

然后可以通过以下命令执行构建:

javascript 复制代码
npm run build

通过这些集成,npm成为了现代JavaScript开发工作流程中不可或缺的一部分,极大地简化了依赖管理和项目构建的过程。

2.5 安全漏洞检查

npm audit

随着越来越多的软件包发布,并且易于安装,因此 npm 软件包容易受到恶意作者的恶意攻击。

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

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

3、npm的使用方法

  1. 安装npm:npm通常随Node.js一起安装。用户可以从Node.js官网下载并安装Node.js,其中包含npm。
  2. Node.js官网:Node.js --- 在任何地方运行 JavaScript,下载长期支持版本(LTS)

  1. 基本命令:
    • 初始化项目:在项目目录中运行 npm init,生成package.json文件,描述项目及其依赖。
    • 安装包:使用 npm install <package-name> 或 npm i <package-name> 安装单个包;使用 npm install <package-name> --save-dev 安装开发依赖。
    • 卸载包:通过 npm uninstall <package-name> 卸载包。
    • 更新包:使用 npm update <package-name> 更新已安装的包。
    • 查看已安装包:运行 npm list 查看当前项目中所有已安装的包。
javascript 复制代码
//创建Vue项目
npm init vue@latest
//安装npm依赖,可使用镜像网站
npm config set registry=https://registry.npmmirror.com
//安装单个包方法一:
npm install <package-name>
//安装单个包方法二:
npm i <package-name>
//进入目标项目文件夹
cd project
//安装开发依赖,例如axios
npm i axios --save
//卸载包
npm uninstall <package-name>
//更新包
npm update <package-name>
//查看已安装包
npm list

4、npm的配置项

package.json

作为npm的核心配置文件,包含项目名称、版本、依赖关系、脚本等信息。重要字段包括:

4.1 name:项目名称

**用途:**标识项目的唯一名称,在 npm 注册表中必须唯一。如果你要将应用发布到 npm,这个名称将作为包的名称。

**要求:**必须以小写字母开头,且只能包含小写字母、数字、破折号(-)、下划线(_)和点(.)。不应与现有的 npm 包名冲突,否则在发布时会出错。

bash 复制代码
"name": "my-awesome-project"

4.2 version:项目版本

**用途:**定义项目的当前版本,通常遵循语义化版本控制(Semantic Versioning),即 MAJOR.MINOR.PATCH 格式。

MAJOR:当你做了不兼容的 API 修改;

MINOR:当你进行了向后兼容的功能新增;

PATCH:当你进行了向后兼容的问题修正。

**要求:**版本号必须遵循严格的格式。

bash 复制代码
"version": "1.0.0"

4.3 scripts:自定义脚本命令

用途: 定义一组自定义可以通过 npm 执行的命令。在项目中,你可以使用 npm run <script-name> 来运行一个定义的脚本。

**主要用途:**自动化任务,如启动服务器、测试、构建等。

bash 复制代码
"scripts": {
  "start": "node index.js",       // 启动项目
  "test": "jest",                 // 运行测试
  "build": "webpack --config webpack.config.js" // 构建项目
}

4.4 dependencies:运行时需要的依赖包

**用途:**列出的依赖是你的项目在生产环境中必需的模块。这些包在应用运行时需要被引用。

管理: 当你通过 npm install <package-name> 安装模块而没有 --save-dev 标记时,它们将被添加到此项下。

bash 复制代码
"dependencies": {
  "express": "^4.17.1",  // Express 是一个 web 应用框架
  "mongoose": "^5.10.9"   // Mongoose 是 MongoDB 的对象建模工具
}

4.5 devDependencies:开发过程中需要的依赖包

**用途:**列出的依赖是开发和测试过程中必需的模块,但在生产环境中不需要。这通常包括测试框架、构建工具和开发中的协助工具。

管理: 通过 npm install <package-name> --save-dev 安装的模块会添加到此项下。

bash 复制代码
"devDependencies": {
  "jest": "^26.6.0",            // Jest 是一个 JavaScript 测试框架
  "webpack": "^5.0.0",          // Webpack 是一个静态模块打包器
  "eslint": "^7.11.0"           // ESLint 是一个代码质量检查工具
}

4.6 npm scripts

package.json 还支持一个 scripts 属性,可以把它当作在项目本地运行的命令行工具。例如,一个 npm 项目的 scripts部分可能看起来像这样:

bash 复制代码
{
  "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"
  }
}

eslintprettiernccjest 不是安装为全局可执行文件,而是安装在项目本地的 node_modules/.bin/ 中。

最新引入的 npx 使我们可以像在全局安装程序一样运行这些 node_modules 项目作用域命令,方法是在其前面加上 npx ...(即npx prettier --write ** / *。ts)。

npmrc

用于配置npm的行为,如注册表地址、认证信息等,可在项目根目录或用户目录下创建。

5、镜像网站

由于中国大陆访问npm官方网站可能较慢,以下镜像网站可供使用:

  1. cnpm:阿里云提供的npm镜像,通过安装cnpm使用更快速的国内源。

  2. 淘宝镜像:注册表地址为https://registry.npm.taobao.org,可设置为npm的默认源。

  3. 其他镜像:如jsDelivr、Verdaccio等,适用于企业级应用。

  4. 国内镜像:// 执行以下命令查看是否为国内镜像

    npm config get registry

    出现如下所示,表明已经为国内镜像无需再修改

    如果不是则换成国内镜像,执行以下命令

    npm config set registry=https://registry.npmmirror.com

    //执行以下命令查看是否配置成功(可选)

    npm config get registry

6、总结

npm作为一个嵌入式的包管理程序,具备广泛的功能和庞大的社区支持,使得JavaScript开发者能够高效地管理代码库和依赖关系。其简单灵活的使用方法、丰富的配置项以及镜像网站解决了网络访问问题,进一步提高了开发者的使用体验。npm在推动JavaScript生态发展方面起到了不可替代的作用。

npm 是 JavaScript 和 Node.js 生态系统中的主要包管理工具,允许开发者轻松安装、更新和卸载依赖包,通过对每个包的版本进行精确控制,npm 确保了应用程序的稳定性和可靠性,避免了"依赖地狱"问题。npm提供了一个公共的注册库,开发者可以分享自己的代码,同时也能方便地获取其他人贡献的模块,从而促进开源合作。package.json 中的 scripts 字段使得开发者能够定义并运行各种自动化任务,如构建、测试、启动服务等,提升开发效率。通过大量的开源库和工具,npm 构建起一个充满活力的开发者社区,用户可以利用已有的解决方案加速开发进程。npm 已经成为许多现代前端框架(如 React, Angular, Vue)及工具(如 Webpack, Gulp)不可或缺的一部分,使得资源整合更加高效。

它改变了软件开发的方式,使得开发者能够更快地搭建原型和发布产品。丰厚的模块库显著减少了重复造轮子的需求。开放的生态系统和社区驱动的开发模式鼓励了开发者之间的协作与知识共享,有助于快速迭代和创新。通过明确列出项目依赖关系,以及使用语义化版本控制,npm 提升了项目的可维护性和可升级性。npm 的成功激励了 JavaScript 技术栈的全栈开发热潮,使得开发者能够使用同一种语言(JavaScript)处理前端和后端开发,从而提高了开发效率,它带来了代码管理和项目结构的标准化,改善了项目的组织形式,使得团队开发更加高效。

npm 的出现不仅简化了 JavaScript 开发,还促使了整个软件开发领域的转型,推动了开源生态系统的发展,提升了开发速度和质量,对编程发展的影响深远且持续。

相关推荐
乔宕一1 分钟前
在 vscode + cmake + GNU 工具链的基础上配置 JLINK
vscode·gnu·jlink
m0_748255021 分钟前
头歌答案--爬虫实战
java·前端·爬虫
noravinsc1 小时前
python md5加密
前端·javascript·python
ac-er88881 小时前
Yii框架优化Web应用程序性能
开发语言·前端·php
Le0v1n2 小时前
VSCode注释高亮(# NOTE;# TODO;# FIXME;#XXX;# HACK;# BUG)
ide·vscode·python
cafehaus2 小时前
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
前端·vue.js·vscode
HoneyMoose2 小时前
可以自己部署的微博 Mastodon
前端
国产化创客2 小时前
物联网网关Web服务器--CGI开发实例BMI计算
服务器·前端·物联网·web网关
微光无限3 小时前
Vue3 中使用组合式API和依赖注入实现自定义公共方法
前端·javascript·vue.js
GISer_Jing3 小时前
React+AntDesign实现类似Chatgpt交互界面
前端·javascript·react.js·前端框架