Firebase-tools: Das Modul '@ custom-modules / moduleName' kann bei der Bereitstellung mit TypeScript nicht gefunden werden

Erstellt am 1. Nov. 2018  ·  3Kommentare  ·  Quelle: firebase/firebase-tools

Hey, Leute ~ Ich kann nicht bereitstellen, wenn ich paths Argumente in tsconfig.json wie

{
  "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"]
}

Die paths Argumente verwenden normalerweise TypeScript und es funktioniert perfekt. Aber Firebase Deploy wirft diesen Fehler:

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

Diese Frage wurde in StackOverFlow veröffentlicht, bevor TS Path Mapping mit Firebase Cloud-Funktionen verwendet wird. Kann mir vorerst jemand helfen? Danke ~ 🤣

question

Hilfreichster Kommentar

Hallo! Möchten Sie weitere Informationen zu diesem Problem hinzufügen, da ich auch darauf gestoßen bin.
In meinem anderen Node.js + TypeScript-Projekt war das Problem vorhanden, da Typescript, wie oben erläutert, keine Pfade in der Ausgabe-JS erfordert. Die einzige funktionierende Lösung, die ich finden konnte, ist https://github.com/dividab/tsconfig-paths#with -node, wodurch die Art und Weise der Behandlung von Node.js-Pfaden basierend auf der Konfigurationsdatei tsconfig.json geändert wird. Dies funktioniert dank des an Node übergebenen Arguments -r tsconfig-paths/register , und die Ausführung von register zur Laufzeit (selbst ganz oben in index.ts) scheint in Firebase-Funktionen nicht zu funktionieren.

Relative Pfade zu haben scheint mir sehr unpraktisch zu sein, da ich einen Ordner common , der auch vom Frontend-Code verwendet wird. Der relative Pfad dazu würde in index.ts wie ../../../common aussehen und noch hässlicher in Unterordnern.

Vielleicht gibt es also eine Möglichkeit, dieses -r tsconfig-paths/register -Argument für Firebase-Funktionen hinzuzufügen, einschließlich lokaler und Produktionsumgebungen?

Alle 3 Kommentare

Nach meinem Verständnis werden baseUrl und paths nur vom Compiler und Linter verwendet, um die Typisierung und Position der Module zu verstehen. Diese beiden Eigenschaften weisen den Compiler nicht an, diese zugeordneten Pfade in die Kompilierung einzubeziehen oder die import -Anweisungen so zu ändern, dass sie während der Kompilierungszeit funktionieren. Sehen Sie sich das kompilierte Verzeichnis lib an, um festzustellen, dass sich die Anweisung @custom-modules/* import nicht geändert hat.

Der Fehler ist jedoch darauf zurückzuführen, dass die CLI im Bereitstellungsprozess den Funktionscode interpretiert, um zu verstehen, welche Funktionen bereitgestellt werden müssen. Da für den Funktionscode ein Modul erforderlich ist, von dem er keine Kenntnis hat (dies befindet sich im Ordner lib , denken Sie daran), wird ein Fehler ausgegeben, der diese Nachricht ausgibt.

Wenn Sie versuchen, etwas zu tippen, indem Sie import ... from "@custom-modules/..."; ausführen und an einer anderen Stelle in Ihrer Struktur neu zuordnen, können Sie dies beheben, indem Sie relative Importe durchführen, was wahrscheinlich ohnehin der empfohlene Weg ist. Ich glaube nicht, dass baseUrl und paths die Antwort sind, nach der Sie suchen.

Hallo! Möchten Sie weitere Informationen zu diesem Problem hinzufügen, da ich auch darauf gestoßen bin.
In meinem anderen Node.js + TypeScript-Projekt war das Problem vorhanden, da Typescript, wie oben erläutert, keine Pfade in der Ausgabe-JS erfordert. Die einzige funktionierende Lösung, die ich finden konnte, ist https://github.com/dividab/tsconfig-paths#with -node, wodurch die Art und Weise der Behandlung von Node.js-Pfaden basierend auf der Konfigurationsdatei tsconfig.json geändert wird. Dies funktioniert dank des an Node übergebenen Arguments -r tsconfig-paths/register , und die Ausführung von register zur Laufzeit (selbst ganz oben in index.ts) scheint in Firebase-Funktionen nicht zu funktionieren.

Relative Pfade zu haben scheint mir sehr unpraktisch zu sein, da ich einen Ordner common , der auch vom Frontend-Code verwendet wird. Der relative Pfad dazu würde in index.ts wie ../../../common aussehen und noch hässlicher in Unterordnern.

Vielleicht gibt es also eine Möglichkeit, dieses -r tsconfig-paths/register -Argument für Firebase-Funktionen hinzuzufügen, einschließlich lokaler und Produktionsumgebungen?

Ich habe festgestellt, dass https://www.npmjs.com/package/module-alias für mich funktioniert hat.

  1. Erstellen Sie eine neue Datei /src/fixTsPaths.ts :

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. Importieren Sie es in /scr/index.ts .

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen