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…...
【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task1:智能编程助手(持续更新)
在一个数据驱动的世界里,人工智能的未来应由每一个愿意学习和探索的人共同塑造和掌握。希望这里是你实现AI梦想的起点。 大模型小白入门:https://linklearner.com/activity/14/11/25 大模型开发工程师能力测试:https://linklearner.com/activ…...
如何判断监控设备是否支持语音对讲
目录 一、大华摄像机 二、海康摄像机 三、宇视摄像机 一、大华摄像机 注意:大华摄像机支持跨网语音对讲,即设备和服务器可以不在同一网络内,大华设备的语音通道填写:34020000001370000001 配置接入示例: 音频输入…...
Grafana+Influxdb(Prometheus)+Apache Jmeter搭建可视化性能测试监控平台
此性能测试监控平台,架构可以是: GrafanaInfluxdbJmeterGrafanaPrometheusJmeter Influxdb和Prometheus在这里都是时序性数据库 在测试环境中,压测数据对存储和持久化的要求不高,所以这里的组件可以都通过docker-compose.yml文件…...
【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)
一.创建新工程 找到"driverlib\empty"空白工程,CTRLC然后CTRLV复制副本 重命名为G3507_RTT 打开KEIL工程 双击empty.syscfg,然后打开SYSCONFIG 我的不知道为啥没有48pin选项,如果你也一样,可以跟着我做,如果…...
计算机毕业设计 美发管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证
1.环境信息 开发工具:idea 接口测试工具:soapui 编程语言:java 项目环境:jdk1.8 webservice:jdk自带的jws 处理xml:jdk自带的jaxb 2.涉及代码 package org.example.webdemo;import javax.jws.WebMethod; i…...
GB/T35561-2017d,GB/T38565-2020,ocr解析文本
因系统需要只找到pdf版本,解析一版记录 GB/T35561-2017d 10000 , 自然灾害 10100 , 水旱灾害 10101 , 洪水 10102 , 内涝 10103 , 水库重大险情 10104 , 堤防重大险情 10105 , 凌汛 10106 , 山洪 10107 , 农业干旱 10108 , 城镇缺水 10109 , 生态干旱 10110 , 农村…...
IDEA使用LiveTemplate快速生成方法注释
本文目标:开发人员,在了解利用Live Template动态获取方法输入输出参数、创建日期时间方法的条件下,进行自动生成方法注释,达到自动添加方法注释的程度; 文章目录 1 场景2 要点2.1 新增LiveTemplate模版2.2 模版内容填写…...
慢SQL优化
1、避免使用select * select * 不会走覆盖索引,会出现大量的回表操作,从而导致查询sql的性能很低。 --反例 select * from user where id 1;--正例 select name,age from user where id 1;2、union all 代替 union union:去重后的数据…...
MES生产执行系统源码,支持 SaaS 多租户,技术架构:springboot + vue-element-plus-admin
MES的定义与功能 MES是制造业中一种重要的管理信息系统,用于协调和监控整个生产过程。它通过收集、分析和处理各种生产数据,实现对生产流程的实时跟踪和监控,并为决策者提供准确的数据支持。MES涵盖了工厂运营、计划排程、质量管理、设备维护…...
公司网站设计很好的/内部优化
浑浑噩噩已经走了这么长时间了,那么,留下点什么吧。 一种积累,一种出口。 转载于:https://www.cnblogs.com/Peong/p/10438157.html...
wordpress 卸载插件/广东清远今天疫情实时动态防控
目录 冯诺依曼体系 程序(program) 指令(instruction) 数据(data) CPU的基本工作原理 逻辑门:二级的电子开关 非门 与门 或门 异或门 算术逻辑单元 ALU(Arithmetic & Logic Unit) 算术单元(Arithmetic Unit) 逻辑单元(Logic Unit) ALU符号 控制单元 CU(Con…...
WordPress多域名登录/搜索引擎优化排名技巧
Monica◆ ◆ ◆ 神经质外加控制欲的莫妮卡 莫妮卡是《六人行》的中心人物,其他五人可以说就是由她延伸出来的。 [个性]像是妈妈般的照顾大家,爱管闲事,让她成为大家的支柱。在市区最炫餐厅担任厨师,不论工作和生活上,凡…...
ccg 搭建wordpress/登录注册入口
1.获取镜像 将配置好环境的树莓派sd卡放入读卡器将读卡器插入电脑在Windows操作系统上使用软件win32diskimager获取镜像将镜像保存到Linux操作系统上某个位置,例如ubuntu22.04 2.减小镜像体积 安装pishrink.sh wget https://raw.githubusercontent.com/Drewsif/…...
湘潭商城网站建设定制/国际要闻
一、单选题 1.有如下程序段,其执行后的输出结果为( )。 main() {int i8; while(i>1) {–i; printf(“%d”,i–);} } A. 753 B. 7531 C. 8642 D. 864 2.在下列的数组定义中,哪一个有语法错误(…...
小学生摘抄新闻2024版四年级/贵港seo
多线程下模拟多窗口售票 还是挺有趣的,哈哈~~~ public class Test {public static void main(String[] args) {Ticket ticket new Ticket();//模拟三个售票窗口new Thread(ticket, "A").start();new Thread(ticket, "B").start();new Thread…...