| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

如何为开源Nodejs库patch代码

以开源项目 graphql-js 举例,原项目不支持在语法树(AST)中获取父节点,

对其改动有两种做法

  • fork并维护独立分支:优点是自由度大,初期项目需求可以迅速实现;缺点是后期维护成本高
  • patch代码以满足当前需求:优点是后期维护成本低,可以由社区支持项目不断改善;缺点项目进度被上游merge代码的速度阻碍

本文提供方案来解决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')]

来自: https://cattail.me/tech/2016/01/11/how-to-patch-nodejs-module.html

</code></code></code>

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!