71 votes

Erreur de déploiement avec firebase sur npm --prefix $RESOURCE_DIR run lint

J'ai fait une nouvelle installation de firebase tools (en suivant ce guide). tutoriel ) et j'essaie de télécharger ma première fonction firebase. J'ai ce problème avec l'exemple hello-world qu'ils initialisent lorsque vous exécutez firebase init (La fonction CLI des fonctions est seulement configurée pendant le init).

Si je remplace $RESOURCE_DIR sur firebase.json avec mon dossier de fonctions, cela fonctionne, mais bien sûr, c'est une mauvaise pratique et j'aimerais trouver une méthode appropriée pour le faire. $RESOURCE_DIR remplacement qui fonctionne.

PS D:\workspace\firebase-functions> firebase deploy

    === Deploying to 'newagent-5221d'...

i  deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint
npm ERR! path D:\workspace\firebase-functions\$RESOURCE_DIR\package.json
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open 'D:\workspace\firebase-functions\$RESOURCE_DIR\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\dtlut\AppData\Roaming\npm-cache\_logs\2018-01-19T15_57_22_990Z-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code4294963238

0 votes

Pourriez-vous décrire la série exacte d'étapes que vous suivez pour reproduire ce phénomène, en commençant par le moment où vous exécutez firebase init ?

0 votes

Je l'ai essayé après avoir juste init et après avoir décommenté le code hello world. Les deux ont donné ce problème. Mais la réponse acceptée le résout.

135voto

Kamil Svoboda Points 1114

Essayez de remplacer $RESOURCE_DIR par %RESOURCE_DIR% dans votre fichier de configuration. firebase.json fichier.

Solution multiplateforme

Comme vu sur ce poste résumons la configuration pour les différentes plateformes sur lesquelles vous travaillez :

Linux

"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]

PowerShell

"predeploy": [
"npm --prefix $Env:RESOURCE_DIR run lint"
]

Cmd.exe

"predeploy": [
"npm --prefix %RESOURCE_DIR% run lint"
]

0 votes

@DaanLuttik Utilisez-vous Windows ?

0 votes

Oui, j'utilise Windows

11 votes

Notez qu'il s'agit d'une solution de contournement, pas d'une solution. Cela ne sera pas utile pour les équipes qui travaillent sur plusieurs plateformes, car elles devront chacune maintenir leur propre copie d'un fichier qui appartient normalement au contrôle de source. J'ai soulevé ce problème en interne avec l'équipe Firebase, et les choses peuvent changer ici à l'avenir.

55voto

Neo Points 382

Il veut lint vos fonctions de nuage, ce qui signifie qu'il vérifiera votre code à la recherche d'erreurs évidentes, comme un langage compilé le ferait au moment de la compilation.

Ce n'est pas nécessaire, vous pouvez toujours le supprimer en allant dans firebase.json et en mettant à jour functions.predeploy pour qu'il soit un tableau vide.

  "functions": {
    "predeploy": [],
    "source": "functions" 
  }

Qu'est-ce que le "linting" ?

0 votes

J'ai essayé tous les remplacements ci-dessus, mais parfois, une erreur s'est produite lors du déploiement de fonctions uniques sans remplacement de la fonction existante. firebase.json J'ai remplacé tous les codes par ceci>>>>. {} ça a marché pour moi,

0 votes

Le peluchage est là pour une raison. Elle peut réduire le risque de code bogué entraînant des factures élevées (boucles infinies, promesses non résolues,...). La solution d'Inzamam Malik me semble plus appropriée.

0 votes

Merci ! La suppression de la commande predeploy a fonctionné.

35voto

Inzamam Malik Points 777

Vous pouvez simplement faire votre fichier firebase.json comme ceci :

{
  "functions": {
    "predeploy": [
      "npm --prefix ./functions/ run lint",
      "npm --prefix ./functions/ run build"
    ]
  }
}

Ce que je fais, c'est remplacer $RESOURCE_DIR par le chemin du dossier de la fonction codé en dur. cela fonctionne bien pour moi

1 votes

Il faut souligner que mon firebase.json ne contenait que la première ligne ( ... lint", mais en remplaçant \"$RESOURCE_DIR\" avec ./functions/ dans cette ligne a résolu le problème de toute façon.

1 votes

C'est très utile

13voto

Cutoutcow Points 81

RÉSUMÉ

  1. Installer ESLint localement pour ajouter "devDependencies" à paquet.json . Exécuter :

     `npm install eslint --save-dev`
  2. Solution de contournement pour Windows comme indiqué ci-dessus. Changez firebase.json :

     `npm --prefix $RESOURCE_DIR run lint` to `npm --prefix %RESOURCE_DIR% run lint`
  3. En option, ajoutez ce qui suit à paquet.json :

     "scripts": { "lint": "eslint"} or "scripts": { "lint": "eslint.js"}

6voto

Aishik kirtaniya Points 107

Localisez le fichier firebase.json et changez ces lignes

"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"

à

"npm --prefix \"%RESOURCE_DIR%\" run lint",
"npm --prefix \"%RESOURCE_DIR%\" run build"

ça va marcher

1 votes

Cela a marché pour moi aussi mais je ne comprends pas pourquoi cela fonctionne. Veuillez m'expliquer.

0 votes

En fait, sous Windows, le symbole '$' n'est pas compris, il est uniquement destiné aux systèmes linux, mais Windows comprend le symbole '%'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X