J'apprends NodeJS et le cours que je suis comporte plusieurs projets, classés par sections. J'ai tous les projets dans un dossier principal, qui est aussi un dépôt git .
Chacun de ces sous-dossiers du dossier principal est un projet de noeud proprement dit, complété par package.json
et les dépendances associées dans node_modules
. Le problème est quand j'ai essayé de pousser l'application du noeud dans un tel dossier (todo-api
) à heroku, j'obtiens l'erreur suivante -
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'
Ceci est la structure de répertoire pour le projet -
J'ai décidé de restructurer le sous-dossier todo-api
dans un nouveau projet, et cette fois, Push to Heroku fonctionne parfaitement -
Je ne comprends pas pourquoi j'obtiens l'erreur "pas de langue par défaut", surtout lorsque l'application de noeud est exactement la même aux deux endroits. Des pensées?
Heroku dispose d'un ensemble de buildpacks par défaut, utilisé lorsqu'il doit détecter la langue de votre application.
Pour effectuer cette détection, il exécute la commande bin/detect
de chacun de ces buildpacks par défaut, jusqu'à ce que l'un d'eux retourne un code de sortie égal à 0.
Ceci est la commande pour le noeud buildpack .
Comme vous pouvez le constater, un package.json
doit se trouver à la racine de votre application, pas dans un sous-dossier.
C'est la différence qui fait que votre build échoue. Vous devez mettre votre application à la racine de votre référentiel git.
Dans mon cas, Heroku n’était pas configuré dans le dossier racine, car mon référentiel GitHub avait été divisé en dossiers frontend/et backend/. Chacun d'entre eux avait un package.json . Étant donné que Heroku a besoin du fichier package.json situé dans le dossier racine du référentiel, il ne peut pas détecter la langue.
Dans mon cas, je devais initialiser un référentiel GitHub secondaire dans le dossier backend/. Une fois que le projet principal a été placé dans GitHub en tant que projet séparé, git Push heroku master
a fonctionné.