热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是--pnp纱?

如何解决《什么是--pnp纱?》经验,为你挑选了1个好方法。

有一个称为Plug'n'Play的新的亮纱功能。

我想知道它到底是做什么的?

我知道它正在创建一个.pnp文件夹和一个.pnp.js文件,但是它会更改计算机上的其他任何内容,例如某个地方的配置文件吗?

谢谢。



1> Maël Nison..:

我设计并实现了PnP,所以我可以聊几个小时

tl; dr:我们只写.pnp.js.pnp文件夹(在常规Yarn缓存的顶部)。我们不会在其他任何地方存储配置。


没有即插即用

当您运行时yarn install(即使没有PnP),也会发生一些事情:

    如果您使用脱机镜像功能,我们将从注册表中下载tarball并将其存储在脱机镜像文件夹中

    无论您是否使用脱机镜像,我们都将解压缩所有下载的tarball并将其文件存储在Yarn缓存中

    然后,我们确定应将缓存中的哪些文件复制到文件中的哪个位置 node_modules

    我们应用计算出的更改(rsync基本上是一堆操作)


使用即插即用

使用PnP,工作流程如下:

    无需更改,我们从离线镜像的注册表中下载tarball(如果已启用)

    无需更改,我们仍将其解压缩到Yarn缓存中

    我们生成一个文件.pnp.js¹

就是这样。除了.pnp.js文件(和缓存,没有其他生成的文件)之外,没有其他生成的文件。


¹ 如您所述,我们还在项目中生成了一个.pnp文件夹(.yarn从Yarn 2开始)。该文件夹旨在包含两种类型的数据:

拔出的软件包是必须在项目本地的软件包。通常,这些是带有安装后脚本的软件包(我们无法将它们存储到缓存中,因为生成的工件可能与一个项目不同。

虚拟包,这是为您的依赖关系树中的每个包创建的符号链接,列出了对等依赖项。无需赘述,它们是设计的必要部分,并且需要require.resolve像以前一样进行工作。从Yarn 2开始,这些文件不再存在


它是如何工作的?

.pnp.js文件包含与以下内容类似的信息:

webpack@1.0.0 -> /cache/webpack-1.0.0/
              -> it depends on lodash@1.0.0

lodash@1.0.0  -> /cache/lodash-1.0.0/
              -> no dependencies

通过获取这些信息,分辨率可以正确地推断出,当其中的文件/cache/webpack-1.0.0对进行require调用时lodash,必须从中加载所需的文件/cache/lodash-1.0.0。实际上,它有点复杂(我们保留了一个逆映射以提高性能,我们使用相对路径来确保可移植性,等等),但是这里有一个基本概念。


奖励回合:使用即插即用+压缩加载(纱线2)

奖励:使用Yarn 2,我们将进一步改善此工作流程。它将是这样的:

    我们从注册表中下载tarball,然后将其存储到缓存中(脱机镜像和缓存之间没有更多区别-它们是相同的)

    我们生成与.pnp.js以前相同的文件

就是这样!如您所见,我们不再对软件包进行解压缩(相反,我们在运行时使用Node loader从软件包档案中读取它们)。

这样做有一个非常有趣的属性:如果缓存和.pnp.js文件都在其中,则无需运行即可运行yarn install应用程序!为了确保拥有这些文件,您只需要将它们添加到存储库中,然后像对待其他所有内容一样对它们进行版本控制即可。²

这非常有用,因为您无需记住yarn installgit rebase,,git pull或之后运行git checkout,并且CI系统不需要特殊的设置即可变得更快,更稳定-只需克隆您的应用程序即可使用。


² 在有人提到它之前,在存储库中检入二进制文件是完全可以的。node_modules在存储库中检入非常不好的原因是由于文本文件的数量成倍增加,这给Git带来了极大的压力-从技术上讲,从哲学上讲,由于无法进行代码审查。

在我描述的情况下,我们不会遇到相同的问题,因为文件的数量受到限制(每个程序包一个文件),并且查看它们非常容易-实际上,最好能清楚地看到公关将许多新软件包添加到您的项目中!


推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
author-avatar
海蓝透了我的心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有