J'obtiens ceci en essayant de déployer des fonctions:

Deployment error.
Build failed: npm ERR! code ENOLOCAL
npm ERR! Could not install from "../config/myconfig" as it does not contain a package.json file.

C'est même après avoir mis à jour le package.json dans mon functions répertoire comme suggéré par les documents officiels pour ressembler à ceci:

...
"dependencies": {
    "sms_sender": "file:./",
    "myconfig": "file:../config/myconfig",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
  },
...

Qui est censé corriger cette erreur comme indiqué dans le stacktrace sur les journaux GCP:

A 2020-08-27T12:43:39.026Z sendMessage Could not load the function, shutting down. sendMessage
A 2020-08-27T12:43:39.020Z sendMessage     at Function.Module._load (internal/modules/cjs/loader.js:585:3) sendMessage
A 2020-08-27T12:43:39.020Z sendMessage     at tryModuleLoad (internal/modules/cjs/loader.js:593:12) sendMessage
A 2020-08-27T12:43:39.020Z sendMessage     at Module.load (internal/modules/cjs/loader.js:653:32) sendMessage
A 2020-08-27T12:43:39.020Z sendMessage     at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage     at Module._compile (internal/modules/cjs/loader.js:778:30) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage     at Object.<anonymous> (/workspace/sms_sender.js:5:16) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage     at require (internal/modules/cjs/helpers.js:25:18) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage     at Module.require (internal/modules/cjs/loader.js:692:17) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage     at Function.Module._load (internal/modules/cjs/loader.js:562:25) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage Detailed stack trace: Error: Cannot find module '../config/myconfig' sendMessage
A 2020-08-27T12:43:39.019Z sendMessage Did you list all required modules in the package.json dependencies? sendMessage
A 2020-08-27T12:43:39.019Z sendMessage Provided module can't be loaded. sendMessage

SendMessage est ma fonction d'arrière-plan dans index.js qui importe le module 'sms_sender':

exports.sendMessage = functions.https.onRequest(async (req, res) => {
  ...
  // send the sendMessage
  sms_sender.sendMsg("+123567890", "hello, my friend!");
  ...
}

Sms_sender.js:

const config = require('../config/myconfig');

module.exports = {
  sendMsg: async function(recipientNum, message) {
    ...
  }
}

Structure du projet:

/project-root
    /config
        myconfig.js
    /functions
        index.js
        sms_sender.js
        package.json
    /tests
    ...
    package.json

J'ai regardé ce article connexe mais il parlait d'une dépendance externe.

Comment dois-je dire à Node / npm que «myconfig» est juste un fichier local et pas vraiment un module en soi? J'ai essayé de mettre un fichier stub 'package.json' dans / config mais j'obtiens toujours la même erreur Could not install from "../config/myconfig" as it does not contain a package.json file.

1
kip2 28 août 2020 à 01:28

2 réponses

Meilleure réponse

Cette discussion connexe sur le référentiel des outils Firebase a été quelque peu utile, mais la réponse la plus populaire (création d'une archive tar sous le répertoire ./functions ) n'a pas tout à fait fonctionné pour moi.

Ce qui a fonctionné: créez un lien symbolique du dossier de niveau racine ./config à l'intérieur de ./functions :

cd functions
ln -s ../config/ config

Cette stratégie utilise tous les fichiers de config dans des modules de fonctions sans me forcer à réécrire toutes les autres parties de mon application qui relaient la structure de fichiers / dossiers décrite

Les seuls autres changements que j'ai dû faire:

// functions/package.json
...
"dependencies": {
    "sms_sender": "file:./",
    "myconfig": "file:./config/",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
  },
...

Et

// sms_sender.js
const config = require('./config/myconfig');
... // everything else is as before
0
kip2 2 sept. 2020 à 19:34

Vous devez inclure tous les fichiers dont vous avez besoin dans le répertoire functions, car seuls ces fichiers sont empaquetés et téléchargés pour créer la source de la fonction cloud. Si vous déplacez config dans le {{X2 }} vous devriez avoir plus de chance.

1
Michael Bleigh 27 août 2020 à 22:38