Firebase-tools: Impossible de trouver le module '@ custom-modules / moduleName' lors du déploiement à l'aide de TypeScript

Créé le 1 nov. 2018  ·  3Commentaires  ·  Source: firebase/firebase-tools

Hé, les gars ~ Je ne peux pas déployer quand j'attribue des arguments paths dans tsconfig.json , comme ceci:

{
  "compilerOptions": {
    "lib": ["es6"],
    "module": "commonjs",
    "outDir": "lib",
    "rootDir": "src",
    "target": "es6",
    "sourceMap": true,
    "noImplicitReturns": true,
    "baseUrl": ".",
    // here, I assign a paths arguments
    "paths": {
      "@custom-modules/*": ["src/modules/*"],
    }
  },
  "compileOnSave": true,
  "include": ["src"]
}

Les arguments paths utilisent généralement TypeScript et fonctionnent parfaitement. Mais le déploiement de Firebase renvoie cette erreur:

Error: Error parsing triggers: Cannot find module '@custom-modules/moduleName'

Cette question a déjà été publiée dans StackOverFlow Comment utiliser TS Path Mapping avec Firebase Cloud Functions , et pour l'instant, quelqu'un peut-il m'aider? Merci ~ 🤣

question

Commentaire le plus utile

Salut! Je souhaite ajouter plus d'informations sur ce problème, car je l'ai également rencontré.
Dans mon autre projet Node.js + TypeScript, le problème était en place, car, comme expliqué ci-dessus, Typescript ne change pas, nécessite des chemins dans la sortie JS. La seule solution de travail que j'ai pu trouver est https://github.com/dividab/tsconfig-paths#with -node, qui modifie le mode de gestion des chemins Node.js en fonction du fichier de configuration tsconfig.json . Cela fonctionne grâce à l'argument -r tsconfig-paths/register passé à Node, et l'exécution de register à l'exécution (même tout en haut de index.ts) ne semble pas fonctionner dans Firebase Functions.

Avoir des chemins relatifs me semble très gênant, car j'ai un peu common qui est également utilisé par le code du frontend, le chemin relatif vers celui-ci ressemblerait à ../../../common dans index.ts, et encore plus moche dans les sous-dossiers.

Alors peut-être existe-t-il un moyen d'ajouter cet argument -r tsconfig-paths/register pour les fonctions Firebase, y compris les environnements locaux et de production?

Tous les 3 commentaires

Au fur et à mesure de ma compréhension, baseUrl et paths ne sont utilisés que par le compilateur et linter pour comprendre les typages et l'emplacement des modules. Ces deux propriétés ne disent pas au compilateur de _inclure_ ces chemins mappés dans la compilation ou de modifier les instructions import pour qu'elles fonctionnent pendant la compilation. Jetez un œil au répertoire compilé lib pour voir que l'instruction @custom-modules/* import n'a pas changé.

Cela dit, l'erreur vient du fait que dans le processus de déploiement, la CLI interprète le code des fonctions pour comprendre quelles fonctions doivent être déployées. Puisque le code des fonctions nécessite un module dont il n'a aucune connaissance (c'est dans le dossier lib , rappelez-vous), une erreur est lancée qui affiche ce message.

Si vous essayez de sauvegarder un peu de frappe en faisant import ... from "@custom-modules/..."; et en remappant ailleurs dans votre structure, vous pouvez résoudre ce problème en effectuant des importations relatives, ce qui est probablement la méthode recommandée de toute façon. Je ne crois pas que baseUrl et paths sont la réponse que vous cherchez.

Salut! Je souhaite ajouter plus d'informations sur ce problème, car je l'ai également rencontré.
Dans mon autre projet Node.js + TypeScript, le problème était en place, car, comme expliqué ci-dessus, Typescript ne change pas, nécessite des chemins dans la sortie JS. La seule solution de travail que j'ai pu trouver est https://github.com/dividab/tsconfig-paths#with -node, qui modifie le mode de gestion des chemins Node.js en fonction du fichier de configuration tsconfig.json . Cela fonctionne grâce à l'argument -r tsconfig-paths/register passé à Node, et l'exécution de register à l'exécution (même tout en haut de index.ts) ne semble pas fonctionner dans Firebase Functions.

Avoir des chemins relatifs me semble très gênant, car j'ai un peu common qui est également utilisé par le code du frontend, le chemin relatif vers celui-ci ressemblerait à ../../../common dans index.ts, et encore plus moche dans les sous-dossiers.

Alors peut-être existe-t-il un moyen d'ajouter cet argument -r tsconfig-paths/register pour les fonctions Firebase, y compris les environnements locaux et de production?

J'ai trouvé que https://www.npmjs.com/package/module-alias fonctionnait pour moi.

  1. Créez un nouveau fichier /src/fixTsPaths.ts :

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. Importez-le dans /scr/index.ts .

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
Cette page vous a été utile?
0 / 5 - 0 notes