Node.JS---npm相关

news2024/11/25 17:19:23

文章目录

  • 前言
  • 一、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下,采用扁平化(理想化)的方式安装,会将重复的依赖提升到顶层,其排序规则为:

. 系列 ===> @系列 ===>字母顺序

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

其安装过程如图:

npm install

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

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

  • 全局的 .npmrc
    在全局C盘AppData文件中找.npmrc文件

  • npm内置.npmrc
    在安装的node中找.npmrc文件

  • 检查项目是否存在package-lock.json文件

    • 有:比较 package-lock.jsonpackage.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中配置相关执行命令

npm run
所有的可执行文件都放在 node_modules.bin目录下

  • .sh文件 是给unix、Linux、Macos 使用
  • .cmd 文件 是windows cmd 使用
  • .ps1文件 是windows power shell 使用

过程:

  1. 当前项目 node_modules/.bin
    当前项目

  2. 全局 node_modules
    prefix
    全局

  3. 环境变量

命令识别:

  • 如果命令是以npm开头的, 则执行npm内部命令
  • 如果命令是以node开头的, 则执行node命令
  • 如果命令是以./或…/开头的, 则执行对应的脚本文件
  • 如果命令是以其他字符串开头的, 则先在node_modules/.bin目录下查找对应的命令,

4、 查看全局安装的可执行文件

npm ls -g

npm生命周期

和命令一样在scripts中配置

  1. preinstall: 在install之前执行
  2. install: 安装依赖包
  3. postinstall: 在install之后执行
  4. preuninstall: 在uninstall之前执行
  5. uninstall: 卸载依赖包
  6. postuninstall: 在uninstall之后执行
  7. prepack: 在npm pack之前执行
  8. pack: 打包
  9. postpack: 在npm pack之后执行
  10. prepublish: 在npm publish之前执行
  11. publish: 发布
  12. postpublish: 在npm publish之后执行
  13. pregit: 在git commit之前执行
  14. git: git commit
  15. postgit: 在git commit之后执行
  16. prepush: 在git push之前执行
  17. push: git push
  18. postpush: 在git push之后执行
  19. prestop: 在npm stop之前执行
  20. stop: 停止
  21. poststop: 在npm stop之后执行
  22. prestart: 在npm start之前执行
  23. start: 启动
  24. poststart: 在npm start之后执行
  25. prerestart: 在npm restart之前执行
  26. restart: 重启
  27. postrestart: 在npm restart之后执行
  28. run predev: 在npm run dev之前执行
  29. run dev: 运行
  30. run postdev: 在npm run dev之后执行

npx

npx简介

npx是npm5.2.0版本新增的命令, 用于执行依赖包中的命令, 例如: npx webpack, npx jest等

npx查找命令的流程

  1. 查找本地是否存在该命令
  2. 查找本地是否存在该命令的可执行文件
  3. 查找全局是否存在该命令
  4. 查找全局是否存在该命令的可执行文件
  5. 查找项目依赖包中是否存在该命令
  6. 查找项目依赖包中是否存在该命令的可执行文件
  7. 查找远程npm仓库是否存在该命令
  8. 查找远程npm仓库是否存在该命令的可执行文件
  9. 报错

npx优点

  1. 不需要全局安装依赖包:npx会自动下载依赖包
  2. 不需要手动更新依赖包:npx会自动更新依赖包,会在远程npm的package仓库中查找最新版本的依赖包
  3. 不需要手动删除依赖包:npx会自动删除依赖包
  4. 执行任意npm包中的命令:npx可以执行任意npm包中的命令,例如: npx create-react-app my-app
  5. 执行Github Gist中的命令:npx可以执行Github Gist中的命令,例如: npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32

npx和npx的区别

npx 侧重执行命令

npm 侧重管理依赖,安装或者卸载模块

npx使用场景

  1. 不想在全局安装某个依赖包, 但是又想使用该依赖包中的命令,且版本号获取最新的。如:npx create-react-app my-app
  2. 想使用项目依赖包中的命令,但是全局不存在,就可以使用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私服

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

在这里插入图片描述


总结

以上介绍了npm 的系列知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对象属性的读写两种方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对象属性的读写 两种方法 选择题 下列代码执行输出的结果是? class C(object): name hello c1 C() print("【执行】c1C()") print("【显示】print(c1.name)") print(c…

伽马函数:将阶乘函数扩展到正整数之外

一、说明 &#xff0c;是对阶乘这种运算的实数域拓展。属于高级的数学模型&#xff0c;在高级概率模型用于定义分布函数。本文将介绍这个函数的基础概念和属性。 二、gamma函数定义 众所周知&#xff0c;阶乘这个运算本来是用于简化形如 n(n−1)(n−2)…321 的乘积的&#xff0…

OCR文字识别软件对于硬件的哪方面需求较高?

这个还得看OCR软件是远程识别还是本地识别&#xff0c;前者对电脑配置要求相对较低&#xff0c;因为OCR识别是在远程服务器上进行的&#xff0c;本地只是负责优化图片和保存识别结果&#xff0c;如金鸣表格文字识别和眼精星表格文字识别这类的软件就是基于远程的OCR识别方案&am…

MySQL性能优化指南:深入分析重做日志刷新到磁盘的机制

文章目录 &#x1f31f; MySQL重做日志性能优化指南&#x1f34a; 重做日志对数据库性能的影响&#x1f34a; 重做日志刷入磁盘的机制&#x1f34a; 实战使用&#x1f389; 1. 确认MySQL的redo log配置&#x1f389; 2. 强制刷新重做日志&#x1f389; 3. 检查重做日志是否已经…

【GIS前言技术】到底什么是实景三维?

文章目录 什么是实景三维&#xff1f;实景三维是怎么制作的&#xff1f;实景三维有哪些应用&#xff1f; 什么是实景三维&#xff1f; 实景三维是客观真实反映现实世界的三维模型&#xff0c;具有单体化、实体化、结构化、语义化的特点&#xff0c;通过融合模型三维、倾斜三维…

中文编程工具构件的应用:会员管理系统软件登录界面所用的构件编程实例

中文编程工具构件的应用&#xff1a;会员管理系统软件登录界面所用的构件编程实例 该实际应用的软件登录界面中的 用户名使用了 组合框构件&#xff0c;其内容可以读取动态赋值&#xff0c;密码框使用了 行编辑 构件&#xff0c;该构件可以预先设置密码字符。 该中文编程工具免…

【汇编】寄存器(学习笔记)

一、CPU工作原理 1、CPU概述 CPU由运算器、控制器、寄存器等器件组成&#xff0c;这些器件靠内部总线相连。 内部总线&#xff1a;CPU内部 <–> 各个器件 外部总线&#xff1a;CPU <–> 主板上其它器件 2、通用寄存器 8086CPU所有的寄存器都是16位的&#xff0c…

老胡的周刊(第112期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 LocalAI[2] &#x1f916; 免费、开源的 Ope…

iOS自动化测试方案(三):WDA+iOS自动化测试解决方案

文章目录 一、背景二、环境准备三、总结四、扩展4.1、WDA Client4.2、先使用WDA实现自动化4.3、代码示例&#xff1a;4.4、脱离macOS测试iOS App自动化&#xff0c;两个解决方案&#xff1a;4.5、第二种解决办法&#xff1a;pip install -U weditor4.6、下载安装Appium-Inspect…

2023 年 42 周 - 学习 倦怠期回顾

2023 年 42 周 - 学习 & 倦怠期回顾 本周属于反思怪的时间&#xff0c;1/4 的内容涉及到反思自己&#xff0c;剩下超过 2/3 的内容是对于学习方法加强的笔记 顺便重新复习了一下上周的笔记&#xff0c;然后发现&#xff0c;其实周算错了……截图的日历直接用周日算成一周…

【tg】 7 GroupInstanceCustomImpl

group GroupInstanceCustomImpl 核心GroupInstanceCustomInternal G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.h 最核心是是GroupInstanceCustomInternal: private:std::shared_ptr<Threads> _threads;std::u…

python学习笔记:引用、浅拷贝和深拷贝(底层原理)

前言 在python中“一切皆对象”&#xff0c;包括整数&#xff08;int&#xff09;&#xff0c;小数&#xff08;float&#xff09;等 引用 Python解释器维护了一个内部的数据结构&#xff0c;称为命名空间或符号表&#xff0c;它将变量名与对象的内存地址关联起来。当您创建一…

【ArcGIS模型构建器】02:shp批量转kml/kmz

文章目录 一、加载实验数据二、设计模型构建器三、保存模型构建器 一、加载实验数据 打开ArcMap&#xff0c;加载专栏配套实验数据data02.rar中的&#xff0c;位于乡镇根目录文件夹内的15个乡镇矢量数据。 接下来跟我一步步实现用模型构建器批量转为kml。 二、设计模型构建器…

如何创建前端绘图和图表?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

外贸找客户软件:BotMaster 2023 Crack

具有多设备支持的全新 WhatsApp™ Business 批量发送器 最新9.0.2.1 稳定且工作。 测试日期&#xff1a;2023 年 10 月 9 日 所有功能工作正常。 图像发送问题固定 数字过滤器和组抓取器已修复。 目前稳定 现在使用 BotMaster 9.0.2.1 从 WhatsApp™ 发送交互式按钮 您现在可以…

设置host

macOS sudo nano /etc/hosts sudo nano /etc/hosts127.0.0.1 yourdomain.com 127.0.0.1 subdomain.yourdomain.com 将 yourdomain.com 替换为您要配置的域名&#xff0c;将 subdomain.yourdomain.com 替换为您要配置的子域名。确保 IP 地址为 127.0.0.1&#xff0c;这将指向…

C++对象模型(19)-- 函数语义学:成员函数

1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率&#xff0c;在C中&#xff0c;对普通成员函数的调用&#xff0c;会转换成对全局函数的调用。 假如有下面所示的成员函数&#xff1a; class Test { public:int m_i;int func(int a) {m_i a;retu…

划片机:半导体芯片是如何封装的?

半导体芯片的封装是指将芯片内部的电路通过引脚、导线、焊盘等连接起来&#xff0c;并保护芯片免受外部环境的影响&#xff0c;同时满足外部电路的连接需求。以下是半导体芯片封装的常见步骤&#xff1a; 1. 减薄&#xff1a;将晶圆研磨减薄&#xff0c;以便于后续的划片操作。…

2023京东双十一活动今晚20点开始?京东双十一时间安排和满减规则

2023京东双十一活动时间节点&#xff01; 京东双十一红包&#xff0c;同样是每天可以领取&#xff0c;10月23日开始&#xff0c;面额最高11111元。 京东app搜索【红包到手210】即可领取双11红包 (数字要带上) 2023年京东双11整体将围绕六个时期展开&#xff1a; 1、第一波&…

如何处理前端多语言支持?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…