首页 > 其他分享 >pnpm的基本原理及快速使用

pnpm的基本原理及快速使用

时间:2023-02-16 22:56:30浏览次数:44  
标签:node npm axios 基本原理 版本 pnpm 快速 链接

基本原理

前置知识:软件链接与硬链接

软链接(符号链接Symbolic link):是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。在window快捷方式上和其功能类似。

硬链接:是计算机文件系统中的多个文件平等地共享同一个文件存储单元(如MFT条目、inode)。硬链接必须在同一个文件系统中;一般用户权限下的硬链接只能用于文件,不能用于目录,因为其父目录就有歧义了。

熟悉Linux的朋友就很容易就能区分理解这两个东西了。(mac同)创建的命令分别是:

# 创建硬链接
$ ln target_file link_name
# 创建软链接
$ ln -s target_file link_name
$ ln -s target_directory link_name

当然在windows中使用mklink也能够创建软链接和硬链接

# 创建硬链接
mklink /H link_name target_file
# 创建软链接
mklink target_file link_name

软硬链接说明图示

创建非扁平化的 node_modules 文件夹

image
这是官网的一张说明其非扁平化 node_modules的图,可能不是很明白,我们可以对比着npm会比较明白。分别使用npm和pnpm安装axios

PS G:\npm_demo> npm install axios
added 9 packages in 1s

PS G:\pnpm_demo> pnpm add axios
Packages: +9
+++++++++
Packages are hard linked from the content-addressable store to the virtual store.
  Content-addressable store is at: G:\.pnpm-store\v3
  Virtual store is at:             node_modules/.pnpm
Progress: resolved 9, reused 6, downloaded 3, added 9, done

dependencies:
+ axios 1.2.2

Done in 2.8s

image
npm安装axios的时候,axios的依赖会放在和axios同一级,这样做的好处是,如果别的包也同样使用了这些依赖,就不用重新导入了。但是缺点是,我们在项目中也能直接去应用axios依赖导入的包。但我们自身的项目却是没有依赖那些包的。要是哪天移除了axios,那项目中可能就会出错了,也就是幽灵依赖。
image

切换node版本原理

  1. 在我们配置了系统环境变量之后,命令行中使用命令时,系统就会到配置的路径中去寻找是否有支持命令的软件,然后执行命令。
    image

  2. 在安装pnpm的时候,它会在我们的环境变量中添加它自己文件夹的路径,比如在我电脑中它的路径是:C:\Users\Administrator\AppData\Local\pnpm,它的目录结构如下:
    image

  3. 当我们使用pnpm切换node版本的时候,没有对应的版本它则会下载对应版本的node,然后在将其创建了链接(软链接)到pnpm的根目录中。就相当于当前环境变量中有了对应版本的node了。

快速使用

安装

安装了node可以使用npm安装

npm install -g pnpm

没有也可以直接在powershell中使用命令进行安装

iwr https://get.pnpm.io/install.ps1 -useb | iex

安装过程中,若权限足够它会在自动在系统中添加环境变量。

常用命令(基本与npm一致)

npm 命令 pnpm 等效
npm install pnpm install
npm i pnpm add
npm run pnpm 或 pnpm run

删除相关依赖

pnpm remove -D # 删除开发环境 devDependencies 中的依赖项
pnpm rm -P #  删除dependencies 中相关依赖项
pnpm uninstall -g # 全局中删除
pnpm prune # 移除没有在项目中使用的packages

管理node版本

pnpm env use --global lts # 安装lts版node
pnpm env use --global 18  # 安装v18版node
pnpm env use --global latest # 安装最新node
pnpm env remove --global 14.0.0 # 移除指定版本node
pnpm env list # 查看本地有的node版本
pnpm env list --remote # 查看网络源可用的node版本

其它命令

pnpm create react-app my-app
pnpm start # 别名 run start

常用配置

package.json

{
    // 指定你的软件能够运行的 Node 版本和 pnpm 版本
    "engines": {
        "node": ">=10",
            "pnpm": ">=3"
    },
    "pnpm": {
        // 忽略依赖问题的警告
        "peerDependencyRules": {
            "ignoreMissing": ["@babel/*", "@eslint/*"]
        }
    }
}

参考源

https://pnpm.io/zh/

标签:node,npm,axios,基本原理,版本,pnpm,快速,链接
From: https://www.cnblogs.com/flytree/p/17045040.html

相关文章

  • 快速部署一个K8s集群——kubernetes v1.26,kubeadm方式
    快速部署一个K8s集群——kubernetesv1.26,kubeadm方式1、前置知识点1.1生产环境可部署Kubernetes集群的两种方式目前生产部署Kubernetes集群主要有两种方式:•kubea......
  • 流程引擎Camunda 7 快速开始
    根据官方文档快速搭架一个基于BPMN的流程引擎camundahttps://docs.camunda.org/get-started/quick-start/下载地址https://camunda.com/download/#download-other-menu......
  • gin-快速入门
    转载自:https://gin-gonic.com/zh-cn/docs/quickstart/要求Go1.13及以上版本安装要安装Gin软件包,需要先安装Go并设置Go工作区。1.下载并安装gin:1$go......
  • 《用 libcurl 实现 HTTP 下载文件,其中设置了超时时间,以便在网络异常时能够快速中止下
    CURLOPT_TIMEOUT选项设置了超时时间为10秒,如果在这个时间内没有下载完成,则会返回一个超时错误,可以在回调函数中进行错误处理。如果网络异常或其他错误,也会在curl_eas......
  • ABAP read_text 使用 快速开始
      PERFORM frm_read_text USING 'B01' lv_name 'EBANH' CHANGING ls_ZMMS001d-txz01.FORM frm_read_text USING fid fname fobject CHANGING c_text. ......
  • electron快速入门
    简要介绍​ Electron是一个使用JavaScript、HTML和CSS构建桌面应用程序的框架。嵌入Chromium和Node.js到二进制的Electron允许您保持一个JavaScript代码代......
  • Python+chatGPT编程5分钟快速上手,强烈推荐!!!
    最近一段时间chatGPT火爆出圈!无论是在互联网行业,还是其他各行业都赚足了话题。俗话说:“外行看笑话,内行看门道”,今天从chatGPT个人体验感受以及如何用的角度来分享一下。......
  • 快速搭建一个网关服务,动态路由、鉴权,一网打尽!(含流程图)
    作者:热黄油啤酒链接:https://juejin.cn/post/7004756545741258765前言本文记录一下我是如何使用Gateway搭建网关服务及实现动态路由的,帮助大家学习如何快速搭建一个网......
  • AcWing 785.快速排序(Java)
    题目描述给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数n。第......
  • C#快速入门 _笔记
      https://www.youtube.com/watch?v=Mz-8PpvflaQ&list=PLJgD_fXVXZKppT4stJ09s9nu3byvyMERE&index=20 20.访问修饰符private:私有的,仅类的内部可以访问protected:......