- Published on
修补 npm 包已知 bug 的简单办法
当自己在开发的 JS 项目,遇到某个 npm 包里面的代码有bug,或者不满足现有需求的时候,一般情况下会怎么做?
可能大多数人都是访问 npm 包对应的 github 仓库打开一个
issues
记录错误。但这样做的问题是,维护人员可能没有时间来修复它,而开发该模块的deadline
又要到了,这个时候就需要寻求另外的方法了。另一种方法是,到 github 上
fork
npm 源代码,修复它并打开PR
。这样会把自己的更改保留在本地,直到维护者批准更改并将其与主分支合并,所以,这同样也需要那未知时间的等待。在这种情况下,最好的方法是对 npm 包依赖项进行更改,并使用
patch-package
处理修复,以下是示例:
修复一个依赖项中的错误
// node_modules/react-redux/dist/react-redux.js console.log('I am a redux patch');
安装 patch-package
npm install patch-package -D
或使用 yarn
yarn add patch-package postinstall-postinstall -D
安装处理脚本
"scripts": { "postinstall": "patch-package" }
运行 patch-package 创建 .patch 文件
npx patch-package react-redux or npx patch-package react-redux --yarn
patch 文件内容如下:
diff --git a/node_modules/react-redux/dist/react-redux.js b/node_modules/react-redux/dist/react-redux.js index c56d7f2..3a2b1e2 100644 --- a/node_modules/react-redux/dist/react-redux.js +++ b/node_modules/react-redux/dist/react-redux.js @@ -27,6 +27,8 @@ var hasSymbol = typeof Symbol === 'function' && Symbol.for; + console.log('I am a redux patch'); + var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
通过 npm 包管理器处理修复
npm install or yarn install
提交 patches 文件夹里的代码
完毕