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。
-
前往 Node.js 官方网站 下载最新的 LTS(长期支持版)版本。
-
安装完成后,通过命令行工具检查 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 包,可以按照以下步骤进行:
-
创建一个新的目录,并进入该目录:
mkdir my-npm-package cd my-npm-package -
初始化项目并编写代码:
npm init -y -
创建一个
index.js文件,并添加一些代码:function helloNPM() {console.log('Hello from my first NPM package!'); }module.exports = helloNPM;
发布包
要发布你的 NPM 包,首先需要在 NPM 注册一个账户,然后执行以下命令:
-
登录到 NPM:
npm login -
发布包:
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 使用教程:从入门到精通 1. 引言 什么是 NPM? NPM (Node Package Manager) 是 JavaScript 的包管理工具,也是世界上最大的开源库生态系统。它帮助开发者轻松地管理项目的依赖、安装和分享包。NPM 与 Node.js 紧密结合,并在开…...
基于ssm+vue+uniapp的停车场小程序的设计与实现
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...
C语言典型例题37
《C程序设计教程(第四版)——谭浩强》 例题3.5 按照按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为 60~69分,D等在60分以下,成绩的等级从键盘输入 代码: //…...
二自由度机械臂软件系统(三)ros2_control硬件底层插件
ros2_control实现了两个功能,一个是控制算法插件即控制的实现,另一个是底层插件即跟硬件通信的功能。 参考资料: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、定义结构:节点含有数据域和指针域 2、初始化操作:建立一个带头结点的空栈 3、取栈顶元素操作:取出栈的栈顶元…...
StarSpider:一款高效的网络爬虫框架解析与实战
文章目录 引言官网链接StarSpider 原理简介基础使用1. 添加依赖2. 编写PageProcessor3. 启动爬虫 高级使用1. 分布式抓取2. 自定义下载器3. 深度定制 优点结语 引言 在大数据时代,数据成为了推动业务增长和创新的关键。网络爬虫作为数据获取的重要手段之一…...
LVS详细解析及其NAT模式与DR模式部署(理论+实验全方位指导)
目录 1. 集群 2. 分布式系统 3. 集群与分布式的比较 4.通俗的解释 集群 分布式系统 总结 LVS(Linux Virtual Server)简介 LVS专业术语 工作原理 LVS调度算法 静态调度算法 动态调度算法 ipvsadm脑图 NAT模式集群 LVS的配置 在LVS主机内打开…...
负载均衡相关概念介绍(一)
负载均衡(Load Balance)是集群技术的一种重要应用,旨在将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,从而提高系统的并发处理能力、增加吞吐量、加强网络处理能力,并提供故障转移以…...
二叉树详解(1)
文章目录 目录1. 树的概念及结构1.1 树的相关概念1.2 树的表示1.3 树在实际中的运用(表示文件系统的目录树结构) 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…...
数据结构-绪论
学习目标: 认识数据结构的基本内容 学习内容: 了解:数据结构的研究内容掌握:数据结构的基本概念和术语了解:数据元素间的结构关系掌握:算法及算法的描述 数据结构的发展: 数据结构的发展简史 …...
Web开发:web服务器-Nginx的基础介绍(含AI文稿)
目录 一、Nginx的功能: 二、正向代理和反向代理的区别 三、Nginx负载均衡的主要功能 四、nginx安装目录下的各个文件(夹)的作用: 五、常用命令 一、Nginx的功能: 1.反向代理:例如我有三台服务器&#x…...
共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目
🍊作者:计算机毕设残哥 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目、 源…...
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 是一种由微软开发的开源、跨平台的编程语言,它是 JavaScript 的超集,为 JavaScript 添加了静态类型系统和其他高级功能。随着 TypeScript 在前端开发领域的广泛应用,掌握 TypeScript 已经成为很多开发者必备的技能之一。本文…...
杰卡德系数
杰卡德系数(Jaccard Index 或 Jaccard Similarity Coefficient) 杰卡德系数是一种用于衡量两个集合相似度的重要指标。 从数学定义上来看,如前面所述,杰卡德系数计算公式为: J ( A , B ) ∣ A ∩ B ∣ ∣ A ∪ B ∣…...
微服务实现-sleuth+zipkin分布式链路追踪和nacos配置中心
1. sleuthzipkin分布式链路追踪 在大型系统的微服务化构建中,一个系统被拆分成了许多微服务。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。 这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软…...
数学中常用的解题方法
文章目录 待定系数法应用示例1. 多项式除法2. 分式化简3. 数列通项公式 总结 递归数列特征方程特征根的求解通项公式的求解示例 错位相减,差分错位相减法差分的应用结合理解 韦达定理二项式定理二项式定理的通项公式二项式系数的性质应用示例 一元二次求解1. 因式分…...
pytorch 1 张量
张量 文章目录 张量torch.Tensor 的 主要属性torch.Tensor 的 其他常用属性和方法叶子张量(Leaf Tensors)定义叶子张量的约定深入理解示例代码总结 中间计算结果与 detach() 方法定义中间计算结果不是叶子节点使用 detach() 方法使中间结果成为叶子张量示…...
音视频开发继续学习
RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说:要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频,此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
