ESLint error while trying to deploy firebase functions
Asked Answered
F

8

45

I tried deploying a firebase functions but it keeps failing due to some issue with ESLint. I have also tried googling the answer but everything I am seeing is all Greek to me.

I have also stumbled on this and this answer but it appears they're not applicable to my scenario.

My Function

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
//  response.send("Hello from Firebase!");
// });


//import firebase functions modules
const functions = require("firebase-functions");
//import admin module
const admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);

// Listens for new messages added to messages/:pushId
exports.pushNotification = functions.database.ref("/Message").onWrite( event => {
    //  Grab the current value of what was written to the Realtime Database.
    var valueObject = event.data.val();
    // Log the event
    console.log("Push notification event triggered for " + valueObject.title);

    //if(valueObject.title != null) {
      //valueObject.photoUrl= "Sent you a photo!";
   // }

  // Create a notification
    const payload = {
        data: {
            body:valueObject.body,
            imgUrl: valueObject.imgUrl,
            postUrl: valueObject.postUrl,
            title: valueObject.title
        },
    };

  //Create an options object that contains the time to live for the notification and the priority
    const options = {
        priority: "high",
        timeToLive: 60 * 60 * 24
    };


    return admin.messaging().sendToTopic("Posts", payload, options);
});

Log

0 info it worked if it ends with ok
1 verbose cli [ '/home/xoxo/.nvm/versions/node/v9.5.0/bin/node',
1 verbose cli   '/home/xoxo/.nvm/versions/node/v9.5.0/bin/npm',
1 verbose cli   '--prefix',
1 verbose cli   '/home/xoxo/Android/Projects/FirebaseFunctions/functions',
1 verbose cli   'run',
1 verbose cli   'lint' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'prelint', 'lint', 'postlint' ]
5 info lifecycle functions@~prelint: functions@
6 info lifecycle functions@~lint: functions@
7 verbose lifecycle functions@~lint: unsafe-perm in lifecycle true
8 verbose lifecycle functions@~lint: PATH: /home/xoxo/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/xoxo/Android/Projects/FirebaseFunctions/functions/node_modules/.bin:/home/xoxo/.nvm/versions/node/v9.5.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
9 verbose lifecycle functions@~lint: CWD: /home/xoxo/Android/Projects/FirebaseFunctions/functions
10 silly lifecycle functions@~lint: Args: [ '-c', 'eslint .' ]
11 info lifecycle functions@~lint: Failed to exec lint script
12 verbose stack Error: functions@ lint: `eslint .`
12 verbose stack spawn ENOENT
12 verbose stack     at ChildProcess.<anonymous> (/home/xoxo/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18)
12 verbose stack     at ChildProcess.emit (events.js:160:13)
12 verbose stack     at maybeClose (internal/child_process.js:943:16)
12 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)
13 verbose pkgid functions@
14 verbose cwd /home/xoxo/Android/Projects/FirebaseFunctions
15 verbose Linux 4.13.0-32-generic
16 verbose argv "/home/xoxo/.nvm/versions/node/v9.5.0/bin/node" "/home/xoxo/.nvm/versions/node/v9.5.0/bin/npm" "--prefix" "/home/xoxo/Android/Projects/FirebaseFunctions/functions" "run" "lint"
17 verbose node v9.5.0
18 verbose npm  v5.6.0
19 error file sh
20 error code ELIFECYCLE
21 error errno ENOENT
22 error syscall spawn
23 error functions@ lint: `eslint .`
23 error spawn ENOENT
24 error Failed at the functions@ lint script.
24 error This is probably not a problem with npm. There is likely additional logging output above.
25 verbose exit [ 1, true ]

Console Output

xoxo@xo9:~/Android/Projects/FirebaseFunctions$ firebase deploy

=== Deploying to 'testproject-a1bda'...

i  deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint

> functions@ lint /home/xoxo/Android/Projects/FirebaseFunctions/functions
> eslint .

sh: 1: eslint: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! functions@ lint: `eslint .`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/xoxo/.npm/_logs/2018-02-03T22_35_55_608Z-debug.log

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

Package.js

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "./node_modules/.bin/eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "firebase-admin": "~5.8.1",
    "firebase-functions": "^0.8.1"
  },
  "devDependencies": {
    "eslint": "^4.12.0",
    "eslint-plugin-promise": "^3.6.0"
  },
  "private": true
}

enter image description here

Please what am I doing wrong?

Footrope answered 3/2, 2018 at 22:42 Comment(8)
Please show the normal console output from firebase deploy instead of this debug output from npm.Sweven
@DougStevenson, Thanks. Please I have added itFootrope
It looks like you asked the Firebase CLI to check your code with ESLint, but then managed to somehow not install it, or uninstall it. What's your package.json look like?Sweven
Actually, if you could verify the exact steps you took to set up a project that behaves this way, that would be immensely helpful.Sweven
@DougStevenson I have added the content of package.jsFootrope
@DougStevenson I ran npm install -g firebase-tools, then firebase login. After a successful login, I went to the project diretecry and executed firebase init functions. I selected JavaScript and something that has to do with ESlint. Then I made some changes to the index.js file and got this error when I tried to deployFootrope
What did you say to each of the prompts when you did firebase init? Please help me reproduce the exact steps.Sweven
@DougStevenson I have added a screenshot of itFootrope
S
67

The only way I can imagine that your project got into this state is if you refused to allow npm to install dependencies at the time of project creation. So when you asks you this:

? Do you want to install dependencies with npm now?

You may have answered 'No'. This would prevent the eslint package from being installed, and you would see that error.

Otherwise, you may have deleted the eslint installed package under node_modules somehow. You can run npm install from the functions folder to recreate everything needed under node_modules.

Sweven answered 3/2, 2018 at 23:12 Comment(3)
FYI I just received this error by duplicating my project into a new directory. None-the-less navigating to functions and running rm -rf node_modules/ && npm install and npm cache clean --force as suggested fixed it. Thank you!Edile
Perfectly worked for me, I think for ESLint dependencies was missing,Normative
It is important to note that you must run npm install from functions folder, not the project folder. I missed that part.Triceratops
T
75

Easy fix. Inside your package.json change

> "lint": "eslint ."

to

"lint": "eslint",
Threedimensional answered 17/7, 2021 at 19:22 Comment(2)
Removing the . from "lint": "eslint --ext .js,.ts ." to "lint": "eslint --ext .js,.ts" worked, why though?Cockatoo
Doing this basically turns eslint off, because running "eslint" without the "." just prints out the help/options. At least that's the case for me 🤷‍♂️Ramonaramonda
S
67

The only way I can imagine that your project got into this state is if you refused to allow npm to install dependencies at the time of project creation. So when you asks you this:

? Do you want to install dependencies with npm now?

You may have answered 'No'. This would prevent the eslint package from being installed, and you would see that error.

Otherwise, you may have deleted the eslint installed package under node_modules somehow. You can run npm install from the functions folder to recreate everything needed under node_modules.

Sweven answered 3/2, 2018 at 23:12 Comment(3)
FYI I just received this error by duplicating my project into a new directory. None-the-less navigating to functions and running rm -rf node_modules/ && npm install and npm cache clean --force as suggested fixed it. Thank you!Edile
Perfectly worked for me, I think for ESLint dependencies was missing,Normative
It is important to note that you must run npm install from functions folder, not the project folder. I missed that part.Triceratops
L
20

Had the same problem I reinstalled npm

npm install npm -g

then reinitiated the Firebase functions (you have to overwrite all files and make sure to install EsLine the debugging and install all dependencies ) yes press Y for any request

Firebase init functions

and everything worked just fine after deploying again

Firebase deploy
Longo answered 15/8, 2019 at 12:46 Comment(0)
H
14

If you found -prefix "%REASOURCE_DIR%" run init type error while deploying firebase project, then you have to edit some code in firebase.json file. Here is an Exampleenter image description here

Highbrow answered 17/4, 2020 at 10:36 Comment(2)
what's the side effect of removing this eslint ?Fumed
just wont run the lintting and stop the deployment due to errors in that. not the best practice so better to resolve any eslint dependencies. This worked for me in the meantime though just to get going.Smallage
A
4

hey you just need to return something from then statement

let params = {...};
var firestore = admin.firestore();
var dbRef = firestore.collection('your-collection-name');

dbRef.add(params)
     .then((docRef) => {
       console.log("doc added with ID ", docRef.id);

       return null
     })
     .catch((err) => {
       console.error("Error in adding document ", err);
     });
Adopt answered 3/2, 2018 at 22:42 Comment(0)
T
2

As of 2023, I still come across this problem. It is true that this problem is caused by people skipping the default npm installation on project configuration/startup. But rather than fixing it on the spot, reinstalling all the dependencies seem like overkill to me. You are missing the eslint, so you have to add eslint to your project.json file and then install dependency and you are good to go.

I had to do only two thing in my case:

  1. Add eslint to your package.json as a dependency
  "scripts": {
    ...
    "lint": "eslint"
  },
  1. In your functions folder. Run command:
 npm init @eslint/config

Then run firebase deploy. That is, it.

You should not get any errors if your previous command had successfully completed.

Twylatwyman answered 18/3, 2023 at 11:56 Comment(0)
G
1

I had a similar error appear. I found out that my directory that held the firebase project was named firebase/database. I removed the / and made the directory name firebase-database. Hopefully that helps someone.

Grapheme answered 2/4, 2019 at 23:24 Comment(0)
S
1

I had a similar problem with ESLINT on Windows

I just ruined npm run deploy in order to call firebase deploy command. This call allowed me to view errors outside "firebase deploy" command execution and it was funny to see that Eslint had a CLRF conflict with files

Then I ran npm run lint -- --fix and those problems got solved

:D

Shanda answered 20/1, 2021 at 6:3 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.