制作我自己的框架并将其用作项目的上游

时间:2016-12-29 03:56:03

标签: git open-source

我是一名为客户制作网站的自由撰稿人。我有自己的基于React和Node的devstack。目前,当我开发一个新网站时,我只是复制我编写的最后一个项目并修改路由,页面等。当我添加一些新功能(更新webpack 1到2等等)时,我必须在每个项目中手动完成(或者我根本不做)。

我想对此采取更专业的方法。你能向我推荐一些材料或态度吗?

我目前的目标是:使用我的devstack(框架)拥有一个repo(私有github并在验证后公开)。每次我开始一个新项目时,我都会将它分叉(以便它保持为上游原点)并开始开发。每当我改变一些核心功能或添加我想要在其他项目中的东西时,我想以某种方式将其推送到devstack repo。我也可以手动将此代码复制到devstack,但我不想写两次,所以更好的方法会有所帮助。

我怎么能这样做,我的想法好吗?基本上,一些建议,如果它完全有意义,一些文章的链接将帮助我。谢谢。

2 个答案:

答案 0 :(得分:12)

  

“每当我更改某些核心功能或添加我想要在其他项目中添加的内容时,我想以某种方式将其推送到devstack repo。”

推送到devstack仓库(您为所有项目分配的原始仓库)是一个很好的第一步,但它不会神奇地将新功能“传播”到您的所有其他仓库。

但是,您可以利用triangular workflow

https://i.stack.imgur.com/Lx7do.png

  • fork(参见“Fork a Repo”)回购devstack(这就是你为项目做的事情)
  • 为本地项目克隆该fork,

    git clone /url/my/fork myfork
    
  • 添加原始仓库的远程upstream

    cd myfork
    git remote add upstream /url/to/devstack
    

从那里,使用git 2.9 or more,配置:

git config --global pull.rebase true
git config --global rebase.autoStash true

最后,每当您想要更新其中一个仓库以从推送到devstack的功能中受益时:

cd /path/to/one/of/mine/projects
git checkout mybranch
git fetch upstream
git rebase upstream/master

答案 1 :(得分:6)

这有多种方法,它们都取决于你的脚手架代码有多少被重复使用,修改或丢弃。

如果您的代码非常通用并且允许自定义而无需触及脚手架代码,那么我真的会推荐最后一个策略。

您可以使用yeoman之类的生成器。您可以为yeoman创建自己的模板并维护模板。 这样,每次创建新网站时,您唯一需要做的就是使用模板调用yo,必要时提供一些选项,然后就可以了。

使用上游VonC has given一个好的分叉方法,一次更新所有项目。

如果你想完全避免分叉并且你能够模块化你的脚手架,你可以使用git submodules

使用git子模块,您可以将“框架”代码与客户端代码分开。有多种策略。

这在很大程度上取决于您的设置,但一种策略是为每个具有预定义结构的客户端创建一个存储库,并将您的脚手架添加为子模块。

查看有关子模块和子存储库的this question

最后,如果您的脚手架非常通用,则无法阻止您创建一个模块,该模块将使用所需的文件和选项填充您的项目。

在您的项目package.json dependencies中,您可以添加:

"my-scaffold": "git+ssh://git@gitlab.com:user/repo.git#ref"

然后在您的脚手架package.json中,您可以在安装时运行部署script

"scripts": {
  "install" : "node tools/deploy.js"
}

每次构建项目时,您都可以检查当前部署的版本与node_modules中安装的版本,然后重新运行部署脚本以更新项目中所需的脚本。

喝彩!