【问题标题】:Installing a Node.js app from GitHub without installing to node_modules从 GitHub 安装 Node.js 应用程序而不安装到 node_modules
【发布时间】:2016-05-29 10:51:38
【问题描述】:

我正在尝试设置我们的 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

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

【问题讨论】:

  • 您查看过 PM2 部署功能吗?我做了很多你想做的事情
  • 这是一个功能请求,但尚未实现 npm download package-namegit cloneapt-get github.com/npm/npm/issues/3597

标签: node.js git github npm


【解决方案1】:

我可能会选择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

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

【讨论】:

  • 谢谢 - 我基本上采用了这种方法(除了 git fetch,git checkout 而不是直接的 git pull,这样我就可以确保得到通知所涉及的确切提交)。
猜你喜欢
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
相关资源
最近更新 更多