5

I'm currently writing my cloud functions in ES6 and transpiling with Babel to target the Node v10 environment. And I've noticed something weird.

Why is that when I import firebase-functions like this:

import functions from 'firebase-functions';

I get this error:

!  TypeError: Cannot read property 'https' of undefined
    at Object.<anonymous> (C:\myProject\functions\index.js:28:55)

And to fix it, I need to import it like this:

import * as functions from 'firebase-functions';

While the following import works just fine for the firebase-admin:

import admin from 'firebase-admin';

QUESTION

In short terms, the question is:

Why is that:

import functions from 'firebase-functions';            // DOESN'T WORK
import * as functions from 'firebase-functions';       // WORKS
import admin from 'firebase-admin';                    // WORKS
cbdeveloper
  • 27,898
  • 37
  • 155
  • 336

1 Answers1

10

The reason why import functions from 'firebase-functions'; will not work is because 'firebase-functions' does not have a "functions" default export.

Hence, this error:

!  TypeError: Cannot read property 'https' of undefined
    at Object.<anonymous> (C:\myProject\functions\index.js:28:55)

Solution:

The first option would be to import an entire module's contents and add functions into the current scope containing all the exports from the module firebase-functions.

import * as functions from 'firebase-functions'

The second option would be to import a single export from a module, https in this case, since you are trying to read property https of 'firebase-functions'.

import { https } from 'firebase-functions'

More information can be found here.

Hope this clarifies your question.

Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
sllopis
  • 2,292
  • 1
  • 8
  • 13