Node.js包管理工具npm
目录
什么是 npm
npm 主要功能
安装配置 npm 环境
package.json 版本范围规则
使用 npm
npm 版本和帮助命令
npm 包相关命令
安装包
卸载包
升级第三方包
升级自己开发的包
查看已安装的包
清除缓存和修复
package.json 相关
运行命令脚本
全局配置
npm 包发布相关
代理(Proxy)相关
npm 仓库镜像源
配置 cnpm
什么是 npm
npm(Node Package Manager)是 Node.js 的官方包管理工具。它用于管理 JavaScript 包和模块,尤其是针对 Node.js 环境下的应用程序。npm 使开发者能够轻松地安装、共享和更新 JavaScript 代码包或库。
npm 主要功能
- 安装依赖包:npm 让你能够方便地第三方安装库(比如express),把lodash它们react作为项目的依赖项。
- 管理依赖:它帮助您管理项目中所有的依赖项,并确保版本的一致性,避免出现不同开发环境中版本不兼容的情况。
- 分享和发布包:你可以将自己编写的代码压缩成npm包,把它们发布到npm官方仓库,供其他开发者使用。
npm 官方仓库地址:https://www.npmjs.com
安装配置 npm 环境
请查看:https://blog.csdn.net/a1053765496/article/details/145473576
package.json 版本范围规则
| 版本写法 | 允许升级的范围 | 示例 |
|---|---|---|
| ^x.y.z | 大版本不变,次版本和补丁可升级 | ^4.17.21 → 可升级到 4.x.x,但不会升到 5.0.0 |
| ~x.y.z | 次版本不变,仅补丁可升级 | ~4.16.0 → 可升级到 4.16.x,但不会变成 4.17.0 |
| x.y.z | 完全锁定,不会升级 | 0.21.1 只能安装 0.21.1 |
| latest | 始终安装最新版本 | 始终获取 npm 仓库的最新版本 |
语义化版本说明 (Semantic Versioning,SemVer)
<major>.<minor>.<patch>
- Major version(主版本):表示有 破坏性变更,不向后兼容。例如,从 2.x.x 升级到 3.0.0。
- Minor version(次版本):表示添加了 新特性,但向后兼容。例如,从 2.1.x 升级到 2.2.0。
- Patch version(补丁版本):表示 修复 bug,且向后兼容。例如,从 2.1.0 升级到 2.1.1。
使用 npm
npm 版本和帮助命令
# 查看npm版本
nvm -v# 同 nvm -v 查看npm版本
npm --version# 查看 npm 帮助信息
npm -h# 同 npm -h 查看 npm 帮助信息
npm --help # 查看某个命令的使用方法,例如 npm help install
npm help <command>
npm 包相关命令
安装包
# 安装 package.json 中的包
npm install# 安装某个包(默认安装最新版本)
npm install <package># 安装指定版本的包,例如 npm install express@4.17.1
npm install <package>@<version># 旧版 npm(5.x 之前)需要 --save 来保存依赖(现已默认保存)
npm install <package> --save# 安装包并保存到 devDependencies(仅用于开发环境)
npm install <package> --save-dev# 全局安装
npm install <package> -g# 去重依赖,合并相同的依赖包,减少 node_modules 体积
npm dedupe# 清理(Clean)并安装(Install)依赖,更快、更严格,适用于 CI/CD 环境。
# ci 详细介绍如下:
# npm ci 不会修改 package-lock.json,它会强制安装 package-lock.json 里指定的版本,确保依赖完全一致。
# 如果 package-lock.json 和 package.json 不匹配,它会报错。
# npm ci 不会检查已安装的 node_modules,而是直接删除它并重新安装所有依赖。
# 适用于 CI/CD 和自动化部署,确保环境干净,避免 npm install 可能带来的依赖冲突。
npm ci
卸载包
# 卸载某个已安装的包
npm uninstall <package># 全局卸载
npm uninstall <package> -g# 同 uninstall,移除某个包
npm remove <package>
升级第三方包
# 更新本地安装的某个包
npm update <package># 更新全局安装的某个包
npm update -g <package># 更新 package.json 里所有可以安全更新的包
npm update# 检查哪些包需要更新
npm outdated
npm update 命令会把包升级成功,但是 package.json 文件中的版本号不会自动修改,可以使用 npm list <package> 来查看指定包的版本号,会发现更新后的包和 package.json 中的版本号不一致。
# 推荐使用,更新所有
可以使用 npx npm-check-updates -u,来检查 package.json 文件中所有依赖的版本号,使它们自动更新到最新的符合 package.json 规则的版本(这时只修改了文件中的版本号,还没有进行安装)。然后使用 npm install 进行最新版本的安装。
npx npm-check-updates -unpm install
# 推荐使用,更新一个
也可以使用 npm install <package>@<version> 命令,直接把某一个包强制更新到指定的版本,此命令不用遵守 package.json 版本范围规则。
# npm install <package>@<version>
npm install express@4.21.2
升级自己开发的包
npm version 是用于管理和更新项目版本的 npm 命令,常用于在 package.json 中更新项目的版本号,并且可以自动生成 Git 提交和标签。它通常与版本控制和发布流程结合使用,确保项目的版本号始终符合语义化版本(Semantic Versioning,SemVer)规范。
# 更新 package.json 当前项目的version,例如 npm version 1.2.3
npm version <newversion> # 小更新(1.0.0 → 1.0.1)
npm version patch# 次要更新(1.0.0 → 1.1.0)
npm version minor# 大更新(1.0.0 → 2.0.0)
npm version major
查看已安装的包
# 查询当前项目安装的所有包
npm list# 查询当前项目某一个包
npm list <package># 查询全局安装的包
npm list -g# 仅查询顶层安装的包(不显示依赖的依赖)
npm list --depth=0
清除缓存和修复
# 清除 npm 缓存(强制刷新)
npm cache clean --force# 验证 npm 缓存完整性
npm cache verify# 检查项目的安全性漏洞
npm audit# 自动修复安全性问题
npm audit fix# 重新编译 node_modules ,修复损坏的依赖
npm rebuild# 检查 npm 是否正常,诊断问题
npm doctor# 删除 node_modules 目录
rd /s /q node_modules# 移除未列在 package.json 中的依赖
npm prune
package.json 相关
# 初始化一个 package.json 文件(交互模式,填写项目名称、版本、作者等信息)
npm init# 初始化一个 package.json 文件(交互信息使用默认值)
npm init -y# 设置 package.json 中的某个值
npm pkg set <key>=<value># 删除 package.json 中的某个键
npm pkg delete <key># 获取 package.json 里的某个值
npm pkg get <key>
列举常用的一些key,如下:
# name 设置或更新项目的名称
npm pkg set name=my-project# version 设置或更新项目的版本号
npm pkg set version=1.0.0# author 设置或更新项目的作者信息
npm pkg set author="Zhang San"# engines 设置或更新项目所需的 Node.js 版本。
npm pkg set engines.node=">=12.0.0"# description 设置或更新项目的描述
npm pkg set description="A cool project"# main 设置项目的入口文件(通常是 index.js)
npm pkg set main=src/index.js# keywords 设置或更新项目的关键字,这些关键字有助于别人通过 npm 搜索到你的包
npm pkg set keywords=["node", "npm", "package"]# scripts 设置或更新 scripts 字段,用于定义 npm 命令(例如 npm run start)
npm pkg set scripts.start="node app.js"# dependencies 设置或更新项目的生产依赖
npm pkg set dependencies.lodash="^4.17.21"# devDependencies 设置或更新项目的开发依赖
npm pkg set devDependencies.webpack="^5.0.0"# license 设置或更新项目的许可证
npm pkg set license=MIT# repository 设置或更新项目的版本控制仓库信息(如 GitHub)
npm pkg set repository.type=git
npm pkg set repository.url=https://github.com/user/my-project.git# bugs 设置或更新项目的错误报告 URL
npm pkg set bugs.url=https://github.com/user/my-project/issues# homepage 设置或更新项目的主页 URL
npm pkg set homepage=https://my-project.com# private 设置或更新项目是否为私有包。如果为 true,npm 将禁止发布该包。
npm pkg set private=true# directories 设置或更新项目的目录结构信息,如 bin、lib、man 等
npm pkg set directories.lib=src/lib
运行命令脚本
scripts 示例
{"name": "node-app","version": "1.0.0","scripts": {"start": "node app.js", // 启动应用"dev": "nodemon app.js", // 启动应用并使用 nodemon 热重载"test": "mocha tests/**/*.test.js", // 运行 Mocha 测试"lint": "eslint .", // 运行 ESLint 代码检查"build": "webpack --config webpack.config.js", // 构建项目(如使用 Webpack)"clean": "rimraf dist", // 清理构建目录"deploy": "npm run build && npm run start", // 构建并启动生产环境"aaa": "自定义命令a","bbb": "自定义命令b"}
}
可以使用 npm run <script> 命令执行 scripts 里面的任何变量,例如:scripts 里面的 start、dev、test、aaa、bbb等。
# 执行 package.json 文件中的 scripts.start 脚本。run可以省略 npm start
npm run start# 执行 package.json 文件中的 scripts.dev脚本。run可以省略 npm dev
npm run dev# 执行 package.json 文件中的 scripts.aaa脚本。run可以省略 npm aaa
npm run aaa
全局配置
# 查看当前 npm 配置
npm config list# 查看某个配置项,如 npm config get registry
npm config get <key># 设置 npm 配置项,如 npm config set registry https://registry.npmjs.org/
npm config set <key> <value># 删除某个 npm 配置项
npm config delete <key># 直接编辑 npm 配置文件
npm config edit# 修复 npm 配置中的错误
npm config fix
列举常用的一些key,如下:
# 全局包的安装目录
prefix # npm 缓存目录,默认 ~/.npm
cache # 是否安装全局包,默认 false
global # npm 源地址,默认 https://registry.npmjs.org/
registry # 是否安装精确版本(不使用 ^ 或 ~),默认 false
save-exact# 是否强制匹配 package.json 中的 engines 版本,默认 false
engine-strict# 是否启用 package-lock.json,默认 true
package-lock# 是否严格安装 peerDependencies,默认 false
strict-peer-deps# HTTP 代理,默认无
proxy# HTTPS 代理,默认无
https-proxy# 是否启用 SSL 验证,默认 true
strict-ssl# 指定 CA 证书路径,默认无
cafile# 是否对每个请求都进行身份验证
always-auth# 认证类型,如 legacy 或 oauth
auth-type# Base64 编码的用户名和密码
_auth# 使用 npm login 获取的身份验证令牌
_authToken# 设置 npm 日志级别 (silent, error, warn, http, info, verbose, silly),默认 warn
loglevel# 是否启用 npm audit 进行安全检查,默认 true
audit# 是否在 npm install 后显示资金信息(开源项目接受资金捐助),默认 true
fund
npm 包发布相关
# 登录 npm 账户
npm login# 退出 npm 账户
npm logout# 查看当前 npm 账户
npm whoami# 发布 npm 包(需要登录 npm 账户)
npm publish# 撤销已发布的 npm 包(24 小时内有效)
npm unpublish <package>
代理(Proxy)相关
如果你在公司或某些网络环境下无法访问
npm,可以配置代理。
# 设置 HTTP 代理
npm config set proxy http://your.proxyIP.com:8080# 设置 HTTPS 代理
npm config set https-proxy http://your.proxyIP.com:443# 删除 HTTP 代理
npm config delete proxy# 删除 HTTPS 代理
npm config delete https-proxy
npm 仓库镜像源
# 还原到官方 npm 仓库
npm config set registry https://registry.npmjs.org/# 切换到淘宝镜像(国内用户推荐,相当于使用 cnpm)
npm config set registry https://registry.npmmirror.com/# 登录到私有 npm 仓库
npm login --registry <URL># 发布包到私有 npm 仓库
npm publish --registry <URL>
配置 cnpm
cnpm(China npm)是淘宝团队提供的一个 npm 镜像,它是官方 npm(https://registry.npmjs.org/)的一个国内镜像,专门为国内开发者提供更快的 npm 包下载服务。
由于 npm 官方服务器在国外,国内访问可能会遇到网络问题(比如下载慢、连接超时等),而 cnpm 通过镜像同步了 npm 官方仓库的大部分包,并提供了加速下载的能力。
安装 cnpm
npm install -g cnpm
使用方法同 npm 一样。
cnpm:淘宝镜像源
npm:官方镜像源
使用 cnpm 相当于 使用 npm 时镜像源是淘宝镜像。如果想使用官方镜像,使用 npm 就行了,两个同时存在不影响。
相关文章:
Node.js包管理工具npm
目录 什么是 npm npm 主要功能 安装配置 npm 环境 package.json 版本范围规则 使用 npm npm 版本和帮助命令 npm 包相关命令 安装包 卸载包 升级第三方包 升级自己开发的包 查看已安装的包 清除缓存和修复 package.json 相关 运行命令脚本 全局配置 npm 包发布…...
基本数据结构--平衡二叉搜索树之红黑树示例代码
红黑树的规则。红黑树的每个节点有颜色(红或黑),满足以下性质: 每个节点是红或黑。根节点是黑的。叶子节点(NIL节点)是黑的。红节点的子节点必须是黑的。从任一节点到其所有后代叶子节点的路径包含相同数量…...
GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读
一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览: 国家标准|GB/T 43698-2024 相关标准: &a…...
Python内置函数map(), list(), len(), iter(), hex(), hash()的详细解析,包括功能、语法、示例及注意事项
1. map(function, iterable, ...) 功能:对可迭代对象中的每个元素应用指定函数,返回一个迭代器。 参数: function:要执行的函数(可以是lambda表达式)。 iterable:一个或多个可迭代对象&#x…...
CF 278A.Circle Line
题目分析 输入n个数据作为路径,求从a到b的最短距离,需要将其相成一个圆圈,既可以从小往大走又可以从大往小走 思路分析 依然将数据存为数组,通过下标进行操作,既然说了有两种方式那就计算两种方式哪个更快就输出谁 代…...
DeepSeek模型构建与训练
在完成数据预处理之后,下一步就是构建和训练深度学习模型。DeepSeek提供了简洁而强大的API,使得模型构建和训练变得非常直观。无论是简单的全连接网络,还是复杂的卷积神经网络(CNN)或循环神经网络(RNN),DeepSeek都能轻松应对。本文将带你一步步构建一个深度学习模型,并…...
本地部署deepseek简单教程
部署deepseek,首先需要知道deepseek官网地址:DeepSeek 第一步:Ollama 去ollama下载对应的版本,我的电脑是window 在这里可以看到关于deepseek相关 第二步,下载完ollama无脑下一步就可以 这样属于安装成功 第三步&…...
3.1 可视化算子编程语言
HuggingFists的VO编程语言与常见的其它编程语言有一定的区别。其语言由两种不同的语法特征构成。一部分以可视化算子作为语法基础(简称:VO-O),辅助使用者可视化的完成数据处理/分析流程的编写;一部分采用表达式语法(简称:VO-E)&am…...
UnityShader学习笔记——多种光源
——内容源自唐老狮的shader课程 目录 1.光源类型 2.判断光源类型 2.1.在哪判断 2.2.如何判断 3.光照衰减 3.1.基本概念 3.2.unity中的光照衰减 3.3.光源空间变换矩阵 4.点光源衰减计算 5.聚光灯衰减计算 5.1.聚光灯的cookie(灯光遮罩) 5.2.聚…...
电脑右下角小喇叭没反应怎么回事,快速解决方案
当电脑右下角的小喇叭(音量图标)没有反应时,可以尝试以下快速解决方案: 一、基础检查与操作 检查键盘音量键: 按下键盘上的音量增加或减少键,或尝试Fn音量键(部分笔记本需组合键)&a…...
chrome-base 如何实现一个BindOnce
考虑一个问题: worker_thread.task_runner()->PostDelayedTask(FROM_HERE, base::BindOnce(&Ref::Foo, ref, 1), base::Milliseconds(1000)); BindOnce 是如何实现的呢? 翻看源码:base\functional\bind.h 写的 非常简洁 // Bind a…...
HTML学习之CSS三种引入方式
HTML学习之CSS三种引入方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…...
Mysql基于binlog主从同步配置
主配置: 修改配置文件:/etc/my.cnf 添加server-id1 重启MySQL服务:systemctl restart mysqld 创建用户并授权: mysql> create user rep192.168.79.% identified with mysql_native_password by 123456; Query OK, 0 rows aff…...
Docker Desktop安装到其他盘
Docker Desktop 默认安装到c盘,占用空间太大了,想给安装到其他盘,网上找了半天的都不对 正确安装命令: start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…...
NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理
网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…...
ubuntu 本地部署deepseek r1 蒸馏模型
本文中的文件路径或网络代理需要根据自身环境自行删改 一、交互式chat页面 1.1 open-webui 交互窗口部署:基于docker安装,且支持联网搜索 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线操作。它支持各种 LLM…...
go语言中的反射
为什么会引入反射 有时我们需要写一个函数,这个函数有能力统一处理各种值类型,而这些类型可能无法共享同一个接口,也可能布局未知,也有可能这个类型在我们设计函数时还不存在,这个时候我们就可以用到反射。 空接口可…...
旅行社项目展示微信小程序功能模块和开发流程
旅行社当前旅游线路的程序(微信小程序),旨在帮助旅行社更高效地管理线下活动预订,同时为客户提供便捷的报名和查看功能。适用于短途游、团队建设等活动,支持在线预订、缴费及订单管理,可根据用户需求定制更多个性化服务,为公司提升品牌知名度与客户体验。通过简洁明了的…...
JUC学习笔记02
文章目录 JUC笔记2练习题:手写线程池代码解释:AdvancedThreadPool 类:WorkerThread 内部类:AdvancedThreadPoolExample 类: 线程池的思考CPU密集型IO密集型 练习题:手写自动重试机练习题:手写定…...
【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
论文原文链接:DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明,本文不做任何商业用途,仅作为个人学习相关论文的翻译记录。本文对原文内容直译,一切以论文原文内容为准,对原文作者表示…...
python编程-类结构,lambda语法,原始字符串
一个类的基本结构包括以下部分: 类名:用来描述具有相同属性和方法的对象的集合。 属性:类变量或实例变量,用于处理类及其实例对象的相关数据。 方法:在类中定义的函数,用于执行特定操作。 构造器ÿ…...
C++:代码常见规范1
头文件包含 (1)先系统头文件,后用户头文件:这是一个良好的编程习惯。系统头文件通常包含标准库的定义,而用户头文件则包含项目特定的定义。将系统头文件放在前面可以避免因用户头文件中的定义与系统头文件冲突而导致的问题。 #include <…...
C++(进阶五)--STL--用一颗红黑树封装map和set
目录 1.红黑树源码(简略版) 2.模板参数的控制 3.红黑树的结点 4.迭代器的实现 正向迭代器 反向迭代器 5.set的模拟实现 6.map的模拟实现 7.封装完成后的代码 RBTree.h mymap.h myset.h 1.红黑树源码(简略版) 下面我们…...
DeepSeek服务器繁忙问题的原因分析与解决方案
一、引言 随着人工智能技术的飞速发展,DeepSeek 等语言模型在众多领域得到了广泛应用。然而,在春节这段时间的使用过程中,用户常常遭遇服务器繁忙的问题,这不仅影响了用户的使用体验,也在一定程度上限制了模型的推广和…...
《手札·开源篇》数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%?
数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%? 一、痛点:传统研发模式正在吃掉企业的利润 永磁电机行业面临两大挑战: 研发周期长:一款新电机从设计到量产需6-12个月,电磁计算…...
飞算JavaAI :AI + 时代下的行业趋势引领者与推动者
在科技飞速发展的当下,AI 时代正以前所未有的速度重塑着各个行业的格局,而软件开发领域更是这场变革的前沿阵地。在众多创新力量之中,飞算JavaAI 脱颖而出,宛如一颗璀璨的新星,凭借其独树一帜的特性与强大功能&#x…...
【重新认识C语言----结构体篇】
目录 -----------------------------------------begin------------------------------------- 引言 1. 结构体的基本概念 1.1 为什么需要结构体? 1.2 结构体的定义 2. 结构体变量的声明与初始化 2.1 声明结构体变量 2.2 初始化结构体变量 3. 结构体成员的访…...
解决错误:CondaHTTPError: HTTP 000 CONNECTION FAILED for url
解决错误:CondaHTTPError: HTTP 000 CONNECTION FAILED for url 查看channels:vim ~/.condarcshow_channel_urls: true channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/…...
使用令牌桶算法通过redis实现限流
令牌桶算法是一种常用的限流算法,它可以平滑地控制请求的处理速率。在 Java 中结合 Redis 实现令牌桶算法,可以利用 Redis 的原子操作来保证多节点环境下的限流效果。 一 实现思路 初始化令牌桶:在 Redis 中存储令牌桶的相关信息࿰…...
Docker的进程和Cgroup概念
Docker的进程和Cgroup概念 容器里的进程组织或关系0号进程:containerd-shim1号进程:容器内的第一个进程进程收到信号后的三种反应两个特权信号在容器内执行 kill 命令的行为 Cgroup 介绍CPU Cgroup 中与 CFS 相关的参数Kubernetes 中的资源管理memory cg…...
