Firebase-tools: No se puede encontrar el módulo '@ custom-modules / moduleName' cuando se implementa con TypeScript

Creado en 1 nov. 2018  ·  3Comentarios  ·  Fuente: firebase/firebase-tools

Hola, chicos ~ No puedo implementar cuando asigno paths argumentos en tsconfig.json , así:

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

Los argumentos paths generalmente usan TypeScript y funcionan perfectamente. Pero la implementación de la base de fuego arroja ese error:

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

Esta pregunta se publicó en StackOverFlow antes de Cómo usar TS Path Mapping con Firebase Cloud Functions y, por ahora, ¿alguien puede ayudarme? Gracias ~ 🤣

question

Comentario más útil

¡Hola! Quiero agregar más información sobre este problema, porque yo también lo encontré.
En mi otro proyecto Node.js + TypeScript, el problema estaba en su lugar porque, como se explicó anteriormente, TypeScript no cambia, requiere rutas en la salida JS. La única solución de trabajo que pude encontrar es https://github.com/dividab/tsconfig-paths#with -node, que cambia la forma de manejo de las rutas de Node.js según el archivo de configuración tsconfig.json . Eso funciona gracias al argumento -r tsconfig-paths/register pasado a Node, y la ejecución de register en tiempo de ejecución (incluso en la parte superior de index.ts) no parece funcionar en Firebase Functions.

Tener rutas relativas me parece muy inconveniente, porque tengo una carpeta un poco common que también es utilizada por el código frontend, la ruta relativa se vería como ../../../common en index.ts, y aún más fea en subcarpetas.

Entonces, tal vez haya una manera de agregar este argumento -r tsconfig-paths/register para Firebase Functions, incluidos los entornos locales y de producción.

Todos 3 comentarios

Según mi comprensión funciona, baseUrl y paths solo son utilizados por el compilador y el linter para comprender los tipos y la ubicación de los módulos. Esas dos propiedades _no_ le dicen al compilador que _incluya_ esas rutas asignadas en la compilación o que cambie las declaraciones import para que funcionen durante el tiempo de compilación. Eche un vistazo al directorio compilado lib para ver que la declaración @custom-modules/* import no ha cambiado.

Dicho esto, el error proviene del hecho de que en el proceso de implementación, la CLI interpreta el código de las funciones para comprender qué funciones deben implementarse. Dado que el código de funciones requiere un módulo del que no tiene conocimiento (esto está en la carpeta lib , recuerde), se arroja un error que imprime ese mensaje.

Si está tratando de guardar algo de escritura haciendo import ... from "@custom-modules/..."; y reasignando a otra parte de su estructura, puede solucionar esto haciendo importaciones relativas, que probablemente sea la forma recomendada de todos modos. No creo que baseUrl y paths sean la respuesta que estás buscando.

¡Hola! Quiero agregar más información sobre este problema, porque yo también lo encontré.
En mi otro proyecto Node.js + TypeScript, el problema estaba en su lugar porque, como se explicó anteriormente, TypeScript no cambia, requiere rutas en la salida JS. La única solución de trabajo que pude encontrar es https://github.com/dividab/tsconfig-paths#with -node, que cambia la forma de manejo de las rutas de Node.js según el archivo de configuración tsconfig.json . Eso funciona gracias al argumento -r tsconfig-paths/register pasado a Node, y la ejecución de register en tiempo de ejecución (incluso en la parte superior de index.ts) no parece funcionar en Firebase Functions.

Tener rutas relativas me parece muy inconveniente, porque tengo una carpeta un poco common que también es utilizada por el código frontend, la ruta relativa se vería como ../../../common en index.ts, y aún más fea en subcarpetas.

Entonces, tal vez haya una manera de agregar este argumento -r tsconfig-paths/register para Firebase Functions, incluidos los entornos locales y de producción.

Descubrí que https://www.npmjs.com/package/module-alias funcionó para mí.

  1. Crear un archivo nuevo /src/fixTsPaths.ts :

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

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
¿Fue útil esta página
0 / 5 - 0 calificaciones