1. ホーム
  2. javascript

[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる

2021-12-29 04:17:13

質問内容

私はNodeJSを学んでおり、私が従っているコースにはいくつかのプロジェクトがあり、セクションごとに配置されています。私はすべてのプロジェクトを1つのメインフォルダの下に持っています。 ギットリポジトリ .

メインフォルダー内のこれらのサブフォルダーは、それ自体が1つのノード・プロジェクトであり、その中には package.json と関連する依存関係は node_modules . 問題は、そのようなフォルダの1つにノードアプリをプッシュしようとしたときです ( todo-api ) をherokuに送信すると、以下のエラーが発生します。

remote: Compressing source files... done.
remote: Building source:
remote: 
remote:  !     No default language could be detected for this app.
remote:                         HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote:                         See https://devcenter.heroku.com/articles/buildpacks
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !       Push rejected to agile-forest-32749.
remote: 
To https://git.heroku.com/agile-forest-32749.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/agile-forest-32749.git'

これは、プロジェクトのディレクトリ構造です。

をリファクタリングすることにしました。 todo-api サブフォルダを新しいプロジェクトとして独立させると、今度はHerokuへのプッシュがうまくいくようになりました -。

特にノードアプリはどちらの場所でも全く同じなのに、なぜ "デフォルト言語がありません" というエラーが発生するのか理解できません。何か考えがありますか?

解決方法を教えてください。

Herokuにはデフォルトのビルドパックのセットがあり、アプリの言語を検出する必要があるときに使用します。
その検出を行うために bin/detect コマンドを実行し、いずれかのビルドパックが終了コード 0 を返すまで、デフォルトのビルドパックを実行します。

これは、ノードビルドパック用のコマンドです。 .
ご覧のように、このプログラムでは package.json は、サブフォルダーではなく、アプリのルートに配置する必要があります。

これがビルドを失敗させる原因となっています。アプリはgitリポジトリのルートに置く必要があります。