3

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

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

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

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

我也不认为在常规构建步骤中“编译”打字稿是最好的主意。此播种脚本仅用于开发(和审查应用程序)。此外,我不确定这会解决缺少依赖项的问题,例如faker.

怎么办?我缺少什么技巧吗?

我可以跳过 Heroku 主动删除开发依赖项的步骤吗?但仅适用于评论应用程序?或者更好的是,我可以“排除”我需要的几个依赖项,并且只用于审查应用程序吗?

4

1 回答 1

1

Heroku 文档指出,当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"
      }
    }
  }
}
于 2020-04-04T16:20:26.133 回答