我是一名为客户制作网站的自由撰稿人。我有自己的基于React和Node的devstack。目前,当我开发一个新网站时,我只是复制我编写的最后一个项目并修改路由,页面等。当我添加一些新功能(更新webpack 1到2等等)时,我必须在每个项目中手动完成(或者我根本不做)。
我想对此采取更专业的方法。你能向我推荐一些材料或态度吗?
我目前的目标是:使用我的devstack(框架)拥有一个repo(私有github并在验证后公开)。每次我开始一个新项目时,我都会将它分叉(以便它保持为上游原点)并开始开发。每当我改变一些核心功能或添加我想要在其他项目中的东西时,我想以某种方式将其推送到devstack repo。我也可以手动将此代码复制到devstack,但我不想写两次,所以更好的方法会有所帮助。
我怎么能这样做,我的想法好吗?基本上,一些建议,如果它完全有意义,一些文章的链接将帮助我。谢谢。
答案 0 :(得分:12)
“每当我更改某些核心功能或添加我想要在其他项目中添加的内容时,我想以某种方式将其推送到
devstack
repo。”
推送到devstack
仓库(您为所有项目分配的原始仓库)是一个很好的第一步,但它不会神奇地将新功能“传播”到您的所有其他仓库。
但是,您可以利用triangular workflow:
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中安装的版本,然后重新运行部署脚本以更新项目中所需的脚本。
喝彩!