【问题标题】:continuous deployment with node/express/mongo app and typescript [closed]使用 node/express/mongo 应用程序和 typescript 进行持续部署 [关闭]
【发布时间】:2019-12-24 21:59:03
【问题描述】:

从我目前看到的情况来看,nodejs 应用程序要么通过创建一个完全静态的包(例如 angular)来部署,要么通过从 repo 中提取源并运行 npm installnpm start(通常在 express/使用 mongo)。

但是,我正在开发一个与 typescript 配对的 express/mongo 应用程序,从 repo 中提取需要在生产服务器上(再次)构建 typescript,这很丑陋,还需要有 typescript 和所有@types/*包作为生产依赖项。所以我想知道:最佳做法是什么?构建和捆绑所有必要的 (.js) 文件并将它们与 package.json 一起推送到服务器是一个好主意,这样我仍然可以运行npm install有什么更好的方法

【问题讨论】:

    标签: node.js typescript express continuous-deployment


    【解决方案1】:

    您不想在生产服务器上编译打字稿是正确的。通常,您希望在投入生产之前处理所有构建和依赖项管理。这意味着创建一个构建管道,输出一个独立的应用程序以供部署。

    典型的构建管道可能如下所示:

    npm installlintbuildbundle *.js and node_modulesdeploy

    这样的设置将安装依赖项、linting 和构建到管道隔离开来。只有*.js 文件、已安装的node_modules 目录和package.json(如果它包含启动脚本)实际被部署。

    可以手动完成构建管道,方法是运行构建脚本并将输出复制到生产服务器。但是,更好的方法是使用众多可用的构建自动化解决方案之一,例如 Jenkins、Travis CI 或 GitLab CI。

    【讨论】:

    • 嗯,这听起来是非常明显的方式,但没有节点模块必须构建在目标系统上,例如因为它们依赖于本机代码或某些环境设置?我认为这就是为什么有这么多教程的重点,其中部署管道只是检查 git 并运行 npm install...
    • 对。如果您正在编译本机代码(想到 node-gyp),您需要确保它在您的构建环境和生产环境之间兼容。确保兼容性可能很棘手,具体取决于您的代码具有的环境依赖项。以node-gyp为例,操作系统和架构必须相同。容器化可以帮助管理复杂的环境依赖关系。您仍然希望拥有一个单独的构建和生产环境。您不想在生产环境中编译。
    • 好的。所以我知道你会创建一个相同的构建环境(例如在容器的帮助下),以确保复制 node_modules 不会破坏任何东西。只是为了完整性:相同的部分必须有多远?是否有依赖于已安装程序的模块,例如mongoose 模块能否在没有 mongoDB 的环境中正确安装,然后转移到安装了 mongoDB 的生产环境中?
    • 通常,当您有必须编译的模块(node-gyp)时,您只需要担心环境兼容性。 Mongoose 库绝对可以在构建环境中不存在 mongoDB 的情况下安装。根据您的依赖关系,您可能可以不使用容器,尽管它们除了标准化环境之外还有其他用途。
    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多