33
votes

Error [er_module_not_found]: impossible de trouver le module

 Entrez la description de l'image ici

Je travaille sur un projet de nœud (capture d'écran). J'ai une seule fonction (URL) dans les aides.js que j'exporte en bas comme:

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/optionhomes11/nodeprojects/hayes/helpers' imported from /home/optionhomes11/nodeprojects/hayes/index.js Did you mean to import ../helpers.js?

Dans mon index.js, j'essaie de l'importer avec :

import { urls } from '.helpers';
const myUrls = urls(1,3);


1 commentaires

Vous mélangez le système de module CJS de Node (require / module.exports) avec les modules ES6 (import / export). Ne faites pas cela à moins que vous ne soyez très sûr de savoir ce que vous faites, il y a des gotchas à la fois subtils et bruts.


10 Réponses :


7
votes

vous devriez être importé de './ Helers' , pas '. HELDERS' .


1 commentaires

Merci, désolé, une faute de frappe, j'importais de './helpers'



2
votes

Je vous recommande également d'installer l'extension Path Intellisense vs Code. Cela aidera vraiment lors de la gestion des chemins imbriqués.


0 commentaires

40
votes

vous avez utilisé

"type":"module"

puis assurez-vous que le fichier importe doit être .js extension


0 commentaires

22
votes

Vous ne faites rien de mal. L'algorithme de résolution actuel pour les modules ECMAScript des extensions de fichiers et la possibilité d'importer des répertoires qui ont un fichier d'index nécessitent en utilisant un indicateur expérimental. Voir esm , la partie inférieure.

pour donc faire votre travail tel quel, Au lieu de

     "scripts": {
  "start": "NODE_OPTIONS='--experimental-specifier-resolution=node' node src/index.js

vous faites:

$ node --experimental-specifier-resolution=node index.js

Vous pouvez également créer un script dans votre package.json

comme ainsi:

$ node index.js


1 commentaires

Ajouter - Trace-Warnings L'indicateur aidera à montrer où se trouve l'avertissement exactement, puis ajouter: node_options = '- expérimental-spécificateur-résolution = node --trace-warnings' nœud src /Index.js




3
votes

// helders.js

"type": "module"


0 commentaires

29
votes

Cela se produit parce que lorsque vous utilisez des modules ES, nous sommes appliqués pour spécifier l'extension de fichier dans l'instruction IMPORT

Import * depuis "./demo.js" // fonctionne bien
Import * depuis "./demo" // lancera l'erreur comme vous le voyez

Notez que: les deux options ci-dessus sont toutes deux valides lors de l'utilisation de CommonJS à la place


0 commentaires

-2
votes

// Si vous modifiez le fichier package.json, vous devriez essayer de recharger NPM. Écrivez ceci dans Terminal

npm i


1 commentaires

Comme il est actuellement écrit, votre réponse n'est pas claire. S'il vous plaît modifier pour ajouter des détails supplémentaires qui aideront les autres à comprendre comment cela répond à la question posée. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide .



5
votes

Essayez ceci comme ci-dessous

Recherchez dans votre "/ home / optionhomes11 / nodeprojects / hayes / index.js"

et à la recherche de "/ home / optionhomes11 / nodeprojects / hayes / assistants "

modifier

"/home/optionhomes11/nodeprojects/hayes/helpers.js"

à

"/home/optionhomes11/nodeprojects/hayes/helpers"


0 commentaires

-1
votes

Réponse 1

Cette réponse ne nécessite pas d'utiliser un indicateur d'exécution - es-module-spécificateur-résolution = node au moment de l'exécution

cependant, vous devez Modifiez votre code source TS, ce qui est pénible s'il y a beaucoup de fichiers. Et, les fichiers modifiés ne se compileront plus en mode "CommonJS", si vous souhaitez revenir en arrière ou utiliser Dual "CommonJS" / "Module" Modes.

Modifiez votre tsconfig.json Em> pour assurer au moins ces versions de paramètre:

npx tsc 
npx rollup -c

Fonctionne avec TypeScript 4.6.3. (Remarque sûr environ 4.6.1 ou inférieur). *

Modifier index.js

// import resolve from "@rollup/plugin-node-resolve";
import dts from "rollup-plugin-dts";
import commonjs from "@rollup/plugin-commonjs";
import * as path from "path";
import pkg from "./package.json";

export default [
  {
    input: "index.js",
    external:[], // you may quash 'unresolved' warning by adding here
    output: [
      { file: pkg.exports.require, format: "cjs" },
      { file: pkg.exports.import, format: "es" },
    ],
    plugins: [
      commonjs(),
    ],
  },
  {
    input: "./index.d.ts",
    output: [
      { file: pkg.types, format: "es" }, 
    ],
    plugins: [dts()],
  },
];

modifier package.json

...
"exports":{
  "require":"./index.cjs",
  "import":"./index.js"
},
"types": "./index.d.ts",
"type": "module"    // you already had this

Le principal "#" est obligatoire

Réponse 2

En plus de ne pas nécessiter l'indicateur d'exécution d'exécution du nœud, cette réponse satisfait également: p>

  1. ne nécessite pas de modifier votre *. * Ts Code source (le laissant compilable sous CommonJS si vous avez jamais choisi de le faire (* note))
  2. Dans le cas où vous produisez une bibliothèque, il produit une sortie qui peut être consommée par des clients "CommonJS" ou "Module".
  3. (* Remarque) Lorsque vous utilisez ROLLUP, des cartes en ligne sont nécessaires - il peut donc parfois y avoir un avantage à utiliser les communjs pendant le développement et le passage à "module" pour la libération. >

    Modifier d'abord package.json , créer rollup.config.js , puis effectuer une action post tsc en utilisant rollup .

    package.json

      "imports": {
        "#helpers": "./helpers.js"
      }
    

0 commentaires