本文介绍: 还在用npm?来用轻量级pnpm

pnpm新建vite+vue3项目 以及pnpmnpm区别

构建需要安装以下配置

  1. Node环境
  2. npm环境

安装pnpm

npm install -g pnpm

设置镜像

pnpm config set registry https://registry.npm.taobao.org/

# 检查
pnpm config get registry

配置pnpm环境

  1. 终端运行pnpm create vite (项目名称)
  2. 确认项目名称
  3. 选择框架
  4. 选择开发语言
  5. cd (项目名称)
  6. pnpm i || pnpm install
  7. pnpm dev || pnpm run dev

添加

pnpm install// 
pnpm i 包
pnpm add// -S  默认写入dependencies
pnpm add -D    // -D devDependencies
pnpm add -g    // 全局安装

移除

pnpm remove 包                            //移除
pnpm remove 包 --global  

npm 和 pnpm的区别

稍微解释一下
pnpm的原理在于不会傻瓜式的无脑存储相应的副本,而是进行差异文件的比对,只会增加变化了的文件,相当于这些多个项目相同的部分共享一个版本依赖。这样的话,硬盘空间可以得到大量的缩减,同时加快了安装速度。
简单点就是pnpm比npm加载速度快很多很多

npm

npm 会出现幽灵依赖依赖分身问题

幽灵依赖

幽灵依赖在npm@3.x版本中就已经出现了,因为有了提升的特性假设项目中没有package.json中显性声明安装D@1.0.0,但是npm已经将他提升到根部,此时在项目中引用D并进行使用是不会报错的。但是由于我们没有显性声明假如一旦依赖A不再依赖D或者版本有变化那么此时install代码就会因为找不到依赖而报错!!!

依赖分身
// 项目的根node_modules
node_modules
     A
     B
     C
           node_modules
                  D@2.0.0
     D(@1.0.0

比如我们A,B引用的是D@1.0.0,而C,E引用的是D@2.0.0,项目中D@1.0.0已经被依赖提升到顶部了,那么C,E的node_modules中均会有 D@2.0.0 的依赖,因此他会被重复安装

pnpm

原文链接 https://www.jianshu.com/p/6c695a0692e0
pnpm 号称 performance npm,与npm的依赖提升和扁平化不同。pnpm采取了一套新的策略内容寻址储存;

还是使用上面的例子: 项目依赖了A、B、C,之后A依赖D@1.0,B依赖D@2.0,而C也依赖D@1.0,使用 pnpm 安装依赖后 node_modules 结构如下

// 项目的根node_modules
node_modules
     .pnpm
           A@1.0.0
                  node_modules
                       A => <store>/A@1.0.0
                       D => ../../D@1.0.0
           D@1.0.0
                  node_modules
                        D => <store>/D@1.0.0
           B@1.0.0
                  node_modules
                       B => <store>/B@1.0.0
                       D => ../../D@2.0.0
           C@1.0.0
                node_modules
                     C => <store>/C@1.0.0
                     D => ../../D@1.0.0
      A => .pnpm/A@1.0.0/node_modules/A
      B => .pnpm/B@1.0.0/node_modules/B
      C => .pnpm/C@1.0.0/node_modules/C

我们看到,pnpm拥有自己的.pnpm目录,他会以平铺的方式存储所有包,以依赖名加上版本号名字命名实现了版本的复用。而且他不是通过拷贝机器缓存中的依赖到项目目录下,而是通过链接的方式,这能减少空间占用

至于根目录用于项目使用的依赖,则是通过符号链接的方式,链接到它的 .pnpm 目录下的对应位置

shamefullyhosit

默认情况下,通过pnpm的node_modules你只能访问到在 package.json 文件声明的依赖,只有依赖项才能访问声明的依赖项。你可能需要需要再.npmrc文件声明了 shamefullyhost=true,他才会像npm平铺的方式,我们才能使用package.json没有显性声明的幽灵依赖。

不过事实上,pnpm的严格模式能够帮助我们避免一些低级错误。正常情况下,是不推荐使用羞耻提升的。

原文地址:https://blog.csdn.net/nanchen_J/article/details/129728030

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

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

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

发表回复

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