在Heroku评论应用后部署步骤中使用NodeJS开发依赖项

时间:2020-04-03 07:39:41

标签: node.js typescript heroku dependencies heroku-review-app

我在Heroku上托管了一个(演示)应用程序。我已启用Heroku的“审阅应用程序”功能来启动新实例以进行拉取请求审阅。这些评论实例都通过Heroku的附加系统为其提供了一个新的MongoDB(在mLab上)。效果很好。

在我的存储库中,我定义了一些种子脚本,以快速启动并运行测试数据库。运行yarn seed(或npm run seed)将用测试数据填充数据库。这在开发过程中效果很好,并且对于评论应用程序也是完美的。我想在Heroku评论应用的postdeploy钩子中执行seeder命令,可以通过在environment.review文件的app.json部分下指定它来完成。像这样:

{
  "name": "...",
  "addons": [
    "mongolab:sandbox"
  ],
  "environments": {
    "review": {
      "addons": [
        "mongolab"
      ],
      "scripts": {
        "postdeploy": "npm run seed"
      }
    }
  }
}

问题在于,种子脚本依赖于某些仅用于开发的依赖项(fakerts-node [这是一个TypeScript项目]和mongo-seeding)来执行。而且这些依赖项在Heroku应用程序的postdeploy阶段不可用。

我也不认为在常规构建步骤中“编译”打字稿是最好的主意。该种子脚本仅用于开发(和审阅应用程序)中。此外,我不确定是否可以解决缺少faker之类的依赖项的问题。

该如何处理?我有什么花招吗?

我可以跳过Heroku主动删除开发依赖项的步骤吗?但仅适用于评论应用程序吗?甚至更好的是,我是否可以仅将我需要的两个依赖项“排除”,并且仅针对评论应用程序?

1 个答案:

答案 0 :(得分:1)

Heroku docs表示当NODE_ENV变量包含"production"以外的任何内容时,devDependencies将不会在构建步骤后删除。

要确保仅在Heroku评论应用程序中发生这种情况,可以在app.json文件的NODE_ENV部分下设置environments.review变量。以下配置应该可以解决问题:

{
  "name": "...",
  "addons": [
    "mongolab"
  ],
  "environments": {
    "review": {
      "addons": [
        "mongolab:sandbox"
      ],
      "env": {
        "NODE_ENV": "development"
      },
      "scripts": {
        "postdeploy": "npm run seed"
      }
    }
  }
}