本文介绍: 在npm v3时期出现的包管理工具弥补了很多早期npm缺陷解决npm v5才解决问题例如使用 yarn.lock机制锁定版本依赖利用缓存机制实现离线模式等等。

目录

(一)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 inity (跳过项目配置选项 所有选项默认yes) 

(2)通过脚手架配置(如vueclireactcli等)

2.npm配置文件

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

常见配置属性

private属性

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

main属性

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

scripts属性*** 

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

使用npm run xxx运行命令

有些常用指令例如startteststoprestart可以不写run,直接npm xxx 

dependencies属性

指定无论是在开发环境还是生产环境需要依赖的包,如vueaxios

devDependencies属性

开发环境需要用到的包,在生产环境需要,如:webpackbabel

通过npm install webpacksave-devwebpack安装devDependencies属性中 

peerDependencies属性

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

依赖版本管理

了解即可 

3.npm安装包细节

全局安装(global install):npm install xxxg

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

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

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

局部安装的包一般是用于该项目的具体功能,如axioselementui等 

将包安装到当前文件夹node_modules

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

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

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&gt //等效于:npm run <cmd&gt

其余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通过依赖库中的软链接实现了如下效果

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

(4)pnpm的store存储

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

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

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

(四)未完待续

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

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

原文地址:https://blog.csdn.net/DogEgg_001/article/details/134630873

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25886.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注