web-dev-qa-db-fra.com

ExpressJs est une erreur de retour `err_module_not_found` Si j'importe le fichier sans` js` extension

Je construis une application expressjs par ES6 et j'ai eu l'erreur ci-dessous:

(node:4132) ExperimentalWarning: The ESM module loader is experimental.
internal/modules/run_main.js:54
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'E:\wamp64\www\myDemos\nodeJs\expressJsExample\config\app' imported from E:\wamp64\www\myDemos\nodeJs\expressJsExample\server.mjs
←[90m    at finalizeResolution (internal/modules/esm/resolve.js:255:11)←[39m
←[90m    at moduleResolve (internal/modules/esm/resolve.js:603:10)←[39m
←[90m    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:644:13)←[39m
←[90m    at Loader.resolve (internal/modules/esm/loader.js:94:40)←[39m
←[90m    at Loader.getModuleJob (internal/modules/esm/loader.js:240:28)←[39m
←[90m    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)←[39m
←[90m    at link (internal/modules/esm/module_job.js:41:36)←[39m {
  code: ←[32m'ERR_MODULE_NOT_FOUND'←[39m
}
[nodemon] app crashed - waiting for file changes before starting...

Si j'utilise import app from './config/app.js'; puis travailler mais si j'utilise import app from './config/app'; Puis renvoyez l'erreur ci-dessus.

Le ci-dessous est mon code:

paquet.json

{
  "name": "ExpressJsExample",
  "version": "1.0.0",
  "description": "Express Js Example",
  "main": "server.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon server.js"
  },
  "author": "Mukesh Singh Thakur",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "chalk": "^4.0.0",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "http": "0.0.1-security",
    "http-errors": "^1.7.3",
    "jsonwebtoken": "^8.5.1",
    "nodemon": "^2.0.2",
    "pg": "^8.0.0",
    "request": "^2.88.2",
    "sequelize": "^5.21.6"
  },
  "devDependencies": {
    "sequelize-cli": "^5.5.1"
  }
}

serveur.js

import http from 'http';
import app from './config/app';

const server = http.Server(app);
server.listen(3000, () => {
       return true;
});

app.js

import express from 'express';
const app = express();

export default app;

L'exemple d'application est disponible en https://github.com/msthakur08/express-js-example URL. L'exemple de fichiers importation avec '.js' existence mais je veux importer un fichier sans existence ".js".

4
MS Thakur

J'ai résolu cela avec cette approche: -

Lorsque vous utilisez la fonctionnalité ES6 Importation/Exportation avec noeud, vous devez importer des modules avec ".mjs" extension Et avant d'importer renommer votre module ./path-to/app.js to ./path-to/app.mjs

et changez votre code à ceci

import http from 'http';
import app from './config/app.mjs'; //.mjs extension is necessary

const server = http.Server(app);
server.listen(3000, () => {
       return true;
});

et exécutez votre app.js avec node --experimental-modules app.js

plus sur ceci https://nodejs.org/api/esm.html

1
Jatin Mehrotra