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);
10 Réponses :
vous devriez être importé de './ Helers'
, pas '. HELDERS'
.
Merci, désolé, une faute de frappe, j'importais de './helpers'
Je vous recommande également d'installer l'extension Path Intellisense
vs Code. Cela aidera vraiment lors de la gestion des chemins imbriqués.
vous avez utilisé
"type":"module"
puis assurez-vous que le fichier importe
doit être .js
extension
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
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
Lorsque vous utilisez des modules ECMascript, vous êtes obligé de fournir l'extension du fichier: sur package.json Vous devez également spécifier l'extension de fichier import {urls} depuis './ ./. HEADERS.js '
.
Vous pouvez également utiliser l'indicateur --es-module-spécificateur-résolution = node
pour le faire résoudre les fichiers JS comme des modules comme il l'a fait auparavant avec exiger
Cette réponse a été celle qui m'a aidé! J'utilisais l'importation et le fichier était .js - Adding --es-module-spécificateur-résolution = Node a enregistré la journée pour moi! Merci!
Oh vraiment? Je suis content d'être tombé sur cette réponse avant de dépenser des daaaays à ce sujet. Merci Danielo515.
Cela a juste fonctionné pour moi, faisant référence à mes fichiers d'exportation TS-Extensiond en tant que JS, où importé. Plus j'en apprends sur JavaScript / TypeScript / nœud, plus je me rends compte que je ne sais rien ... Cela semble que cela ne devrait pas avoir de sens.
// helders.js
"type": "module"
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
// Si vous modifiez le fichier package.json, vous devriez essayer de recharger NPM. Écrivez ceci dans Terminal
npm i
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 .
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"
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
En plus de ne pas nécessiter l'indicateur d'exécution d'exécution du nœud, cette réponse satisfait également: p>
*. * Ts
Code source (le laissant compilable sous CommonJS si vous avez jamais choisi de le faire (* note)) (* 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" }
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.