Google Storage is not a constructor error

2020-03-18 07:16发布

问题:

I am building an App and my objective is every time someone upload an image to firebase storage, the cloud function resize that image.

...
import * as Storage from '@google-cloud/storage'
const gcs = new Storage()
...

exports.resizeImage = functions.storage.object().onFinalize( async object => {
   const bucket = gcs.bucket(object.bucket);
   const filePath = object.name;
   const fileName = filePath.split('/').pop();
   const bucketDir = dirname(filePath);
....

And when I tried to deploy this funtion I get this error:

Error: Error occurred while parsing your function triggers.

TypeError: Storage is not a constructor

I tried with "new Storage()" or just "Storage" and nothing works.

I'm newbie around here so if there's anything I forgot for you to debug this just let me know.

Thanks!


google-cloud/storage: 2.0.0

Node js: v8.11.4

回答1:

The API documentation for Cloud Storage suggests that you should use require to load the module:

const Storage = require('@google-cloud/storage');

This applied to versions of Cloud Storage prior to version 2.x.

In 2.x, there was a breaking API change. You need to do this now:

const { Storage } = require('@google-cloud/storage');

If you would like TypeScript bindings, consider using Cloud Storage via the Firebase Admin SDK. The Admin SDK simply wraps the Cloud Storage module, and also exports type bindings to go along with it. It's easy to use:

import * as admin from 'firebase-admin'
admin.initializeApp()
admin.storage().bucket(...)

admin.storage() gives you a reference to the Storage object that you're trying to work with.