当前位置: 首页 > news >正文

NPM 使用教程:从入门到精通

NPM 使用教程:从入门到精通

1. 引言

什么是 NPM?

NPM (Node Package Manager) 是 JavaScript 的包管理工具,也是世界上最大的开源库生态系统。它帮助开发者轻松地管理项目的依赖、安装和分享包。NPM 与 Node.js 紧密结合,并在开发者社区中广泛使用。

NPM 的历史

NPM 于 2010 年发布,随着 Node.js 的流行而快速发展。如今,NPM 已成为 JavaScript 开发中不可或缺的工具,支持前端和后端的各种开发需求。

为什么使用 NPM?

NPM 的优势包括:

  • 丰富的包生态:NPM 仓库拥有超过 100 万个开源包,几乎涵盖了开发所需的所有功能。
  • 版本管理:NPM 提供了强大的版本控制功能,使得项目的依赖管理变得简单而高效。
  • 自动化脚本:通过 NPM 的脚本功能,开发者可以轻松自动化构建、测试等任务。

2. 安装 NPM

安装 Node.js

NPM 是 Node.js 的内置包管理工具,因此你需要先安装 Node.js。

  1. 前往 Node.js 官方网站 下载最新的 LTS(长期支持版)版本。

  2. 安装完成后,通过命令行工具检查 Node.js 和 NPM 是否安装成功:

    node -v
    npm -v
    

    输出类似以下内容,说明安装成功:

    v16.13.0
    8.1.0
    

更新 NPM

NPM 通常会随着 Node.js 的更新而更新,但你也可以手动更新 NPM:

npm install -g npm

3. NPM 基本命令

初始化项目:npm init

NPM 使用 package.json 文件来管理项目的元数据和依赖。你可以通过 npm init 命令生成这个文件。

npm init

这个命令会逐步引导你设置项目的基本信息,如名称、版本、描述等。如果你想快速创建一个默认的 package.json 文件,可以使用 -y 参数:

npm init -y

生成的 package.json 文件如下:

{"name": "my-project","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC"
}

安装依赖:npm install

NPM 允许你轻松安装第三方库。假设你需要安装 Express 框架,可以使用以下命令:

npm install express

这将会在项目中创建一个 node_modules 目录,并在 package.json 文件中添加一个 dependencies 字段:

"dependencies": {"express": "^4.17.1"
}

你还可以通过 --save-dev 参数安装开发依赖包(这些包仅用于开发环境):

npm install jest --save-dev

卸载依赖:npm uninstall

如果你不再需要某个包,可以使用 npm uninstall 命令将其删除:

npm uninstall express

更新依赖:npm update

要更新项目中的依赖包,可以使用 npm update 命令:

npm update

列出已安装的包:npm list

通过 npm list 命令可以查看项目中已安装的所有依赖包:

npm list

要查看顶级依赖,可以使用 --depth=0 参数:

npm list --depth=0

检查过期包:npm outdated

NPM 提供 npm outdated 命令来检查项目中哪些依赖包已经有了新版本:

npm outdated

输出示例如下:

Package   Current  Wanted  Latest  Location
express   4.17.1   4.17.1  5.0.0   node_modules/express

4. package.json 文件详解

文件结构

package.json 是 NPM 项目的核心文件,记录了项目的元数据和依赖信息。以下是 package.json 的典型结构:

{"name": "my-project","version": "1.0.0","description": "A sample project to demonstrate npm usage","main": "index.js","scripts": {"start": "node index.js","test": "jest"},"dependencies": {"express": "^4.17.1"},"devDependencies": {"jest": "^27.0.6"},"author": "Your Name","license": "ISC"
}

自定义脚本

NPM 允许你在 scripts 字段中定义自定义脚本。这些脚本可以通过 npm run <script-name> 命令执行。

"scripts": {"start": "node index.js","test": "jest"
}

执行以下命令将启动你的应用程序:

npm run start

5. NPM 配置

全局与本地安装

当你安装一个包时,可以选择将其安装在全局环境或本地项目中。

  • 本地安装:默认情况下,NPM 会将包安装在本地项目的 node_modules 目录中。
    npm install lodash
    
  • 全局安装:使用 -g 参数可以将包安装在全局环境中,通常用于命令行工具。
    npm install -g typescript
    

配置文件:.npmrc

你可以在 .npmrc 文件中配置 NPM 的行为,如设置代理、缓存目录、镜像源等。

设置 NPM 的镜像源为淘宝镜像,可以通过以下方式配置:

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

6. 使用 NPM 管理版本

版本管理

NPM 支持语义化版本控制 (SemVer),可以通过在 package.json 中指定版本号来控制依赖包的版本。

  • 指定版本:安装特定版本的包。
    npm install express@4.16.0
    
  • 版本范围:使用 SemVer 规则来指定版本范围,例如 ^~
    • ^4.17.1 表示兼容 4.x.x,但不包括 5.0.0
    • ~4.17.1 表示兼容 4.17.x,但不包括 4.18.0

锁定依赖版本

NPM 使用 package-lock.json 文件锁定安装的包版本,以确保在不同环境中安装相同的版本。

7. 创建和发布 NPM 包

创建包

假设你想要创建一个简单的 NPM 包,可以按照以下步骤进行:

  1. 创建一个新的目录,并进入该目录:

    mkdir my-npm-package
    cd my-npm-package
    
  2. 初始化项目并编写代码:

    npm init -y
    
  3. 创建一个 index.js 文件,并添加一些代码:

    function helloNPM() {console.log('Hello from my first NPM package!');
    }module.exports = helloNPM;
    

发布包

要发布你的 NPM 包,首先需要在 NPM 注册一个账户,然后执行以下命令:

  1. 登录到 NPM:

    npm login
    
  2. 发布包:

    npm publish
    

发布成功后,其他开发者可以通过 npm install your-package-name 安装你的包。

管理包

你可以随时更新或删除已发布的包。

  • 更新包:增加版本号,然后重新执行 npm publish
  • 删除包
    npm unpublish your-package-name --force
    

8. NPM 与 Yarn 比较

Yarn 简介

Yarn 是由 Facebook 开发的另一个包管理工具,旨在解决 NPM 的一些性能问题。Yarn 与 NPM 很相似,但在性能和一些特性上有所不同。

性能比较

Yarn 的主要优势在于安装速度快、离线缓存和更好的依赖管理。它可以在第一次安装后缓存所有包,从而加快后续安装速度。

迁移到 Yarn

如果你想

从 NPM 迁移到 Yarn,可以先安装 Yarn:

npm install -g yarn

然后使用以下命令安装依赖:

yarn install

9. 常见问题与故障排除

安装失败问题

在安装包时,如果遇到安装失败或依赖冲突问题,可以尝试以下几种解决方案:

  • 清理缓存

    npm cache clean --force
    
  • 删除 node_modules 目录并重新安装

    rm -rf node_modules
    npm install
    

代理配置

如果你在使用 NPM 时遇到网络问题,可以通过配置代理来解决:

npm config set proxy http://proxy.company.com:8080

10. 结论

通过本篇教程,你已经了解了 NPM 的基础和进阶用法。从安装 NPM、管理依赖、到创建和发布 NPM 包,NPM 为开发者提供了丰富的功能,使得 JavaScript 项目的管理变得简单而高效。

随着 JavaScript 生态系统的不断发展,NPM 也在不断更新和改进。学习和掌握 NPM 是每个 JavaScript 开发者的必修课,希望本文能为你的开发之旅提供帮助。

附录

参考链接

  • NPM 官方文档
  • Node.js 官网
  • Yarn 官方网站

示例代码

完整的代码示例可以在 GitHub 仓库 中找到。


这篇博客文章详细介绍了 NPM 的各个方面,并提供了丰富的代码示例,帮助读者全面掌握 NPM 的使用。希望这篇文章对你有所帮助!

相关文章:

NPM 使用教程:从入门到精通

NPM 使用教程&#xff1a;从入门到精通 1. 引言 什么是 NPM&#xff1f; NPM (Node Package Manager) 是 JavaScript 的包管理工具&#xff0c;也是世界上最大的开源库生态系统。它帮助开发者轻松地管理项目的依赖、安装和分享包。NPM 与 Node.js 紧密结合&#xff0c;并在开…...

基于ssm+vue+uniapp的停车场小程序的设计与实现

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

C语言典型例题37

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题3.5 按照按照考试成绩的等级输出百分制分数段&#xff0c;A等为85分以上&#xff0c;B等为70~84分&#xff0c;C等为 60~69分&#xff0c;D等在60分以下&#xff0c;成绩的等级从键盘输入 代码&#xff1a; //…...

二自由度机械臂软件系统(三)ros2_control硬件底层插件

ros2_control实现了两个功能&#xff0c;一个是控制算法插件即控制的实现&#xff0c;另一个是底层插件即跟硬件通信的功能。 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/682574842 1、创建功能包 ros2 pkg create --build-type ament_cmake robot_control_test在sr…...

24.8.9.11数据结构|链栈和队列

链栈 1、理解 实际上是一个仅在表头进行操作的单链表,头指针指向栈顶结点或头结点,以下恋栈均指带头结点的链栈. 2、 基本操作 1、定义结构&#xff1a;节点含有数据域和指针域 2、初始化操作&#xff1a;建立一个带头结点的空栈 3、取栈顶元素操作&#xff1a;取出栈的栈顶元…...

StarSpider:一款高效的网络爬虫框架解析与实战

文章目录 引言官网链接StarSpider 原理简介基础使用1. 添加依赖2. 编写PageProcessor3. 启动爬虫 高级使用1. 分布式抓取2. 自定义下载器3. 深度定制 优点结语 引言 在大数据时代&#xff0c;数据成为了推动业务增长和创新的关键。网络爬虫作为数据获取的重要手段之一&#xf…...

LVS详细解析及其NAT模式与DR模式部署(理论+实验全方位指导)

目录 1. 集群 2. 分布式系统 3. 集群与分布式的比较 4.通俗的解释 集群 分布式系统 总结 LVS&#xff08;Linux Virtual Server&#xff09;简介 LVS专业术语 工作原理 LVS调度算法 静态调度算法 动态调度算法 ipvsadm脑图 NAT模式集群 LVS的配置 在LVS主机内打开…...

负载均衡相关概念介绍(一)

负载均衡&#xff08;Load Balance&#xff09;是集群技术的一种重要应用&#xff0c;旨在将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行&#xff0c;从而提高系统的并发处理能力、增加吞吐量、加强网络处理能力&#xff0c;并提供故障转移以…...

二叉树详解(1)

文章目录 目录1. 树的概念及结构1.1 树的相关概念1.2 树的表示1.3 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2. 二叉树的概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的存储结构 3. 二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2 堆的概念及结构…...

Spring定时任务注解

Service EnableScheduling public class xxxServiceImpl implement xxxService{Scheduled(cron "0 15 11 * * ?") // 每天的11:15执行public void reportCurrentTime() {aaa();}Scheduled(cron "0 15 17 * * ?") // 每天的17:15执行public void report…...

数据结构-绪论

学习目标&#xff1a; 认识数据结构的基本内容 学习内容&#xff1a; 了解&#xff1a;数据结构的研究内容掌握&#xff1a;数据结构的基本概念和术语了解&#xff1a;数据元素间的结构关系掌握&#xff1a;算法及算法的描述 数据结构的发展&#xff1a; 数据结构的发展简史 …...

Web开发:web服务器-Nginx的基础介绍(含AI文稿)

目录 一、Nginx的功能&#xff1a; 二、正向代理和反向代理的区别 三、Nginx负载均衡的主要功能 四、nginx安装目录下的各个文件&#xff08;夹&#xff09;的作用&#xff1a; 五、常用命令 一、Nginx的功能&#xff1a; 1.反向代理&#xff1a;例如我有三台服务器&#x…...

共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…...

Linux 服务器上简单配置 minio

Linux 服务器上简单配置 minio 初始化结构目录 mkdir -p /data/minio/bin mkdir -p /data/minio/conf mkdir -p /data/minio/data 下载 minio cd /data/minio/bin curl -O https://dl.min.io/server/minio/release/linux-amd64/minio 添加执行权限 chmod x minio 创建配置文件…...

TypeScript 面试题汇总

引言 TypeScript 是一种由微软开发的开源、跨平台的编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;为 JavaScript 添加了静态类型系统和其他高级功能。随着 TypeScript 在前端开发领域的广泛应用&#xff0c;掌握 TypeScript 已经成为很多开发者必备的技能之一。本文…...

杰卡德系数

杰卡德系数&#xff08;Jaccard Index 或 Jaccard Similarity Coefficient&#xff09; 杰卡德系数是一种用于衡量两个集合相似度的重要指标。 从数学定义上来看&#xff0c;如前面所述&#xff0c;杰卡德系数计算公式为&#xff1a; J ( A , B ) ∣ A ∩ B ∣ ∣ A ∪ B ∣…...

微服务实现-sleuth+zipkin分布式链路追踪和nacos配置中心

1. sleuthzipkin分布式链路追踪 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多微服务。这些模块负责不同的功能&#xff0c;组合成系统&#xff0c;最终可以提供丰富的功能。 这种架构中&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软…...

数学中常用的解题方法

文章目录 待定系数法应用示例1. 多项式除法2. 分式化简3. 数列通项公式 总结 递归数列特征方程特征根的求解通项公式的求解示例 错位相减&#xff0c;差分错位相减法差分的应用结合理解 韦达定理二项式定理二项式定理的通项公式二项式系数的性质应用示例 一元二次求解1. 因式分…...

pytorch 1 张量

张量 文章目录 张量torch.Tensor 的 主要属性torch.Tensor 的 其他常用属性和方法叶子张量&#xff08;Leaf Tensors&#xff09;定义叶子张量的约定深入理解示例代码总结 中间计算结果与 detach() 方法定义中间计算结果不是叶子节点使用 detach() 方法使中间结果成为叶子张量示…...

音视频开发继续学习

RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说&#xff1a;要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频&#xff0c;此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...