从GitHub安装Node.js应用程序而不安装到node_modules

时间:2016-02-17 16:00:01

标签: node.js git github npm

我正在尝试设置我们的Node.js服务器应用程序,这样我们就可以在GitHub上推送/发布时自动更新应用程序。目前,该应用程序的一部分提供了一个侦听GitHub事件的服务器,并将从GitHub获取新版本并替换当前版本,使用recluster在安装新版本时重新启动主服务器应用程序。我遇到的问题是,我认为我可以使用带有GitHub URL的npm install来下载新版本及其依赖项。问题是应用程序被下载到node_modules的子目录中,因此它与其他模块一起安装,而不是在根目录中安装,就像您通常拥有Node.js应用程序一样。即,而不是通常的:

/
|-index.js (the main server app)
|-deploy.js (the wrapper which runs index.js using recluster and listens for GitHub webhooks to update the app)
|-package.json
|-node_modules/
    |-module1
    |-module2
    |-etc.

执行 npm install git://github.com/user/repo 安装应用程序如下:

/
|-node_modules/
    |-app_name/
    |     |-index.js
    |     |-deploy.js
    |     |-package.json
    |-module1
    |-module2
    |-etc

获得我想要的正确方法是什么?即从GitHub安装/更新Node.js应用程序。对于更新,deploy.js当前设置为将最新提交的npm install命令运行到临时文件夹中,然后成功时删除当前文件夹中的代码并从临时文件夹中复制新代码。我也不确定这是否是最好的方法,所以这里的任何指针都会很好。

1 个答案:

答案 0 :(得分:0)

我可能会选择git pull && npm update方法。 npm install git://github.com/user/repo每次都可能从头开始获取源代码及其所有依赖项。另一方面,git pull && npm update将仅获取对代码所做的更改,并将安装/更新已更改的依赖项。因此,它似乎是一种更有效的自我更新方式,并且您不会遇到node_modules子目录问题。

您可以查看hubot自我更新的方式,了解如何操作:https://github.com/github/hubot-scripts/blob/master/src/scripts/update.coffee

然而,这种方法的一个缺点是,如果你推送一个有缺陷的更新,并且服务器在自我更新后无法启动,它将停留在该版本,因为它将无法自我更新。