当前位置: 首页 > 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…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...