将 GitHub 项目的分支发布到新的 NPM 模块,但保留与原始模块合并的选项?
Posted
技术标签:
【中文标题】将 GitHub 项目的分支发布到新的 NPM 模块,但保留与原始模块合并的选项?【英文标题】:Publish fork of GitHub project to new NPM module but keep option to merge with original? 【发布时间】:2015-08-27 23:48:51 【问题描述】:在 GitHub 和 NPM 上存在一个高质量的开源存储库,拥有广泛的用户群。
我已经分叉了该项目并进行了大量扩展。我想已经准备好合并回来了。但是(适当地)是项目所有者而不是我来打这个电话。现在已经好几个星期没有回复了。
一些用户在 repo 问题讨论中要求将其合并回来,更多用户直接与我联系以将其作为单独的项目发布到 NPM。
认真的开发人员可以通过 GitHub 获得新版本,但它只有原始源代码,而不是链接/缩小/定制版本,因为自述文件中说在合并回并增加版本号之前不要运行 make dist
。
我认为它应该像创建这个fork的一个fork并将其发布为一个新的NPM模块一样简单。但是 GitHub 不允许我这样做(“你已经在看这个项目了”)
有没有办法可以将它作为新的 NPM 模块发布,但仍保留
的选项-
我的 fork 向原始提交 pull request
我的 fork 从原始获取上游更改
我的子分支从我的分支(以及原始分支)获取上游更改
我是否在新的电子邮件地址下创建新的 GitHub 帐户?
Forking a fork of my repo in GitHub
【问题讨论】:
你不应该仅仅为了发布到 npm 而需要一个新的 fork。您可以只使用现有的 fork 并保留 2 个分支:一个发布到 npm 的“稳定”分支,以及一个不断与原始项目同步更改的工作中分支。 @user2943490 您的评论就是答案。可以将 repo 的一个分支(master
除外)发布到 npm 和 bower。
【参考方案1】:
如何分叉和修补 npm 模块
-
在 GitHub 上分叉项目。
将 fork 克隆到您的机器上
修复错误或添加您想要的功能。
将您的提交推送到您在 GitHub 上的 fork(如果您希望为原始存储库创建 PR,请使用分支)。
在 GitHub 上打开你的 fork,找到并复制你最近提交的 SHA。
打开您的 package.json
文件,并将 MODULE、USER、REPO 和 SHA 替换为 GitHub 存储库中的信息。
"MODULE": "https://github.com/USER/REPO/tarball/SHA",
例如:从this commit 获取 tarball 链接
"react-remarkable": "https://github.com/HelloKip/react-remarkable/tarball/9549e776136096b827f3a0823329ad997416e364",
运行npm i
安装模块依赖。
改编自debuggable.com 和cmwelsh.com。
【讨论】:
这对于消费前需要处理(例如通过prepublish
脚本)的包不起作用,是吗?
@iX3 - 抱歉,我不知道……但现在我很好奇。
这是一个很好的信息,但它并没有回答最初关于在使用前需要处理(转译、缩小等)包的问题。
本文介绍了如何使用postinstall
脚本编译您的分叉版本。 link.medium.com/hljD5UiRdeb
基本上这个"scripts": ... "postinstall": "cd ./node_modules/my-forked-project && npm install && npm run build"
【参考方案2】:
@user2943490 为您提供了使用分支而不是额外分叉的正确解决方案。
让我扩展此内容以回答您关于仍然能够在多个方向上推动或拉动的问题。 git 或者更确切地说它的数据结构的设计方式使得您可以始终在任意存储库之间进行推送和拉取,无论如何。即使他们从来没有共同的祖先,也没有什么区别。
是的,您可能会遇到疯狂的冲突,显然如果您尝试合并完全不相关的文件,可能会出现混乱,但仍然有可能。 Git 只关心文件的实际内容,而不关心它们是从哪里分叉的。
在您的示例中,由于您将与上游有共同的提交,因此这永远不会成为问题。
【讨论】:
以上是关于将 GitHub 项目的分支发布到新的 NPM 模块,但保留与原始模块合并的选项?的主要内容,如果未能解决你的问题,请参考以下文章