Node.js (git)将更改推送到开发服务器并使其自动重新启动节点应用程序的最佳方法?

Node.js (git)将更改推送到开发服务器并使其自动重新启动节点应用程序的最佳方法?,node.js,git,Node.js,Git,以前,在我的本地机器上,我一直在使用nodemon,它监视对节点应用程序所做的更改,并在每次更改时重新加载它。但是在我自己的机器上运行开发服务器不再可行,所以我已经在指定的开发服务器上为应用程序设置了git 事先,我更喜欢Sublime文本,因此通过终端在开发服务器上编辑文件与我的工作流程不匹配,而且默认情况下,我喜欢在本地机器上拥有所有内容的副本。我还签出了rsync,但我喜欢git提供的细粒度版本控制 那么,我如何在本地编辑文件,git将它们推送到开发服务器,并在每次推送后自动重新加载节点应

以前,在我的本地机器上,我一直在使用
nodemon
,它监视对节点应用程序所做的更改,并在每次更改时重新加载它。但是在我自己的机器上运行开发服务器不再可行,所以我已经在指定的开发服务器上为应用程序设置了git

事先,我更喜欢Sublime文本,因此通过终端在开发服务器上编辑文件与我的工作流程不匹配,而且默认情况下,我喜欢在本地机器上拥有所有内容的副本。我还签出了
rsync
,但我喜欢git提供的细粒度版本控制


那么,我如何在本地编辑文件,
git将它们推送到开发服务器,并在每次推送后自动重新加载节点应用程序呢?

您可以编写服务器端钩子。在.git目录中有一个钩子目录。只需将cd插入到.git/hooks即可。在那里,你可以用任何需要的语言编写脚本。基本上,在推送之后,它将运行您告诉它的脚本。下面是关于git钩子的更多信息

实现此功能的快速教程:

  • 在开发服务器上,导航到
    /home/dev user/Node
    并使用
    git init--bare example.git
    /home/dev user/Node/example.git
    处初始化裸存储库

  • 使用
    git Clone example.git
    将存储库克隆到
    /home/dev user/Node/example

  • 根据需要将文件添加到
    /home/dev user/Node/example
    ,然后
    git Add.
    git commit-m“init”
    ,最后
    git push origin master
    将这些文件推送到
    example.git

  • 编辑或创建
    /home/dev user/Node/example.git/hooks/post receive
    ,并添加以下行:
    
    GIT_WORK_TREE=/home/dev user/Node/example/GIT checkout-f
    

    这将在推送到
    /home/dev user/Node/example/
    的任何更改后自动更新
    /home/dev user/Node/example.git
    中的文件

  • 如果尚未安装
    nodemon
    ,请使用
    npm install-g nodemon
    进行安装。您可能必须使用
    sudo

  • 假设您的主节点应用程序位于
    /home/dev user/Node/example/app.js
    ,使用
    nodemon/home/dev user/Node/example/app.js
    启动应用程序(或者如果您已经在
    /home/dev user/Node/example
    ,当然只需
    nodemon app.js

  • 在本地计算机上,导航到
    /home/timbur/Node
    ,并假设您能够通过SSH自动连接到服务器,使用
    git clone dev克隆裸存储库-user@dev.server.ip.address:Node/example.git
    。现在您将拥有
    /home/timbur/Node/example
    中的所有内容

  • 编辑本地计算机上的文件并像往常一样向开发服务器添加/提交/推送文件,更改将自动更新服务器的
    example
    目录,该目录将被
    nodemon
    检测并重新启动应用程序


  • 最好的方法是设置一个持续集成服务器,如Jenkins:

    还有一些插件,基本上你想做什么,比如node.js的插件:


    但这可能不是最简单的方法。您还可以在服务器上设置一个post-receive钩子,每当您推送任何更改时,它都会检查代码,然后让它重新启动服务器。以下是我找到的要点(但从未尝试过)

    谢谢!这为我指明了正确的方向,我现在已经开始工作了。你介意我编辑你的答案来准确描述我做了什么吗?正如我所预料/希望的那样,这其实很简单没问题,当然请你这么做,这可能也会对其他人有很大帮助。