如何通过更改启动脚本将nestjs monorepo部署到heroku?

wkyowqbh  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(121)

我有一个nestjs monorepo(微服务)项目,结构如下

Project
| .git
| package.json
|
|____app 1
|
|____app 2

Git会将整个项目推送到Heroku服务器上,我的想法是根据环境变量构建并启动每个应用程序。
我的尝试是,在Heroku app1中,我已经配置了环境变量MSERVICE = APP1,在我的package.json中,启动脚本是"start": "if [[ $MSERVICE == APP1 ]];then node dist/apps/app1/main;else node dist/apps/app2/main;fi",它在我的Macbook中工作得很好。
然而,Heroku在启动时抛出错误:

> project@0.0.1 start
 > if [[ $MSERVICE == WEB ]];then node dist/apps/web/main;else node dist/apps/admin-web/main;fi
 /tmp/start-a3a234c5.sh: 1: [[: not found
 node:internal/modules/cjs/loader:959
   throw err;
   ^

我试过将此启动脚本放到一个start.sh中,并得到相同的结果。
看起来Heroku无法识别这里的bash if条件语法。这里有什么我遗漏的地方或者其他解决方案吗?

wsxa1bj1

wsxa1bj11#

做了一些头脑风暴,我发现答案其实很简单。使用bash命令eval就像一种魅力。
首先,在package.json中编辑生成和启动脚本,使其

"build": "eval nest build $BUILD",
 "start": "eval node $MSERVICE",

其次,将环境变量添加到Heroku app 1中,位置为Settings -> Config VarsBUILD: APP_1_NAMEMSERVICE: dist/apps/APP_1_NAME/main
第三步,像第二步一样设置其他Heroku微服务应用程序env变量。
这些步骤可以帮助你实现,推送一个git提交,并相应地部署Heroku上的所有微服务应用。

相关问题