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

Making my own framework and using it as an upstream for projects

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

我想要更专业的方法来解决这个问题。你能给我推荐一些材料或对它的态度吗?

我目前的目标是:使用我的开发堆栈(框架)创建一个回购协议(私有 github,并在验证后给予它 public)。每次我开始一个新项目时,我都会分叉它(以便它保持在上游来源)并开始开发。每次我更改一些核心功能或添加一些我也想在其他项目中拥有的东西时,我都想以某种方式将其推送到 devstack 存储库。我也可以手动将这段代码复制到 devstack,但我不想写两次,所以更好的方法会有所帮助。

如何实现,我的想法好吗?基本上,一些建议(如果它有意义的话)和一些 link 对文章的帮助就足够了。谢谢。

"Everytime I change some core functionality or add something that I want to have in other projects too, I want to push it somehow to the devstack repo."

推送到 devstack 存储库(您为所有项目创建的原始存储库)是很好的第一步,但它不会神奇地 "propagate" 将新功能添加到您的所有其他存储库回购

但是,您可以利用 triangular workflow:

  • fork(参见“Fork a Repo") the repo devstack(这就是您已经为您的项目所做的)
  • 克隆给定项目的本地分支,

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

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

从那里,,配置:

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

有多种方法可以解决这个问题,它们都取决于您的脚手架代码有多少被重用、修改或丢弃。

如果您的代码非常通用并且允许在不触及脚手架代码的情况下进行自定义,我真的会在这里推荐最后一种策略。


您可以使用像 yeoman 这样的生成器。您可以为 yeoman 创建自己的模板并维护该模板。 这样,每次您创建一个新站点时,您唯一需要做的就是使用您的模板调用 yo,如有必要,为其提供一些选项,然后一切就开始了。


当谈到使用上游一次更新所有项目时 一个很好的分叉方法。


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

使用 git 子模块,您可以将 "framework" 代码与客户的代码分开。有多种策略。

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

查看有关子模块和子存储库的 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 中安装的版本,然后重新运行 部署脚本以更新您需要的脚本项目。

干杯!