2016-12-29 20 views
19

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

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

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

我该怎么做,我的想法很好?基本上,一些建议,如果它使所有和一些链接到一篇文章将帮助我足够。谢谢。

回答

6

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

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


您可以使用发电机,如yeoman。您可以为yeoman创建自己的模板并维护模板。 通过这种方式,每次创建新网站时,您唯一需要做的就是使用您的模板调用yo,并在必要时为其提供一些选项,并让事情顺利进行。


当谈到在一次使用上游VonC has given与派生一个很好的方法来更新您的所有项目。


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

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

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

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


最后,如果你的脚手架是非常通用的没有什么可以阻止您创建一个模块,将所需的文件和选项填入您的项目。

在项目的package.jsondependencies您可以添加:

"my-scaffold": "git+ssh://[email protected]:user/repo.git#ref" 

然后在支架的package.json你可以在安装运行在部署script

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

每一次你建立你的项目,你可能然后检查当前部署的版本与安装在node_modules中的版本,并重新运行部署脚本以更新项目中需要的脚本。

干杯!

11

“每次我改变一些核心功能或补充一点,我想在其他项目的东西太多,我想以某种方式将其推到devstack回购。”

推到devstack回购(你已付出了所有项目的原之一)是一个良好的开端,但它不会神奇地“传播”新功能把所有其他的回购。

然而,你可以采取triangular workflow的优势:

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

  • 叉(见 “Fork a Repo”)回购devstack(也就是你已经做了你的项目)
  • 克隆对于给定项目本地分叉,

    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 
相关问题