私はNodeJSを学習しています。私がフォローしているコースには、セクションごとに整理されたいくつかのプロジェクトがあります。すべてのプロジェクトが1つのメインフォルダーの下にあります。これも gitリポジトリ です。
メインフォルダー内のこれらの各サブフォルダーは、それ自体がノードプロジェクトであり、package.json
およびnode_modules
の関連する依存関係を備えています。問題は、そのようなフォルダー(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
サブフォルダーをそれ自体で新しいプロジェクトにリファクタリングすることを決めました、そして今回はPush to Herokuがうまく機能します-
特にノードアプリが両方の場所でまったく同じである場合に、「no default language」エラーが発生する理由がわかりません。何かご意見は?
Herokuには一連のデフォルトのビルドパックがあり、アプリの言語を検出する必要がある場合に使用されます。
その検出を行うために、それらのいずれかが0の終了コードを返すまで、これらのデフォルトのビルドパックのそれぞれのbin/detect
コマンドを実行します。
これはノードビルドパックのコマンドです 。
ご覧のとおり、package.json
は、サブフォルダーではなくアプリのルートに配置する必要があります。
これが、ビルドが失敗する原因となる違いです。アプリをgitリポジトリのルートに配置する必要があります。
私の場合、GitHubリポジトリがfrontend /およびbackend /フォルダーに分割されていたため、ルートフォルダーにHerokuを設定していませんでした。それぞれにpackage.jsonがありました。 Herokuはリポジトリのルートフォルダーにpackage.jsonファイルを必要とするため、言語を検出できません。
私の場合、backend /フォルダーのセカンダリGitHubリポジトリを初期化する必要がありました。バックエンドプロジェクトが個別のプロジェクトとしてGitHubにプッシュされた後、git Push heroku master
機能しました。
同じメッセージを受け取った
!このアプリのデフォルトの言語を検出できませんでした。
デプロイするときに、マスターとは別のブランチにいました。それがうまくいかなかった理由です。
私はブランチをマスターに変更し、うまくいきました。
Package.jsonのスクリプトに "start": "node app.js"を含めることを忘れないでください
そうしないと、H10コードエラーが発生します。 ここに画像の説明を入力
その後、アプリは機能しました。 ここに画像の説明を入力