成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

17.6K Star! 一款快速高效的包管理工具

開發
pnpm 相較于 npm/yarn 兩個常用的包管理工具性能得到大幅提升

簡介

pnpm 是一個快速的、節省磁盤空間的包管理工具。pnpm 使用內容尋址的文件系統來存儲磁盤上的所有模塊文件

項目地址

https://github.com/pnpm/pnpm

安裝

  • 使用 npm
npm install -g pnpm
  • 使用 Homebrew如果你已經安裝了 Homebrew 軟件包管理器,則可以使用如下命令賴安裝 pnpm:
brew install pnpm

兼容性

下圖列出了以往的 pnpm 版本和對應支持的 Node.js 版本

圖片

命令

以下是與 npm 等價命令的對照表:

npm 命令

pnpm 等價命令

npm install

pnpm install

npm i

pnpm add

npm run

pnpm

特點

  • 速度快pnpm 相較于 npm/yarn 兩個常用的包管理工具性能得到大幅提升,下圖為官方提供的基準測試數據      

圖片

節省磁盤空間pnpm 內部使用內容尋址的文件系統來存儲磁盤上所有的文件

1、使用 npm/yarn 時,如果你有 100 個項目,并且所有項目都有一個相同的依賴包,那么, 你在硬盤上就需要保存 100 份該相同依賴包的副本,但是pnpm會只在一個地方寫入這部分代碼,后面使用會直接使用hard link,不會占用額外的磁盤空間

2、當這個依賴包需要更新到新版本時,并且新版本中只有一個文件有修改。pnpm 并不會重新寫入101個文件,而是保留原來的 100 個文件的 hard link,僅僅寫入那一個新增的文件到存儲中

依賴管理

pnpm 采用Hard link? (硬鏈接)和 Symbolic Link(符號鏈接)來創建依賴關系的嵌套結構

假設安裝foo@1.0.0?依賴于bar@1.0.0?,  pnmp 會將這兩個包硬鏈接到node_modules :

node_modules
└── .pnpm
├── bar@1.0.0
└── node_modules
└── bar -> <store>/bar
├── index.js
└── package.json
└── foo@1.0.0
└── node_modules
└── foo -> <store>/foo
├── index.js
└── package.json

一旦所有的包都被硬鏈接到node_modules ,符號鏈接就會被用來構建嵌套依賴關系圖

你可能已經注意到了,這兩個包都硬鏈接到一個node_modules? 文件夾 ( foo@1.0.0/node_modules/foo)的子文件夾中。這是為了:

  1. 允許包能import自身。 foo  可以require('foo/package.json')或import * as package from "foo/package.json"
  2. 避免循環符號鏈接。 包的依賴關系被放置在依賴包所在文件夾中。對于 Node.js 來說,依賴項是放在在包的node_modules中還是在某個父級目錄的node-modules中是沒有區別的

下一步,安裝符號鏈接依賴。bar? 被符號鏈接到foo@1.0.0/node_modules文件夾:

node_modules
└── .pnpm
├── bar@1.0.0
└── node_modules
└── bar -> <store>/bar
└── foo@1.0.0
└── node_modules
├── foo -> <store>/foo
└── bar -> ../../bar@1.0.0/node_modules/bar

接下來,處理直接依賴關系。foo? 將被符號鏈接到node_modules?根文件夾,因為foo是項目的依賴項:

node_modules
├── foo -> ./.pnpm/foo@1.0.0/node_modules/foo
└── .pnpm
├── bar@1.0.0
└── node_modules
└── bar -> <store>/bar
└── foo@1.0.0
└── node_modules
├── foo -> <store>/foo
└── bar -> ../../bar@1.0.0/node_modules/bar

這是一個非常簡單的例子。 不過,無論依賴項的數量和依賴關系圖的深度如何,布局都會保持這種結構。

如果這時,添加qar@2.0.0為bar和foo的依賴項:

node_modules
├── foo -> ./.pnpm/foo@1.0.0/node_modules/foo
└── .pnpm
├── bar@1.0.0
└── node_modules
├── bar -> <store>/bar
└── qar -> ../../qar@2.0.0/node_modules/qar
├── foo@1.0.0
└── node_modules
├── foo -> <store>/foo
├── bar -> ../../bar@1.0.0/node_modules/bar
└── qar -> ../../qar@2.0.0/node_modules/qar
└── qar@2.0.0
└── node_modules
└── qar -> <store>/qar

如你所見,即使圖現在更深(foo > bar > qar),文件系統中的目錄深度仍然相同。

這種布局乍一看可能很奇怪,但其實它是完全兼容 Node 的模塊解析算法的!node_modules 根目錄中的包只是一個符號鏈接。require('foo')? 將執行 node_modules/.pnpm/foo@1.0.0/node_modules/foo/indexjs? 中的文件(這里是硬鏈接),而不是 node_modules/foo/index.js 中的文件。

嚴格性

這種布局的一大好處是只有真正在依賴項中的包才能訪問。如果是使用扁平化的 node_modules 結構,程序可以訪問到一些不在package.json依賴中的包。這可以避免一些愚蠢的錯誤

責任編輯:張燕妮 來源: 開源前哨
相關推薦

2019-08-30 08:00:00

WebminWebLinux

2022-09-08 09:00:38

Ansible開源

2024-05-09 07:34:38

SQL Server數據庫管理工具

2015-08-07 09:44:36

開源數據中心

2025-04-21 01:00:00

DbGate數據庫開源

2019-10-10 08:46:02

Docker可視化技術瀏覽器

2022-05-24 15:03:44

開源工具可視化

2022-01-20 13:39:44

MySQLSequel Pro數據庫

2022-05-09 19:19:36

Pnpm管理工具

2022-08-03 08:02:46

PDM工具Python

2022-06-28 16:30:26

管理工具Python

2022-07-01 09:17:14

Pythonpoetry工具

2019-07-19 16:55:07

MySQL管理工具Orchestrato

2020-07-27 09:59:25

Kafka可視化CMAK

2013-11-12 09:59:48

2022-02-07 23:03:07

Python工具管理庫

2020-04-27 08:00:00

Zenkit ToDo任務管理工具操作系統

2017-06-30 14:51:13

Linux命令行密碼管理工具

2022-05-25 16:59:27

Kubectl-IcKubernetesPod

2022-07-18 15:48:43

數據庫開源工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产综合久久婷婷香蕉 | 亚洲大片在线观看 | 紧缚调教一区二区三区视频 | 亚洲精品免费观看 | 中文字幕视频网 | 日韩在线视频一区 | 欧美在线看片 | 亚洲精品一区国语对白 | 91av免费看| 亚洲欧美一区二区三区国产精品 | 亚洲视频免费在线观看 | 亚洲成人一级 | 国产一区久久精品 | 亚洲国产日韩欧美 | 伊人免费网 | 小草久久久久久久久爱六 | 亚洲一区二区av | 精品国产一区二区三区久久 | 久久久久久a| 最新国产视频 | 麻豆视频在线免费观看 | 国产精品18久久久久久久 | 国产欧美一区二区久久性色99 | 欧美1区2区| 亚洲成av | 一区二区国产精品 | 超碰一区二区 | 一区在线播放 | 黄色片免费在线观看 | 亚洲视频免费播放 | 成人av电影在线观看 | 日韩快播电影网 | 欧美性猛交 | 一区二区三区国产 | 欧美日韩一区二区三区在线观看 | 国产精品亚洲成在人线 | 欧美日韩在线综合 | 日韩在线视频播放 | 成人免费大片黄在线播放 | 欧美xxxⅹ性欧美大片 | 国产日韩久久 |