【问题标题】:Sane approach to build and deploy typescript/node.js application构建和部署 typescript/node.js 应用程序的合理方法
【发布时间】:2016-06-28 11:03:18
【问题描述】:

我正在开发用 Typescript 编写的 node.js 应用程序,这意味着它需要在运行之前编译为 JS。因为我来自 java/jvm 背景,您将预构建的包发送到服务器并在那里运行,所以我有点害怕将代码推送到 git 的部署方式,然后它首先在服务器上构建/编译跑。

我不喜欢它有两个主要原因:

  • 需要在服务器上安装开发依赖项
  • 部署取决于外部资源可用性(npm 等)。

我发现 NAR https://github.com/h2non/nar 这或多或少是我想要的,但它有一些缺点(不适用于某些具有本机扩展的部门)。

我的问题是:除了服务器上 npm installtsc 的这种危险组合之外,还有其他“理智”的方式来部署 node.js 吗?还是我应该让它沉入其中并那样做?

老实说,我不相信没有更多理智/可靠的选择。

【问题讨论】:

  • 好的,现在在我看来,Dockerizing 这样的应用程序可能是一种选择。你怎么看?有人试过吗?

标签: javascript node.js deployment typescript


【解决方案1】:

您可以做的(但可能还有其他完全有效的方法)是在本地(或在 CI 服务上)构建您的项目,并且仅在您认为它有效(测试等)时部署此构建版本。

这样,如果发生了一些不好的事情,例如 npm 失败或编译错误,您无需部署任何东西,并且您有时间解决问题。

例如,我曾经有一个 gulp 任务(但它可以是其他任何东西:Grunt,一个简单的 npm 脚本......)克隆一个 production 存储库并将项目构建到这个目录中.

这样,我可以检查我的构建是否有效。如果是这样,我会进行新的提交并将其推送到 production 存储库,这将按照您需要的方式提供(例如在 Heroku 实例上)。

优点

  • 明确区分开发和非开发依赖项
  • 仅当您知道构建有效时才进行部署
  • 开发存储库中的源代码管理中没有构建文件
  • 不“实时”依赖外部任务,例如 npm installtsc build

缺点

  • 您有两个独立的 git 存储库(一个包含源代码,一个包含项目的构建版本)
  • 制作过程比简单地提交master要重一些
  • (来自评论) 不能正确处理依赖必须(重新)构建的本机扩展的 npm 包的情况

【讨论】:

  • 是的,这就是我正在考虑的(理想情况下)但是有一些边缘情况,比如本机模块扩展(比如我在 node_modules 中的一个依赖项有一些本机扩展),我应该在产品服务器上“重建”。这也正是提到的 NAR 工具所做的(但有一些问题)你的 production 存储库中有什么?您说您将应用程序构建到此中。啊,我明白了,您也将构建的版本保存在 Git 中。
  • 确实,它不包括原生扩展的情况。没想到,我将它添加到cons列表中。
【解决方案2】:

除了 npm install 和 tsc 在服务器上的这种危险组合之外,还有其他“理智”的方式来部署 node.js 吗

package.json + npm install + tsc 是这样做的方法。没有什么风险。

更多

只需使用 npm script : https://github.com/TypeStrong/ntypescript#npm-scripts

【讨论】:

  • 我正在使用npm script,但这不是问题。你听说过不太老的左垫问题吗?像这样的故事是我关心的问题之一,其他的则是例如。 npm 关闭等。我知道,您发布的组合似乎是非常受欢迎的解决方案,但它对我来说感觉不够“安全”,我正在寻找替代方案。正如我在直接评论中提到的,Docker 可能是这里的一种解决方案——准备好使用所有依赖项的预构建容器。会试一试
  • @MichalOstruszka Docker 绝对是一种安全的方法。如果您有一个不错的结果,请随时分享并回答您自己的问题。
猜你喜欢
  • 2012-09-21
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多