Node.JS---npm相关
文章目录
- 前言
- 一、package.json
- 配置项
- version:1.0.0
- devDependencies
- dependencies
- peerDependencies
- optionalDependencies
- 二、npm命令
- 1、npm config list
- xmzs使用
- 2、npm install
- package-lock.json作用
- 3、npm run
- 4、 查看全局安装的可执行文件
- npm生命周期
- npx
- npx简介
- npx查找命令的流程
- npx优点
- npx和npx的区别
- npx使用场景
- npm 包的发布
- 发布npm包的作用
- 发布npm包的流程
- npm 私服
- 构建npm私服
- 什么是npm私服
- 为什么要搭建npm私服
- 搭建npm私服
- 总结
前言
node.js 是一个基于Chrome V8引擎的JavaScript运行时环境,用于构建高性能、可扩展的网络应用程序。node的出现使JavaScript也能编写服务端应用程序。
一、package.json
在使用npm初始化项目的时候。npm会创建package.json,用来配置项目,它在后续打包、依赖安装起到关键作用。如果想要快速获取项目信息,就必须对package.json文件相关配置项有所了解。
配置项
version:1.0.0
第一位: 主版本号, 当你做了不兼容的API修改(重大改动)
第二位: 次版本号, 当你做了向下兼容的功能性新增(功能的新增)
第三位: 修订号, 当你做了向下兼容的问题修正(fix Bug 修复)
devDependencies
开发环境依赖,是指在开发阶段项目内为了开发使用的工具等,在项目上线用户不用接触的一些工具,在后面接 -D就会将该依赖放在devDependencies下,如: babel, webpack, eslint, jest, vite, rollup等
npm install --save-dev <package>
npm install -D <package>
dependencies
生产环境依赖,也就是线上需要依赖的,在后面接 -S就会将依赖放在dependencies下,如: react, vue, lodash, jquery等
npm install --save <package>
npm install -S <package>
peerDependencies
peerDependencies是指插件的运行依赖(开发插件、npm包), 也就是说, 如果你的插件依赖于另一个插件, 那么你的插件就应该将这个插件列入peerDependencies, 并且指定一个版本范围, 以确保它的存在, 否则会报错,一般来说,项目里面用不到这个,这个更适合插件开发和SDK开发使用。
npm install --save-peer <package>
npm install -P <package>
optionalDependencies
optionalDependencies是指插件的可选依赖, 也就是说, 如果你的插件依赖于另一个插件, 但是这个插件不是必须的, 那么你的插件就应该将这个插件列入optionalDependencies, 并且指定一个版本范围, 以确保它的存在, 否则会报错
npm install --save-optional <package>
npm install -O <package>
二、npm命令
npm的命令大全
以上使官网npm的命令
其中比较重要的命令有以下几个
1、npm config list
这各命令主要用于查看npm的一些信息
- cache 依赖缓存在本地的位置
- prefix 全局执行命令
- registry 安装依赖源地址
后面使npm的一些信息。
; "user" config from C:\Users\Administrator\.npmrc//localhost:4873/:_authToken = (protected)
//registry.npmjs.org/:_authToken = (protected)
cache = "E:\\nodejs\\node_cache"
prefix = "E:\\nodejs\\node_global"
registry = "https://registry.npmmirror.com/"; node bin location = E:\nodejs\node.exe
; node version = v20.5.0
; npm local prefix = C:\Users\Administrator
; npm version = 9.8.0
; cwd = C:\Users\Administrator
; HOME = C:\Users\Administrator
; Run `npm config ls -l` to show all defaults.
这里可以更换下载源,比如淘宝源、清华源等
npm config set registry 源地址
也可以使用插件来更换源,如:xmzs,这是一个用来管理Node版本和源等操作的命令行工具,支持中文,对国人很友好。具体使用如下:
xmzs使用
- 安装
npm install -g xmzs
- 查看版本
mmp -V
- 查看当前源
mmp current
- 切换源
mmp use
- 添加源
mmp add
2、npm install
项目的依赖都会放在node_modules下,采用扁平化(理想化)的方式安装,会将重复的依赖提升到顶层,其排序规则为:
.系列 ===> @系列 ===>字母顺序

在寻找依赖时,使用广度优先遍历,优先处理更目录下的依赖,然后逐层处理每个包的依赖,处理依赖的时候会检查其版本是否符合依赖树中其他依赖的版本要求,不满足将尝试下载合适版本。
其安装过程如图:

-
寻找项目级
.npmrc
在项目根目录下找.npmrc文件

-
寻找用户级
.npmrc
在本地用户目录下找.npmrc文件

-
全局的
.npmrc
在全局C盘AppData文件中找.npmrc文件 -
npm内置.npmrc
在安装的node中找.npmrc文件 -
检查项目是否存在
package-lock.json文件- 有:比较
package-lock.json和package.json版本是否一致
+ 一致:检查是否有缓存 有则解压到node_modules,并更新,没有则要下载资源。
+ 不一致:根据package.json下载,并更新package-lock.json - 没有:获取包信息,构建依赖树并进行扁平化随后检查缓存然后检查是否有缓存 有则解压到
node_modules,并更新,没有则要下载资源。
- 有:比较
package-lock.json作用
package-lock.json是npm5新增的文件, 用于锁定依赖包的版本号, 以便于其他开发者在npm install时生成相同的依赖关系树,其次它完成了缓存的相关,利用 integrity + version + 名称 生成唯一的key,在缓存文件node_cache中 index-v5 找索引是否存在相同的,如果找到就会将 content-v2 中对应的二进制文件解压放到node_modules,上文已经说明怎么查看缓存文件位置,如果没有,就是目前没有建立缓存。

3、npm run
要执行这个命令,就必须在scripts中配置相关执行命令

所有的可执行文件都放在 node_modules 下 .bin目录下
.sh文件 是给unix、Linux、Macos 使用.cmd文件 是windows cmd 使用.ps1文件 是windows power shell 使用
过程:
-
当前项目
node_modules/.bin

-
全局
node_modules
在prefix下

-
环境变量
命令识别:
- 如果命令是以npm开头的, 则执行npm内部命令
- 如果命令是以node开头的, 则执行node命令
- 如果命令是以./或…/开头的, 则执行对应的脚本文件
- 如果命令是以其他字符串开头的, 则先在node_modules/.bin目录下查找对应的命令,
4、 查看全局安装的可执行文件
npm ls -g
npm生命周期
和命令一样在scripts中配置
- preinstall: 在install之前执行
- install: 安装依赖包
- postinstall: 在install之后执行
- preuninstall: 在uninstall之前执行
- uninstall: 卸载依赖包
- postuninstall: 在uninstall之后执行
- prepack: 在npm pack之前执行
- pack: 打包
- postpack: 在npm pack之后执行
- prepublish: 在npm publish之前执行
- publish: 发布
- postpublish: 在npm publish之后执行
- pregit: 在git commit之前执行
- git: git commit
- postgit: 在git commit之后执行
- prepush: 在git push之前执行
- push: git push
- postpush: 在git push之后执行
- prestop: 在npm stop之前执行
- stop: 停止
- poststop: 在npm stop之后执行
- prestart: 在npm start之前执行
- start: 启动
- poststart: 在npm start之后执行
- prerestart: 在npm restart之前执行
- restart: 重启
- postrestart: 在npm restart之后执行
- run predev: 在npm run dev之前执行
- run dev: 运行
- run postdev: 在npm run dev之后执行
npx
npx简介
npx是npm5.2.0版本新增的命令, 用于执行依赖包中的命令, 例如: npx webpack, npx jest等
npx查找命令的流程
- 查找本地是否存在该命令
- 查找本地是否存在该命令的可执行文件
- 查找全局是否存在该命令
- 查找全局是否存在该命令的可执行文件
- 查找项目依赖包中是否存在该命令
- 查找项目依赖包中是否存在该命令的可执行文件
- 查找远程npm仓库是否存在该命令
- 查找远程npm仓库是否存在该命令的可执行文件
- 报错
npx优点
- 不需要全局安装依赖包:npx会自动下载依赖包
- 不需要手动更新依赖包:npx会自动更新依赖包,会在远程npm的package仓库中查找最新版本的依赖包
- 不需要手动删除依赖包:npx会自动删除依赖包
- 执行任意npm包中的命令:npx可以执行任意npm包中的命令,例如: npx create-react-app my-app
- 执行Github Gist中的命令:npx可以执行Github Gist中的命令,例如: npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32
npx和npx的区别
npx 侧重执行命令
npm 侧重管理依赖,安装或者卸载模块
npx使用场景
- 不想在全局安装某个依赖包, 但是又想使用该依赖包中的命令,且版本号获取最新的。如:npx create-react-app my-app
- 想使用项目依赖包中的命令,但是全局不存在,就可以使用npx直接执行。如:npx vite
npm 包的发布
发布npm包的作用
- 跨团队或团队共享代码,还可以进行版本控制
- 开源造轮子
- 增加自身价值体现
发布npm包的流程
- 查看当前源
这里需要切回官方源
npm config get registry
- 注册npm账号
npm adduser
- 登录npm账号
npm login
- 创建npm包
可以配置package.json中files属性,指定需要发布的文件
{"files": ["index.js"]
}
npm init
- 发布npm包
名称必须唯一 否则403,发布前需要修改版本号
npm publish
- 更新npm包
npm version patch
npm publish
- 删除npm包
npm unpublish
npm 私服
构建npm私服
什么是npm私服
npm私服是一个npm仓库,用于存放npm包,类似于maven私服
为什么要搭建npm私服
- 有些包在国外,下载速度很慢:可以将这些包下载到私服上,然后从私服上下载
- 离线使用:可以将私服部署在内网,然后在内网使用
- 提高包的安全性:更好的管理包,防止包被篡改,防止在使用公共包时出现漏洞
- 提高包的下载速度:将包缓存在本地,下次使用时直接从本地获取,减少下载时间。
搭建npm私服
- 安装verdaccio
Verdaccio是一个轻量级的私服,可以使用它来搭建私服
npm install -g verdaccio
- 启动verdaccio
verdaccio
- 配置npm源
这一步是为了让npm使用私服,而不是使用官方源,之后就不用跟 --registry http://localhost:4873 了
这里也可以使用 xmzs 来添加并切换源
`
npm set registry http://localhost:4873
- 创建私服账号
npm adduser --registry http://localhost:4873
- 登录私服账号
npm login --registry http://localhost:4873
- 发布包
npm publish --registry http://localhost:4873
- 安装包
npm install --registry http://localhost:4873

以下是我私服管理的两个包

总结
以上介绍了npm 的系列知识。
相关文章:
Node.JS---npm相关
文章目录 前言一、package.json配置项version:1.0.0devDependenciesdependenciespeerDependenciesoptionalDependencies 二、npm命令1、npm config listxmzs使用2、npm installpackage-lock.json作用 3、npm run4、 查看全局安装的可执行文件 npm生命周期npxnpx简介…...
Flutter的Don‘t use ‘BuildContext‘s across async gaps警告解决方法
文章目录 问题有问题的源码 问题原因问题分析Context的含义BuildContext的作用特殊情况 解决方法 问题 Flutter开发中遇到Don’t use BuildContext’s across async gaps警告 有问题的源码 if (await databaseHelper.isDataExist(task.title)) {showDialog(context: context,…...
Nginx 实战教程
本篇博客我会演示日常的工作中,我们是怎么利用nginx部署项目的。我们以部署一套前后分离的项目为本次讲述的内容 一、搭建后端项目 创建一个最简单的springboot项目: 只需要依赖一个web模块即可: 提供一个api接口,可以获取服务端…...
Web自动化——python
文章目录 1.八大元素定位2.元素基本操作3.浏览器常用操作4.获取元素信息的常用方法5.鼠标和键盘相关操作6.元素等待1.隐式等待2.显示等待 7.下拉选择框8.弹出框9.滚动条操作10.frame表单的切换11.多窗口切换12.窗口截图、验证码处理 1.八大元素定位 元素属性定位:id…...
华为OD 整数最小和(100分)【java】A卷+B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
正则表达式:文本处理中的瑞士军刀
正则表达式是用于提取字符串规律的规则,通过特定语法表达,以匹配符合该规律的字符串。它具有通用性,不仅适用于Python,也可用于其他编程语言。 下面我用Python的re模块来进行实战演示:(记得import re&…...
WebSocket 入门案例
目录 WebSocket入门案例WebSocket-server新增项目:添加依赖:yml:启动类: frontend-server前端项目:添加依赖:添加yml:启动类:前端引入JS:前端页面:后端代码:测试: WebSocket 入门案…...
华为OD 最大社交距离(100分)【java】A卷+B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
Nginx缓存
Nginx缓存 一般情况下系统用到的缓存有三种 服务端缓存:缓存存在后端服务器,如redis 代理缓存:缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地 客户端缓存:缓存在浏览器 [ ] 什么时候会出现…...
Pyecharts绘图教程(2)—— 绘制多种折线图(Line)参数说明+代码实战
文章目录 🎯 1 简介🎯 2 图表配置项2.1 导入模块2.2 数据配置项2.3 全局配置项 🎯 3 代码实战3.1 基础折线3.2 平滑曲线(is_smooth)3.3 阶梯折线(is_step)3.4 空值过渡(is_connect_n…...
oracle实现搜索不区分大小写
<if test"code ! null and code ! ">and upper(code) like upper(%${code}%) </if>关键字upper...
C++中->与.的区别
在类中 在 C 中,-> 和 . 都可以用于访问类的成员变量和成员函数。但它们在使用上有一些区别: 1. 对于指针类型的对象,必须使用 -> 来访问其成员;而对于非指针类型的对象,则需要使用 . 。 2. -> 运算符在实…...
大语言模型(LLM)综述(二):开发大语言模型的公开可用资源
A Survey of Large Language Models 前言3. RESOURCES OF LLMS3.1 公开可用的模型CheckPoints或 API3.2 常用语料库3.3 库资源 前言 随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更…...
【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅳ—— 替换默认证书
目录 博文摘要6. 使用企业 CA 签发的 SSL 证书 替换 vSphere 默认 SSL 证书6.1 确认证书文件6.2 替换默认 vSphere 证书6.3 验证自签名证书6.4 补充说明 关联博文参考资料 博文摘要 博文主要描述了在 vCenter Server 8 上通过实用工具 certificate-manager 将 vSphere 默认 Ma…...
NI9234 4 通道, ±5 V, 24 位软件可选 IEPE 和 AC/DC模拟输入模块振动测试国产替代
NI的自动化测试和测量系统将助您打破桎梏,化不可能为可能。让我们携手合作,选择最适合您的硬件、软件和服务组合,为您提供全副武装,助您成就非凡。 购买NI的产品或服务,并非只是单纯的一次性交易行为。如果您有任何疑…...
宁波市:做大做强跨境电商 赋能外贸创新发展
近日,全国政协第十四届常委会第二次会议专题研究“构建新发展格局,推进中国式现代化”议题,市政协主席徐宇宁参加“推动高水平对外开放”专题小组讨论,全国政协副主席蒋作君到会听取发言,国家发改委、商务部相关司局负…...
为什么这些网站都在使用CFCA证书
在今天的数字时代,保障数据的安全至关重要,尤其是对于金融机构、政府部门和大型企业等组织而言。证书颁发机构在这一领域扮演着关键的角色,而CFCA(中国金融认证中心)证书已经脱颖而出,展现了其与其他证书的…...
Java编程规范(命名规则),Java程序的运行过程(执行流程)分析
编程规范是对编程的一种约定,主要作用是增强代码的可读性和可维护性,便于代码重用。 首先要求程序中的各个要素都遵守命名规则,然后在编码中严格按照编码格式编写代码。命名规则包括以下几点。 包的名称由一个小写字母序列组成。类的名称由大…...
layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案
图片自适应表格CSS 为防止单元格内的图片不能正常显示,需本地重写CSS。 /*layui-table图片自适应*/ .layui-table-cell {height: auto;line-height: 20px;}.layui-table-cell img {height: 50%;max-width: 50%; }列代码 , cols: [[{type: checkbox,fixed:left, w…...
指针常量和常量指针
大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。 指针常量和常量指针光是这名字就让人头疼了。更何况还有细节问题要理清楚。 正文 命名 其实我…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
