共计 1248 个字符,预计需要花费 4 分钟才能阅读完成。
Nodejs 的 patch-package 是什么,作用是什么
定义:patch-package 是一个用来给其他 npm 包打补丁的包。
在 Nodejs 项目中必然会用到第三方库,但这些库在特定场景下有个 bug 或者很久没有更新以后一些场景不适应,严重影响项目的进度,重写又代价太大,只有修改这个库的源码才能解决。在开发蜂巢指纹浏览器 (NestBrowser) 的时候不可避免遇到这种问题。
遇到第三方库有 bug 一般的会采用如下的解决方案:
方案一:找到库的原作者或者组织,提 issue 或者 pr 修改;
方案二:下载该库的源码到本地,放在 src 目录,修改后手动引入
方案三:fork 该库的代码到自己仓库,修改后,从自己仓库安装这个插件
这三种方案都比较暴力以及繁琐,尤其多次修改以后同步相当麻烦。于是又有大神提供了通过 patch-package 打补丁的方案来丝滑的修改第三方库。
在开发蜂巢指纹浏览器 (NestBrowser) 的时候,这三个方法都试过,最让人遥遥无期的是方案一
Nodejs 的 patch-package 怎么实现的
源码:GitHub – ds300/patch-package: Fix broken node modules instantly 🏃🏽♀️💨
开发语言:Typescript
实现原理:对第三方库的修改都记录在一个 patches 文件中,这个 patched 的生成解析就是项目的核心。
1、patches 文件的生成:在第三方模块临时目录生成 package.json,下载依赖,生成一个 commit,然后把改动的代码复制过去,两者做 gif diff 生成 patches 文件。
2、patches 文件的应用:patch-package 自己实现了对 patches 文件的解析,根据解析结果不同做类型做不同的文件操作就可以了。
Nodejs 的 patch-package 优势是什么,劣势是什么
优势:
1、patch-package 能实现 patch 第三方库的前提下,增加了一些辅助又必要的功能,比如第三方包的版本升级了怎么办,你会发现如果你装的包版本和你之前生成的补丁中记录的版本不一样,npx patch-package 会直接报错:‘ERROR Failed to apply patch for package xxxx at path’,另外使用 git diff 来记录补丁比起重写一份源码的方法更节省空间,即安全,又便捷。
劣势:
1、又要加多两个第三方包。不过这两个包只应用于开发环境。
蜂巢指纹浏览器 (NestBrowser) 中多个第三方库的修改最后都使用 patch-package,极少数使用的 fork 新开发库的方式
最后再附上一个 patch-package 最简使用案例:patch-package 给依赖打补丁实例详解_银鞍照白马的博客 -CSDN 博客
原文地址: Nodejs 的 patch-package 是什么,作用是什么,怎么实现的,优势是什么,劣势是什么