我在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"
}
}
}
}
问题在于,种子脚本依赖于某些仅用于开发的依赖项(faker
,ts-node
[这是一个TypeScript项目]和mongo-seeding
)来执行。而且这些依赖项在Heroku应用程序的postdeploy
阶段不可用。
我也不认为在常规构建步骤中“编译”打字稿是最好的主意。该种子脚本仅用于开发(和审阅应用程序)中。此外,我不确定是否可以解决缺少faker
之类的依赖项的问题。
该如何处理?我有什么花招吗?
我可以跳过Heroku主动删除开发依赖项的步骤吗?但仅适用于评论应用程序吗?甚至更好的是,我是否可以仅将我需要的两个依赖项“排除”,并且仅针对评论应用程序?
答案 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"
}
}
}
}