Estoy usando Node.js v14.13.0 .
archivo app.js :
import database from './database'; database();archivo base de datos/index.js :
import mongoose from 'mongoose'; export default connect = async () => { try { await mongoose.connect('...', { }); } catch (error) {} }; En package.json agregué "type": "module" .
Después de ejecutar la aplicación me sale el siguiente error:
Error [ERR_UNSUPPORTED_DIR_IMPORT]: la importación de directorios '/Users/xx/Desktop/Projects/node-starter/src/database' no es compatible con la resolución de módulos ES importados desde /Users/xx/Desktop/Projects/node-starter/src/app. js
La respuesta de TValidator es algo correcta, puede usar babel para resolver este problema.
Sin embargo, debe instalar @babel/core, @babel/node, @babel/preset-env.
Y, debes hacer babel.config.json como a continuación;
{ "presets": ["@babel/preset-env"] } Debe permanecer babel.config.json en la carpeta raíz de su proyecto.
Ahora, no tiene que configurar "tipo": "módulo" en el paquete.json.
Lo que sucede aquí es que Node exige el uso de una extensión en declaraciones de import y también establece,
Los índices de directorio (p. ej
'./startup/index.js') también deben especificarse por completo.
Su import database from './database'; declaración no especifica el index.js . Puede agregar index.js como se sugiere en otra respuesta, pero ese enfoque no se ve elegante en los proyectos de TypeScript , cuando terminaría importando un archivo .js desde uno .ts .
Puede cambiar el comportamiento de resolución de esta extensión de nodo pasando la --experimental-specifier-resolution=node . Esto funcionará y mantendrá su código sin cambios:
aplicación.js
import database from './database'; database(); Ejecutar como: node --experimental-specifier-resolution=node app.js .
Un desarrollador de Node admitió que la documentación no era tan clara .
Con los módulos ES6 no puede (¿todavía?) importar directorios. Su importación debería verse así:
import database from "./database/index.js"De acuerdo con la documentación de nodejs, las importaciones de directorios no funcionan
Puedes usar babel. Utilicé la siguiente biblioteca de babel en el proyecto de nodo y todas las funciones de ES6 funcionan correctamente.
"devDependencies": { "babel-cli": "^6.26.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-preset-env": "^1.6.1" }Aunque puede ser una versión antigua, puede usar la última versión.