node.jsfirebasegoogle-cloud-functionsfaker.js

Provided module can't be loaded - Firebase Cloud Functions


I am trying to write Node.js function to be deployed within Firebase Cloud Functions. The function that I am writing needs to use faker.js to help create mock testing data.

Could not create or update Cloud Run service createfakeprofiles, Container Healthcheck failed. Revision 'createfakeprofiles-00006-moh' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.

Logs URL: https://console.cloud.google.com/logs/viewer?project=test-app&resource=cloud_run_revision/service_name/createfakeprofiles/revision_name/createfakeprofiles-00006-moh&advancedFilter=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22createfakeprofiles%22%0Aresource.labels.revision_name%3D%22createfakeprofiles-00006-moh%22 
For more troubleshooting guidance, see https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start

I took a closer look at the logs and this was the output:

createfakeprofiles: Detailed stack trace: Error: Cannot find module '@faker-js/faker'
2024-03-09T02:57:32.133007Z ? createfakeprofiles: Require stack:
2024-03-09T02:57:32.133013Z ? createfakeprofiles: - /workspace/index.js
2024-03-09T02:57:32.133020Z ? createfakeprofiles: - /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/loader.js
2024-03-09T02:57:32.133029Z ? createfakeprofiles: - /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/main.js
2024-03-09T02:57:32.133043Z ? createfakeprofiles:     at Module._resolveFilename (node:internal/modules/cjs/loader:1134:15)
2024-03-09T02:57:32.133049Z ? createfakeprofiles:     at Module._load (node:internal/modules/cjs/loader:975:27)
2024-03-09T02:57:32.133056Z ? createfakeprofiles:     at Module.require (node:internal/modules/cjs/loader:1225:19)
2024-03-09T02:57:32.133062Z ? createfakeprofiles:     at require (node:internal/modules/helpers:177:18)
2024-03-09T02:57:32.133069Z ? createfakeprofiles:     at Object.<anonymous> (/workspace/index.js:14:17)
2024-03-09T02:57:32.133075Z ? createfakeprofiles:     at Module._compile (node:internal/modules/cjs/loader:1356:14)
2024-03-09T02:57:32.133082Z ? createfakeprofiles:     at Module._extensions..js (node:internal/modules/cjs/loader:1414:10)
2024-03-09T02:57:32.133087Z ? createfakeprofiles:     at Module.load (node:internal/modules/cjs/loader:1197:32)
2024-03-09T02:57:32.133093Z ? createfakeprofiles:     at Module._load (node:internal/modules/cjs/loader:1013:12)
2024-03-09T02:57:32.133100Z ? createfakeprofiles:     at Module.require (node:internal/modules/cjs/loader:1225:19)
2024-03-09T02:57:32.133387Z ? createfakeprofiles: Could not load the function, shutting down.
2024-03-09T02:57:32.702663418Z W createfakeprofiles: Container called exit(1).

my package.json:

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "18"
  },
  "main": "index.js",
  "dependencies": {
    "@faker-js/faker": "^8.4.1",
    "@google-cloud/secret-manager": "^5.1.0",
    "firebase-admin": "^11.8.0",
    "firebase-functions": "^4.3.1"
  },
  "devDependencies": {
    "@faker-js/faker": "^8.4.1",
    "eslint": "^8.15.0",
    "eslint-config-google": "^0.14.0",
    "firebase-functions-test": "^3.1.0"
  },
  "private": true
}

I've made sure to install faker and it's showing up in my dependencies, but I can't figure out where these errors are coming from.

I also made sure that I was running the install command in the right place:

functions/
     - node_modules/
     - index.js
     - package.json

faker is listed in packages.json, so where am I going wrong here?


Solution

  • After trying all the potential solutions outlined here, it was actually the last one that did it for me. I had included @faker-js/faker in my dependencies AND devDependencies, so I removed it from devDependencies and the problem was solved.