如何為開源Nodejs庫patch代碼
以開源項目 graphql-js 舉例,原項目不支持在語法樹(AST)中獲取父節點,
對其改動有兩種做法
- fork并維護獨立分支:優點是自由度大,初期項目需求可以迅速實現;缺點是后期維護成本高
- patch代碼以滿足當前需求:優點是后期維護成本低,可以由社區支持項目不斷改善;缺點項目進度被上游merge代碼的速度阻礙 </ul>
本文提供方案來解決patch代碼時因為被上游阻礙影響項目開發進度的問題。
patch
修改代碼并 提交PR
發布
不應該修改內網npm鏡像中的同名包,而應該在scope域下發patch包
修改 package.json ,增加scope并發布
{
"name": "@scope/graphql",
...
}
熱替換
業務項目中的依賴包本身可能就會依賴需要被patch的包,例如項目同時依賴了 graphql-js 和 express-graphql ,而 express-graphql 又依賴了 graphql-js 。我們除了需要直接在項目中使用 @scope/graphql ,還需要為所有依賴包做相同的改動,通過熱替換可以解決這個問題。
在業務項目中增加patch包依賴
{
...
"dependencies": {
"@scope/graphql": "^0.4.14",
...
}
...
}
在項目入口熱替換需要patch的包
// package alias
// patch https://github.com/graphql/graphql-js/pull/273
require('@scope/graphql') // prime cache
require.cache[require.resolve('graphql')] = require.cache[require.resolve('@scope/graphql')]
</article> 來自: https://cattail.me/tech/2016/01/11/how-to-patch-nodejs-module.html
</code></code></code> 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!