es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Exportación nombrada ‘Types’ no encontrada. El módulo solicitado ‘mongoose’ es un módulo de CommonJS, que puede no admitir todas las module.exports como exportaciones nombradas.

Tengo un servidor express escrito en typescript con “module”: “es2020” en su tsconfig.

También he desarrollado otro módulo “es2020” para mi API de graphql, aún en typescript, y este módulo utiliza mongoose con importaciones con los siguientes nombres:

typescript
import { Types } from ‘mongoose’

Todo funciona bien cuando compilo mi módulo graphql con tsc. Pero el servidor express, que se ejecuta con

nodemon –watch ‘./**/*.ts’ –exec ‘node –experimental-specifier-resolution=node –loader ts-node/esm’ src/index.ts

no puede manejar la importación con nombre de mongoose.

import { Types } from 'mongoose';
         ^^^^^
SyntaxError: Named export 'Types' not found. The requested module 'mongoose' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:

import pkg from 'mongoose';
const { Types } = pkg;

Solución #1

typescript
import mongoose from ‘mongoose’

Y reemplazar “Types” por “mongoose.Types”.

Pero como “tsc” puede manejar la importación con nombre de mongoose, tengo la esperanza de que también sea posible que ts-node también pueda hacerlo.

Solución #2

Cambiar a “commonjs”, puedo mantener la sintaxis de import/export en mi módulo graphql y compilarlo como un módulo cjs. Pero tendría que usar una sintaxis cjs en mi servidor express, y no quiero hacerlo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema que tenemos es que la importación nombrada Types de mongoose no funciona con la configuración de módulo es2020 en el archivo tsconfig del servidor de Express. Una posible solución es importar mongoose como predeterminado y utilizar mongoose.Types en lugar de Types. Otra solución es cambiar la configuración de módulo a commonjs, pero eso requeriría utilizar una sintaxis diferente en el servidor de Express. Es posible que sea posible configurar ts-node para manejar la importación nombrada, pero no se ha proporcionado una solución para eso.

Comments are closed.