NodeJS(二):npm包管理工具、yarn、npx、pnpm工具等

目录

(一)npm包管理工具

1.了解npm

2.npm的配置文件

常见的配置属性

scripts属性*** 

依赖的版本管理

3.npm安装包的细节

4.package-lock文件

5.npm install原理**

6.npm的其他命令

(二) 其他包管理工具

1.yarn工具

基本指令

2.cnpm工具

3.npx工具

(1)执行本地安装的包的指令

(2)不用全局安装,直接执行一次性指令

(3)npx原理

(三)pNpm工具

1.pnpm特点

(1)节省磁盘空间

(2)提升安装速度

(3)创建一个非扁平化的node_modules

2.pnpm的常见命令

3. pnpm的原理实现

(1)硬链接

(2)软链接(符号链接)

(3)pnpm的创建非扁平化目录 

(4)pnpm的store存储

(四)未完待续


(一)npm包管理工具

1.了解npm

NPM(node package manager)是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准,用于下载、管理、共享代码,管理项目的依赖关系

下载包

在npm官网中可以搜索下载所有的包:npm | Home

npm install xxx包名 

若项目还没有package文件,下载包后会自动生成package.json并将下载的包和版本信息填写到package中 

npm初始化项目

(1)直接配置 

npm init

npm init -y (跳过项目配置选项 所有选项都默认yes) 

(2)通过脚手架配置(如vue-cli、react-cli等)

2.npm的配置文件

通过npm init指令配置后可得到

常见的配置属性

  • name:项目名称(必备)
  • version:项目版本(必备)
  • description:项目的描述
  • author:作者信息
  • license:开源协议

private属性

设置项目是否私有,为true则表示不允许npm发布

main属性

用于标志项目的入口文件,例如引入一个axios包,包里会有package文件指定"main":"index.js"

scripts属性*** 

用于配置一些脚本命令,以键值对形式存在

使用npm run xxx来运行命令

有些常用指令,例如start、test、stop、restart可以不写run,直接npm xxx 

dependencies属性

指定无论是在开发环境还是生产环境都需要依赖的包,如vue、axios等

devDependencies属性

在开发环境需要用到的包,在生产环境不需要,如:webpack、babel等

通过npm install webpack --save-dev将webpack安装到devDependencies属性中 

peerDependencies属性

对等依赖的项目依赖关系,意思是:使用的这个包是以另外的包为前提的。如:element-ui依赖于vue等

依赖的版本管理

了解即可 

3.npm安装包的细节

全局安装(global install):npm install xxx -g

全局安装的包一般可提供直接执行的命令,适用于工具类的包,如webpack、yarn等

将包安装到磁盘用户文件夹的node_modules中

本地(局部)安装(local install):npm install xxx

局部安装的包一般是用于该项目的具体功能,如axios、element-ui等 

将包安装到当前文件夹的node_modules中

全局安装与本地安装的辨别技巧:需要用到指令执行任务的是全局安装,需要用require引入的是局部安装

局部安装又分为开发时依赖生产时依赖 

  • 默认安装开发和生产时依赖:npm i xxx
  • 安装生产依赖:npm i xxx --save 或 npm i xxx -S
  • 安装开发依赖:npm i xxx --save-dev 或 npm i xxx -D
  • 根据package.json中的依赖包进行安装:npm i

4.package-lock文件

package-lock.json 是在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。

5.npm install原理**

 

6.npm的其他命令

卸载

npm uninstall xxx

重新生成包

npm rebuild

清空缓存

npm cache clean

其他指令:

CLI Commands | npm Docs

(二) 其他包管理工具

1.yarn工具

介绍:在npm v3时期出现的包管理工具

弥补了很多早期npm的缺陷,解决了npm v5才解决的问题,例如:使用 yarn.lock 等机制,锁定版本依赖;利用缓存机制,实现了离线模式等等

`yarn install` | Yarn - JavaScript 软件包管理器 | Yarn中文文档 - Yarn中文网

基本指令

安装yarn

npm i yarn -g 

初始化项目

yarn init -y 

安装包

yarn add xxx

yarn add xxx // 安装生产依赖

yarn add xxx --dev/-D // 安装开发依赖

卸载包

yarn remove xxx  

2.cnpm工具

因为 npm 安装插件是从国外服务器下载,受网络的影响比较大,可能会出现异常,因此搭建了国内的npm淘宝镜像网站

npmmirror 镜像站

3.npx工具

npx是npm5.2之后自带的一个命令,一般用于它来调用项目中的某个模块

在什么情况下使用?

(1)执行本地安装的包的指令

当全局安装和项目本地安装的包的版本不同时,在命令行执行包的指令通常是执行全局安装的版本

我的全局yarn包版本是1.22.21,本地yarn包是1.10.0

执行本地安装的包的指令有两种方法:如yarn查看版本操作

1.在package.json的脚本里写上对应指令

package里的包命令执行默认是从node_modules开始找 

2.执行本地yarn包路径 

通过npx指令更加轻松 

npx执行包的指令会先从本地node_modules查找,然后再查找环境变量,没有再下载对应的包 

(2)不用全局安装,直接执行一次性指令

有些指令只需要使用一两次,全局安装包反而浪费空间

使用npx,可以在不全局安装依赖包的情况下,运行命令,而且运行后不会污染全局环境

(3)npx原理

  1. 去node_modules/.bin路径检查npx后的命令是否存在,找到之后执行;
  2. 找不到,就去环境变量$path里面,检查npx后的命令是否存在,找到之后执行;
  3. 还是找不到,自动下载一个临时的依赖包最新版本在一个临时目录,然后再运行命令,运行完之后删除,不污染全局环境。

我参考的是这篇文章:npx详细使用 - 简书 感觉很详细简单 

(三)pNpm工具

项目初衷 | pnpm

1.pnpm特点

(1)节省磁盘空间

使用npm时,如果有100个项目需要用到同一个依赖包,那么硬盘上就会存储100个该包的副本,极大程度浪费了空间。而使用pnpm,依赖包会被存储在内容可寻址的存储中

  1. 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。 例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。
  2. 所有文件都会存储在硬盘上的某一位置。 当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。 这允许你跨项目地共享同一版本的依赖。

(2)提升安装速度

pnpm 分三个阶段执行安装:

  1. 依赖解析。 仓库中没有的依赖都被识别并获取到仓库。
  2. 目录结构计算。 node_modules目录结构是根据依赖计算出来的。
  3. 链接依赖项。 所有以前安装过的依赖项都会直接从仓库中获取并链接到node_modules

这种方法比传统的三阶段安装过程(解析、获取和将所有依赖项写入node_modules)快得多。

(3)创建一个非扁平化的node_modules

使用 npm 或 Yarn Classic 安装依赖项时,所有的包都被提升到模块目录的根目录。 这样就导致了一个问题:源码可以直接访问不属于该项目的依赖或者修改依赖,而不是作为只读的项目依赖。 

默认情况下,pnpm 使用符号链接(软链接)将项目的直接依赖项添加到模块目录的根目录中。 

相关文章:平铺的结构不是 node_modules 的唯一实现方式 | pnpm 

2.pnpm的常见命令

下载pnpm

npm i pnpm -g 

初始化项目

pnpm init 

安装依赖包

pnpm add 依赖包名  // (install 也可以)

删除依赖包

pnpm remove 依赖包名   //(uninstall也可以) 

运行指令

pnpm <cmd>   //等效于:npm run <cmd> 

其余Cli命令:pnpm add <pkg> | pnpm

3. pnpm的原理实现

pnpm的高效是基于硬链接软链接实现的,因此先介绍这两种链接的效果

(1)硬链接

硬链接(Hard link)  是电脑文件系统中的多个文件平等地共享同一个文件存储单元,删除一个文件名字后,还可以用其它名字继续访问该文件。

这个概念就有点像编程语言的数组、对象等数据结构

window操作:mlink /H 原文件名  硬链接文件名

(2)软链接(符号链接)

符号链接 (软链接、Symbolic link、Soft link) 是一类特殊的文件,其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用

window操作:mlink 原文件名  软链接文件名 

(3)pnpm的创建非扁平化目录 

我通过pnpm下载axios包来演示

pnpm通过依赖库中的软链接实现了如下效果:

  • 只能访问到自己下载的axios,而不会使用到axios依赖的包(因为require只会搜索node_modules目录下的第一层文件)。
  • 依赖库中axios需要依赖的包通过软链接链接到.pnpm中,结构清晰,又能清晰的查看各个包的依赖关系。

.pnpm文件中的所有依赖包通过硬链接链接到pnpm统一管理的仓库中

(4)pnpm的store存储

各个项目的包通过硬链接链接到pnpm的store仓库中

仓库路径如下,通过指令 pnpm store path 查看

从store中删除当前未被引用的包来释放store的空间,通过指令:pnpm store prune

(四)未完待续

对node的简单学习和了解就到这里,后续可能还会学怎么用node进行后端项目的搭建什么的。。

接到了一个实习 要写小程序 所以下一步就是火速的花两三天学一学uniapp等知识,加油哟西QAQ

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

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

相关文章

SAP中的新旧事务码

SAP中的新旧事务码 SAP随着新版本的发布&#xff0c;我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE&#xff0c;新TCODE有很多的新特性和新功能。在这个这种情况下&#xff0c;很多旧TCODE就会被废弃。我们如何查找这个替换呢&#xff1f; …

state_dict使用详解

在PyTorch中&#xff0c;state_dict是一个非常重要的概念&#xff0c;它是一个包含模型参数的字典对象。每个模型的state_dict都包含了该模型的所有参数&#xff08;权重和偏置等&#xff09;&#xff0c;用于在训练和推理过程中重现模型的内部状态. pytorch 中的 state_dict 是…

MySQL-含json字段表和与不含json字段表查询性能对比

含json字段表和与不含json字段表查询性能对比 说明: EP_USER_PICTURE_INFO_2:不含json字段表 20200729json_test:含有json字段表 其中20200729json_test 标准ID、MANAGER_NO、PHONE_NO 为非json字段 data为json字段 2个表中MANAGER_NO、PHONE_NO都创建了各自的索引 测试…

CUDA简介, 配置和运行第一个CUDA程序(Windows和Linux)

CUDA简介 CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA开发的一种通用并行计算架构。CUDA允许程序员利用NVIDIA GPU的并行计算能力&#xff0c;加速各种计算密集型应用程序。 CUDA技术基于GPU的并行计算原理。传统的CPU处理器拥有少量的核心&…

js中继承的方法

前言: 本人刚写了一篇原型链的封装继承多态,用家有儿女做的demo。其实我个人感觉封装和多态都容易去理解与实现。关键在于继承,js的才是比较难的,也容易让人混乱,至少我是因为继承头大过\(^o^)/~ js中有很多方法可以实现继承,这篇文章主要对继承的方法进行学习与测试。 这里…

[STM32-1.点灯大师上线】

学习了江协科技的前4课&#xff0c;除了打开套件的第一秒是开心的&#xff0c;后面的时间都是在骂娘。因为51的基础已经几乎忘干净&#xff0c;c语言已经还给谭浩强&#xff0c;模电数电还有点底子&#xff0c;硬着头皮上吧。 本篇主要是讲述学习点灯的过程和疑惑解释。 1.工…

【3】密评-物理和环境安全测评

0x01 依据 GB/T 39786 -2021《信息安全技术 信息系统密码应用基本要求》针对等保三级系统要求&#xff1a; 物理和环境层面&#xff1a; a&#xff09;宜采用密码技术进行物理访问身份鉴别,保证重要区域进入人员身份的真实性&#xff1b; b&#xff09;宜采用密码技术保证电子门…

[HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

电音制作入门软件FL Studio21.2.0最新永久免费版

FL Studio是一款出色的编曲软件&#xff0c;最新版本的FL Studio21新增了四款全新的插件&#xff0c;覆盖了音频设计、延迟、相位器等等。通过软件的不断更新&#xff0c;我们可以享受到更加智能的电子音乐创作工具&#xff0c;目前&#xff0c;FL Studio的正式版已经推出了超过…

内核启动时间信息打印

文章目录 一 串口打印1 借助串口助手2 dmesg自带时间3 内核显示时间信息4 借助initcall_debug二 图形花显示1 bootgraph工具使用2 Bootchart工具使用3 Grabserial工具使用一 串口打印 1 借助串口助手 2 dmesg自带时间 root@xboard:~# dmesg [ 0.000000] Booting Linux on …

操作系统概论:揭秘计算机背后的神秘力量

操作系统概论 & 功能 概述定义操作系统功能作为系统资源的管理者向上层提供方便易用的服务作为最接近硬件的层次 主页传送门&#xff1a;&#x1f4c0; 传送 概述 概念&#xff1a; 定义 控制和管理计算机硬件和软件资源的程序一种系统软件为上层用户、应用程序提供简单易…

uniapp开发小程序经验记录

uniapp开发小程序的过程中会遇到很多问题&#xff0c;这里记录一下相关工具优化&#xff0c;便于后来者参考。 每次保存代码后&#xff0c;小程序都跳回首页 针对这个问题&#xff0c;常规的做法就是修改pages配置文件&#xff0c;但是这种方式不便于路由参数的设置&#xff…

某60区块链安全之JOP实战一学习记录

区块链安全 文章目录 区块链安全Jump Oriented Programming实战一实验目的实验环境实验工具实验原理实验内容Jump Oriented Programming实战一 实验步骤分析合约源代码漏洞Jump Oriented Programming实战一 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约中中Ju…

CPP-SCNUOJ-Problem P24. [算法课贪心] 跳跃游戏

Problem P24. [算法课贪心] 跳跃游戏 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标。 输入 输入一行数组nums 输出 输出true/fasle 样例 标准输入 2 3 1 …

【Wireshark工具使用】Wireshark无法抓取TwinCAT的EtherCAT包(已解决)

写在前面 因项目需要&#xff0c;近期在在深入研究EtherCAT协议&#xff0c;之后会将协议做一个系统的总结&#xff0c;分享在这个分栏。在研究EtherCAT协议帧时&#xff0c;使用了一个网络数据分析工具Wireshark&#xff0c;本文是关于EtherCAT数据帧分析工具使用中遇到的一个…

【设计模式】策略模式设计-电影票打折功能

任务二&#xff1a;使用策略模式设计电影票打折功能 某电影院售标系统为不同类型的用户提供了不同的打折方式&#xff08;Discount&#xff09;&#xff0c;学生凭学生证可享受8折优惠**&#xff08;StudentDiscount&#xff09;&#xff0c;儿童可享受减免10元的优惠&#xf…

「Verilog学习笔记」时钟分频(偶数)

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule even_div(input wire rst ,input wire clk_in,output wire clk_out2,output wire clk_out4,output wire clk_out8); //********…

新华三数字大赛复赛知识点 VLAN基本技术

VLAN IEEE 802.1Q 交换机端口类型 MVRP协议 VLAN Virtual LAN虚拟局域网。LAN可以是由几台少数家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络–也就是广播域。将一个物理的局域网在逻辑上划分成多个广播域…

苹果IOS在Safari浏览器中将网页添加到主屏幕做伪Web App,自定义图标,启动动画,自定义名称,全屏应用pwa

在ios中我们可以使用Safari浏览自带的将网页添加到主屏幕上&#xff0c;让我们的web页面看起来像一个本地应用程序一样&#xff0c;通过桌面APP图标一打开&#xff0c;直接全屏展示&#xff0c;就像在APP中效果一样&#xff0c;完全体会不到你是在浏览器中。 1.网站添加样式 在…

时间复杂度为 O(n^2) 的排序算法 | 京东物流技术团队

对于小规模数据&#xff0c;我们可以选用时间复杂度为 O(n2) 的排序算法。因为时间复杂度并不代表实际代码的执行时间&#xff0c;它省去了低阶、系数和常数&#xff0c;仅代表的增长趋势&#xff0c;所以在小规模数据情况下&#xff0c; O(n2) 的排序算法可能会比 O(nlogn) 的…