Hoe los ik de fout “Kan module niet vinden” op met Node.js?

Na het verwijderen van een module van GitHub en het volgen van de instructies om het te bouwen, probeer ik het in een bestaand project te trekken met:

> npm install ../faye

Dit lijkt te werken:

> npm list
/home/dave/src/server
└─┬ [email protected]
  ├── [email protected]
  ├── [email protected]
  └── [email protected]

Maar Node.js kan de module niet vinden:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Ik wil heel graag begrijpen wat hier aan de hand is, maar ik weet een beetje niet waar ik moet zoeken. Suggesties?


Antwoord 1, autoriteit 100%

Als u npm installgebruikt, wordt de module alleen in de huidige map geïnstalleerd (in een submap met de naam node_modules). Staat app.js onder home/dave/src/server/? Als dit niet het geval is en u wilt de module vanuit elke map gebruiken, moet u deze globaal installeren met npm install -g.

Ik installeer de meeste pakketten meestal lokaal, zodat ze samen met mijn projectcode worden ingecheckt.

Update (8/2019):

Tegenwoordig kunt u het bestand package-lock.jsongebruiken, dat automatisch gegenereerd wanneer npm uw map node_modules wijzigt. Daarom kunt u het inchecken van pakketten achterwege laten, omdat de package-lock.jsonde exacte versies van uw node_modules die u momenteel gebruikt, bijhoudt. Om pakketten te installeren van package-lock.jsonin plaats van package.jsongebruik je het commando npm ci.

Update (3/2016):

Ik heb veel kritiek gekregen op mijn reactie, met name dat ik de pakketten incheck waarvan mijn code afhankelijk is. Een paar dagen geleden heeft iemand al zijn pakketten gedepubliceerd (https://kodfabrik .com/journal/i-ve-just-liberated-my-modules) die React, Babel en zo ongeveer al het andere kapot maakten. Hopelijk is het nu duidelijk dat als je productiecode hebt, je er niet op kunt vertrouwen dat NPM je afhankelijkheden voor je onderhoudt.


Antwoord 2, autoriteit 90%

Ik had een vergelijkbaar probleem. De hele map node_modulesverwijderen en opnieuw installeren werkte voor mij:

rm -rf node_modules
npm install

Antwoord 3, autoriteit 16%

npm install --save module_name

Als de fout bijvoorbeeld is:

{ [Fout: Kan module ‘/root/.npm/form-data’] niet vinden code: ‘MODULE_NOT_FOUND’ }

dan kunt u dit probleem oplossen door het commando npm install --save form-datauit te voeren.


Antwoord 4, autoriteit 5%

Voor Typcript-gebruikers, als u een ingebouwde knooppuntmodule importeert (zoals http, pathof url) en u bent Als u een foutmelding krijgt, zoals "Cannot find module "x"niet vinden>Dan kan de fout worden opgelost door

npm install @types/node --save-dev

De opdracht importeert de NODEJS-typievendefinities in uw project, zodat u de ingebouwde modules van Node kunt gebruiken.


5, Autoriteit 4%

Dit gebeurt wanneer een eerste npm installeren is om een ​​of andere reden gecrasht (sigint NPM), of dat de vertraging te lang was, of gegevens zijn beschadigd.
Een NPM-installatie proberen zal het probleem opnieuw opslaan.

Er is iets fout opgetreden op de NPM-controle, dus de beste keuze is om het bestand te verwijderen en om NPM-installatie opnieuw te starten.


6, Autoriteit 2%

Als u NVM gebruikt, controleert u of de bestaande NODE_MODULES die binden aan andere bibliotheken zijn, opgesteld voor de juiste Node.js-versie.

Ik had dezelfde foutmelding. De reden was het volgende: we gebruiken NVM sinds we twee apps op een server gebruiken, men vereist Node.js 5.6 omdat het Node-GD gebruikt (die niet op NODE.JS 6 wordt uitgevoerd), het andere vereist Node.js 6. Node.js 6 is de apt-get installatie.

We gebruiken ook de PM2-tool om te implementeren.

Dus de standaardinstellingen is dat het PM2-proces start wanneer NVM niet van kracht is, dus het gebruikt de Apt-Get-installatie van Node.js (versie 6). Dus de belangrijkste PM2-daemon begint met node.js 6. Als ik toepassingen in de vorkmodus uitvoeren, worden ze in afzonderlijke processen en NVM-instellingen van kracht. Wanneer ik toepassingen in clustermodus uitvoeren – erven ze de niet-NVM-omgeving.

Dus toen ik probeerde over te schakelen naar de clustermodus, startte de toepassing niet omdat de bindingen die voor 5.6 zijn gecompileerd, met dit bericht mislukken.

Ik heb dat opgelost door pm2 opnieuw te starten wanneer de nvm-instellingen van kracht zijn. Ook opstartscripts moeten worden opgelost.


Antwoord 7, autoriteit 2%

Ik heb deze fout gisteren ondervonden. Het duurde even voordat ik me realiseerde dat het main-item in package.jsonnaar een bestand verwees dat ik had verplaatst. Toen ik eenmaal had bijgewerkt, was de fout verdwenen en werkte het pakket.


Antwoord 8, autoriteit 2%

Controleer of de omgevingsvariabele NODE_PATH correct is ingesteld en naar het pad node_modules wijst. nodejs gebruikt deze variabele om naar de bibliotheken te zoeken


Antwoord 9

Deze fout kan optreden als u requireeen module nodig heeft met een ontbrekend of onjuist main-veld in zijn package.json. Hoewel de module zelf is geïnstalleerd, moet npm/node een enkel .js-bestand gebruiken als toegangspunt tot uw module. Als het veld mainer niet is, wordt standaard gezocht naar index.jsin de map van uw module. Als het hoofdbestand van uw module nietindex.js heet, kan het dit niet require.

Ontdekt tijdens het veranderen van een browserify-gebaseerde module in een CommonJS require-compatibele module; browserifygaf niet om het ontbrekende veld main, en dus was de fout onopgemerkt gebleven.


Antwoord 10

Als alle andere methoden niet voor u werken…
Probeer

npm link package_name

bijv.

npm link webpack
npm link autoprefixer

et.c.


Antwoord 11

rm package-lock.json
rm -r node_modules
npm i

Dat zou het probleem moeten oplossen en alle pakketten installeren.


12

Verwijder uw node_moduleROOT-map van uw project (bijv.: myApp).
Ga naar myAppmap en typ vervolgens onderstaande opdracht van terminal

>myApp>npm install

Het zal alle afhankelijkheidsmodules voor uw project installeren.


13

Geef het pad op naar de restlermap, die in NODE_MODULES-map is zoals: Var Rest = vereisen (‘./ NODE_MODULES / RESTER’);

Dit werkte voor mij.


14

Ik kan nog een plaats toevoegen om te controleren; Het pakket dat ik probeerde te gebruiken was een andere van mijn eigen pakketten die ik had gepubliceerd bij een privé-NPM-repo. Ik was vergeten het ‘hoofd’-eigenschap in het pakket.json correct te configureren. Dus het pakket was er in de map Node_modules van het consumerende pakket, maar ik werd “Kan module niet vinden”. Kostte me een paar minuten om mijn blunder te realiseren. : – (


15

Als u typescript gebruikt en een fout krijgt nadat u alle knooppuntmodules hebt geïnstalleerd, verwijder dan package-lock.json. En vervolgens ondervinden npm install.


16

Ik heb net een ongewoon scenario gevonden dat van gebruik kan zijn voor iemand en is een soort van rode haring.

Ik kreeg ook de module-fout niet te vinden, maar vreemd genoeg werkte alles perfect in mijn lokale (Mac gehoste) Node.js-omgeving. Dit probleem verscheen alleen toen de code werd ingezet op onze Linux-server.

Nou … het bleek een typfout te zijn dat (blijkbaar) de MAC gebaseerde knooppunt-installatie was volkomen blij om te negeren.

De omvat eruit gezien:

var S3Uploader = require('./S3Uploader.class');

Maar het eigenlijke bestand heette “s3uploader.class.js”

Let op het omhulselverschil in de ‘s’ vs. ‘s’ tussen de code en de bestandsnaam.

Dus – in de oneven kans dat geen van de andere oplossingen hier uw probleem oplost, controleer of u de personages in uw inbegrip van de bestandsnaam niet verkeerd gebruikt! 🙂

en duh!


17

Ik probeerde mijn eigen pakket te publiceren en nam het toe in een ander project. Ik had die kwestie vanwege hoe ik de eerste module heb gebouwd. Ik gebruik ES2015-exporteer om de module te maken, E.G laat zeggen dat de module er zo uitziet:

export default function(who = 'world'){
    return `Hello ${who}`;
}

Na samengesteld met Babel en eerder gepubliceerd:

'use strict';
Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];
    return 'Hello ' + who;
};

Dus na npm install module-namein een ander project (geen ES2015) moest ik

var hello = require('module-name').default;

Kreeg daadwerkelijk het ingevoerde pakket.

Hopelijk helpt dat!


Antwoord 18

Ik had hetzelfde probleem toen iemand anders in het team package.jsonbijwerkte in SVN. Alleen het verwijderen van de directory node_moduleshielp niet. Hoe ik het probleem heb opgelost is:

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

Ik hoop dat dit iemand helpt!


Antwoord 19

In mijn geval had UNMET PEER DEPENDENCY redux@^3.0.0deze foutmelding veroorzaakt, bekijk ze allemaal en installeer ontbrekende modules opnieuw met –save

npm install redux --save

Antwoord 20

Het verwijderen van node/npm en het opnieuw installeren van de stabiele (niet de nieuwste) versie werkte voor mij.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}
https://nodejs.org/en/download/

Antwoord 21

Ik had dit probleem bij het gebruik van live-server(met het Fullstack React-boek):

Ik kreeg steeds:

Error: Cannot find module './disable-browser-cache.js' 
...

Ik moest mijn package.json

aanpassen

  • Van:

    “scripts”: {

    “server”: “live-server public –host=localhost –port=3000 –middleware=./disable-browser-cache.js”

    }
    “scripts”: {

  • Aan:


    “server”: “live-server public –host=localhost –port=3000 –middleware=../../disable-browser-cache.js”

    }

Mededeling Relatieve paden lijken kapot en onhandig … ./wordt ../../

Ik vond het probleem hier

Ook als iemand samen met dat boek volgt:

  1. Verander DevDePencies in Packages.json to:

"live-server": "https://github.com/tapio/live-server/tarball/master"

Momenteel is dat upgrades van v1.2.0 naar v1.2.1

  1. Het is goed om nvm te gebruiken.
  2. Het is het beste om V13.14 van het knooppunt te installeren (* V14 + maakt andere hoofdpijn)
    nvm install v13.14.0
  3. nvm alias default v13.14.0
  4. Update NPM met npm i -g [email protected]
  5. RUN: npm update
  6. U kunt npm listgebruiken om de hiërarchie van afhankelijkheden ook te zien. (Om een ​​of andere reden Knooppunt 15 + Laatste NPM-standaardinstellingen om alleen het eerste niveau van diepte te laten zien – een LA-pakket.json. Dat maakt standaard commando verwijderd! U kunt --depth=n) toevoegen om opdracht meer te maken Nogmaals handig).
  7. U kunt npm auditook gebruiken. Er is problemen met (update van chokidaren sommige andere pakketten) naar nieuwere versies. live-serveris niet bijgewerkt om de nieuwere overeenkomstige knooppunt V 14-bibliotheekversies te ondersteunen.

Zie soortgelijke post HIER


Voetnoot:
Een ander ding wanneer u bij de JSX-sectie komt, bekijk mijn antwoord hier:
https://stackoverflow.com/a/65430910/495157

Wanneer je aankomt bij:

  • Geavanceerde componentconfiguratie met rekwisieten, staat en kinderen. P182+, node versie 13 wordt niet ondersteund voor sommige van de afhankelijkheden daar.
  • Zal daar later ook bevindingen voor toevoegen.

Antwoord 22

Ondervond dit probleem tijdens het gebruik van webpackmet webpack-dev-middleware.

Had van een enkel bestandeen mapgemaakt.

De watcher leek de nieuwe map niet te zien en de module ontbrak nu.

Opgelost door het proces opnieuw te starten.


Antwoord 23

Misschien heb je net als ik ‘view engine’ in expres ingesteld op een engine die niet bestaat, of heb je geprobeerd een niet-geregistreerde template-engine te gebruiken.
Zorg ervoor dat u gebruik maakt van:

app.engine('engine name',engine)
app.set('view engine','engine name')


Antwoord 24

Installeer de nieuwe CLI v3 (npm install -g ionic@latest).

Als dit probleem nog steeds een probleem is in CLI v3. Bedankt!


Antwoord 25

In mijn geval,

npm install -D tslib @types/node

mijn probleem opgelost, ik kon toen rennen

ts-node index.ts

met succes.


Antwoord 26

In mijn geval gebruikte ik niet de juiste versie van nvm.


27

Wijzig de map en wijs naar uw huidige projectmap en vervolgens “NPM Install”.
.

Hiermee wordt alle afhankelijkheden en modules in uw projectmap geïnstalleerd.

Other episodes