70

I have a fresh install of firebase tools (following this tutorial) and I'm trying to upload my first firebase function. I get this issue with the hello-world example that they initialise when you run firebase init (The only set up the functions CLI feature during the init)

If I replace $RESOURCE_DIR in firebase.json with my functions folder it works, but of course that Is bad practice and I'd like to find a proper $RESOURCE_DIR replacement that works.

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
Daan Luttik
  • 2,781
  • 2
  • 24
  • 37
  • Could you outline the exact series of steps you take to reproduce this, starting with the moment you run `firebase init`? – Doug Stevenson Jan 19 '18 at 17:51
  • I tried it after just init and after uncommenting the hello world code. Both gave this issue. But the accepted answer solves it. – Daan Luttik Jan 19 '18 at 20:50

13 Answers13

135

Try to replace $RESOURCE_DIR with %RESOURCE_DIR% in your firebase.json file.

Multi platform solution

As seen on this post let's summarize the configuration for the different platforms you are running on:

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"
]
Kamil Svoboda
  • 1,603
  • 1
  • 13
  • 7
53

It wants to lint your cloud functions, meaning it will check your code for obvious errors like a compiled language would throw errors at compile time.

It's not necessary, you can always remove it by going into firebase.json and updating functions.predeploy to be an empty array.

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

What is "Linting"?

Neo
  • 1,282
  • 12
  • 12
  • i have tried all of the above replacements,but sometimes it showed an error while deploying single functions without replacing existing function,so inside `firebase.json` file i replaced all codes with this>>> `{}` it worked for me, – Rajesh Aug 12 '18 at 06:15
  • Linting is there for a reason. It may reduce the risk of buggy code resulting in high bills (infinite loops, promises that aren't resolved,...). The solution from Inzamam Malik seems more appropriate to me. – Koen Feb 07 '19 at 13:52
  • Thanks! removing predeploy command worked. – Jagdish Chopde Mar 30 '21 at 17:20
35

you can simply make your firebase.json file like this:

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

what I'm doing is replace $RESOURCE_DIR with hard coded path of function folder itis working nice for me

Inzamam Malik
  • 3,238
  • 3
  • 29
  • 61
  • 1
    Worth pointing out my `firebase.json` only contained the first line (`... lint",`, but replacing `\"$RESOURCE_DIR\"` with `./functions/` in that line resolved the issue anyway. – Jake Lee Nov 01 '18 at 10:03
  • 1
    this is very useful – neo33 Feb 12 '19 at 05:25
13

SUMMARIZING

  1. Install ESLint locally to add "devDependencies" to package.json. Run:

     `npm install eslint --save-dev`
    
  2. Workaround for Windows as stated above. Change firebase.json:

     `npm --prefix $RESOURCE_DIR run lint` to `npm --prefix %RESOURCE_DIR% run lint`
    
  3. Optionally, add the following to package.json:

     "scripts": { "lint": "eslint"} or "scripts": { "lint": "eslint.js"}
    
Cutoutcow
  • 131
  • 3
6

locate the firebase.json file and then change these lines

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

to

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

it'll work

Aishik kirtaniya
  • 478
  • 5
  • 19
2

Modify in firebase.json from "npm --prefix $RESOURCE_DIR run lint" to "npm --prefix %RESOURCE_DIR% run lint"

Bhuwan Maharjan
  • 515
  • 4
  • 7
1

side note, if you're using yarn (and not npm), you need to specify --cwd param (instead of --prefix)

firebase.json example:

{
  ...
  "functions": {
    "predeploy": [
      "yarn --cwd \"$RESOURCE_DIR\" lint",
      "yarn --cwd \"$RESOURCE_DIR\" build"
    ]
  },
  ...
}

Adil
  • 49
  • 1
  • 3
1

My problem was my node version. I got this error after installing packages with the wrong node version. I ran yarn setup with node 16 but my project uses node 14. I switched to node 14 before trying to deploy and received this error. I tried the fixes mentioned here and finally realized what my problem was. This is one of those errors which is disinformative...

djangodev
  • 363
  • 5
  • 15
0

This one should solve the issue without workaround

npm install -g git://github.com/firebase/firebase-tools#master

please try this installation again in ur project folder it should solve the issue.

Jaideep
  • 908
  • 8
  • 22
  • 1
    I can confirm latest version hasn't fixed the issue, just installed on a fresh machine (W10, Powershell) and encountered it. – Jake Lee Nov 01 '18 at 10:04
0

It is working my cloud function deploy successfully

"functions": {
"predeploy": [
  "npm --prefix \"%RESOURCE_DIR%\" run lint",
  "npm --prefix \"%RESOURCE_DIR%\" run build"
],`enter code here`
"source": "functions"
Ehsan Mohammadi
  • 1,168
  • 1
  • 15
  • 21
0

None of the previous suggestions worked for me. So I deleted the function part of the firebase.json file as in below by only keeping the hosting part. Then, I deployed the app successfully without functions.

Then, I cd into functions from the terminal and deployed the functions by using firebase deploy --only functions

{

  "hosting": {
    "public": "build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}
0

Another possible issue is there are some errors in the code for example, I got this error message

  55:47  error  Expected '!==' and instead saw '!='  eqeqeq
  69:47  error  Expected '!==' and instead saw '!='  eqeqeq

After I fixed and deploy again and it work. this attached image

0

My approach to fixing this issue was to remove the period (.) after the eslint in package.json.

So, change:

 "scripts": {
    "lint": "eslint.",
 }

To:

"scripts": {
    "lint": "eslint",
}

Andrej
  • 2,743
  • 2
  • 11
  • 28