Błąd Node.js: nie można znaleźć modułu express


145

Napisałem swoją pierwszą aplikację node.js, ale nie mogę znaleźć biblioteki ekspresowej:

C:\ChatServer\Server>node server.js

module.js:340
    throw err;
          ^
Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:6:9)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:25:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

Ale Express jest zainstalowany (z -gkluczem):

C:\ChatServer\Server>npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/connect/2.7.11
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.4
npm http GET https://registry.npmjs.org/cookie/0.1.0
npm http GET https://registry.npmjs.org/buffer-crc32/0.2.1
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/cookie-signature/1.0.1
npm http GET https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/mkdirp/0.3.4
npm http 304 https://registry.npmjs.org/range-parser/0.0.4
npm http 304 https://registry.npmjs.org/cookie/0.1.0
npm http 304 https://registry.npmjs.org/connect/2.7.11
npm http 304 https://registry.npmjs.org/commander/0.6.1
npm WARN package.json range-parser@0.0.4 No repository field.
npm http 304 https://registry.npmjs.org/buffer-crc32/0.2.1
npm http 304 https://registry.npmjs.org/fresh/0.1.0
npm http 304 https://registry.npmjs.org/methods/0.0.1
npm http 304 https://registry.npmjs.org/send/0.1.0
npm http 304 https://registry.npmjs.org/cookie-signature/1.0.1
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json methods@0.0.1 No readme data.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.6.5
npm http GET https://registry.npmjs.org/send/0.1.1
npm http GET https://registry.npmjs.org/formidable/1.0.14
npm http GET https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/bytes/0.2.0
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http 304 https://registry.npmjs.org/bytes/0.2.0
npm WARN package.json bytes@0.2.0 No repository field.
npm http 304 https://registry.npmjs.org/pause/0.0.1
npm WARN package.json pause@0.0.1 No repository field.
npm http 304 https://registry.npmjs.org/formidable/1.0.14
npm http 304 https://registry.npmjs.org/qs/0.6.5
npm http 304 https://registry.npmjs.org/send/0.1.1
npm http 304 https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/mime
C:\Users\Dmitry\AppData\Roaming\npm\express -> C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express\bin\express
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
express@3.2.6 C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express
├── methods@0.0.1
├── fresh@0.1.0
├── range-parser@0.0.4
├── cookie-signature@1.0.1
├── buffer-crc32@0.2.1
├── cookie@0.1.0
├── debug@0.7.2
├── commander@0.6.1
├── mkdirp@0.3.4
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.11 (pause@0.0.1, qs@0.6.5, bytes@0.2.0, cookie@0.0.5, formidable@1.0.14, send@0.1.1)

Trochę informacji:

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>node --version
v0.10.9

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>npm ls -g installed express
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json range-parser@0.0.4 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json bytes@0.2.0 No repository field.
npm WARN package.json pause@0.0.1 No repository field.
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
C:\Users\Dmitry\AppData\Roaming\npm
└── express@3.2.6


C:\ChatServer\Server>npm ls installed express
C:\ChatServer\Server
└── (empty)

Jak mogę rozwiązać ten problem? ( MUSZĘ zainstalować bez -g?)




Odpowiedzi:


275

Musisz zainstalować Express lokalnie w kontekście swojej aplikacji ( node_modulesfolderu):

$ npm install express

Powodem tego jest to, że aplikacje zawsze szukają wszelkich zależności w swoim lokalnym kontekście. Globalna instalacja służy tylko do konfigurowania dostępnych dla całego systemu plików binarnych, takich jak programy uruchamiające testy jednostkowe, programy ładujące i tym podobne.

Dzięki Express, gdy instalujesz go globalnie, otrzymujesz plik expressbinarny, który może załadować aplikację za Ciebie. Aby uzyskać więcej informacji, wpisz

$ express --help

Tak więc, odpowiadając na ostatnie pytanie: TAK , musisz go zainstalować bez -g.


1
To też mi pomogło. Miałem winstonzainstalowany w systemie, który pracował dla jakiegoś powodu podczas uruchamiania Moje app jako zwykły użytkownik, ale podczas uruchamiania mojej aplikacji i systemu startowych skryptu to nie będzie działać. Naprawiłem to, instalując lokalnie winston w katalogu aplikacji (i dodając go do package.json).
trusktr

3
możesz połączyć globalną zainstalowaną zależność za pomocą cd do katalogu głównego swojego projektu, a następnie użyć „npm link <nazwa zależności>”
khoi nguyen

11
npm install po utworzeniu aplikacji. Zainstaluje wszystkie zależności.

Dzięki, to naprawdę pomogło. Przejście do folderu node_modules i zainstalowanie Express rozwiązało mój problem
Megha

@Golo Roden Uwzględniając twoją odpowiedź Próbowałem z twoim rozwiązaniem, ale generuje błąd: 'npm ERR! tar.unpack untar błąd C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! Windows_NT 6.3.9600 npm BŁĄD! argv "C: \\ Program Files \\ nodejs \\\\ node.exe" "C: \\ Program Files \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "install" " express ”
VjyV

20

U mnie zadziałało po zainstalowaniu ekspresowym lokalnie z opcją --save w następujący sposób:

$ npm install express --save

12

Sprawdź, czy nie instalujesz expressmodułu, użyj tego polecenia:

 npm install express

a jeśli twój node_moduleskatalog jest w innym miejscu, ustaw NODE_PATHzmienną środowiskową:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%

W systemie Windows 10 po instalacji npm install express nie można go automatycznie dodać do ścieżki węzła, należy ręcznie dodać do niego moduły węzłów.
Jane,

5

Golo dobrze wyjaśnił rozwiązanie, ale mogę dodać wyjaśnienie:
czasami moduły węzłów są instalowane w

/usr/local/lib/node_modules

a po uruchomieniu węzła blabla.js przeszukiwane są moduły

/lib

Rozwiązaniem jest więc utworzenie dowiązania symbolicznego:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules

1
łatwiejszy sposób -> npm link <module>
Amit G

4

W twoim przypadku twój expressmoduł jest zainstalowany w C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, ale musisz pobrać ten moduł do katalogu twojego projektu. Więc należy skopiować plik z expressfoldery z modułu C:\Users\Dmitry\AppData\Roaming\npm\node_modules\do katalogu projektu jako: C:\ChatServer\Server\node_modules. Jeśli nie masz folderu o nazwie „node_modules” w folderze projektu, utwórz go najpierw i wklej te pliki do tego folderu. Ta metoda zadziałała na moim komputerze z systemem Windows. Zrestartuj serwer węzłów i jeszcze raz uruchom węzeł poleceń C:\ChatServer\Server>node server.js. Powinno teraz działać !!!!


Pracował też na Windows 10!
Victor Michael Kosgei,

3

W systemie operacyjnym opartym na Ubuntu możesz spróbować

sudo apt-get install node-express

działa dla mnie na mennicy


3

Biorąc pod uwagę, że masz zainstalowany węzeł w swoim systemie, zainstaluj Express lokalnie dla swojego projektu, używając następującego programu dla systemu Windows:

npm install express

lub

npm install express --save

Możesz nadać mu globalny dostęp, używając:

npm install -g express --save

2

Miałem ten błąd w vscode, chociaż moduły były zainstalowane. Używam maszynopisu i ekspresu. W server.tsplikach wszystkie importowane pliki miały czerwone faliste podkreślenia. Okazuje się, że miałem uszkodzony tsconfig.jsonplik.

{
    "compileOnSave": false,
    "compilerOptions": {
        "module": "commonjs", // Previously this value was `es6`
        "target": "es6",
        "allowSyntheticDefaultImports": true,
        "baseUrl": "public",
        "sourceMap": true,
        "outDir": "dist",
        "jsx": "react",
        "strict": true,
        "preserveConstEnums": true,
        "removeComments": true,
        "noImplicitAny": true,
        "allowJs": true
    },
    "exclude": [
        "node_modules",
        "build"
    ]
}

1

utwórz jeden folder na dysku twardym, np. sample1 i przejdź do wiersza poleceń wpisz: cd i podaj ścieżkę do folderu sample1 a następnie zainstaluj wszystkie moduły ...

npm zainstaluj express

npm zainstaluj jade

npm zainstaluj socket.io

a następnie cokolwiek tworzysz aplikację, zapisz w folderze sample1

Spróbuj...


1

przejdź do katalogu aplikacji i zainstaluj moduł express, używając poniższego polecenia npm install express --save, a następnie wyświetl listę wszystkich modułów instalacyjnych, używając poniższego polecenia npm ls , zobaczysz wszystkie moduły instalowane lokalnie.


1

instalacja ekspresowa na całym świecie nie będzie działać w Twoim projekcie lokalnym, więc musisz zainstalować ją lokalnie do użytku.

npm install express

Mam nadzieję, że to zadziała

Dziękuję Ci


0

Mam ten sam problem. Ekspresowo zainstalowałem globalnie w / usr / local / bin /. Kiedy wykonuję 'npm install', ekspres nie został utworzony w node_modules katalogu lokalnego.

  1. Sprawdź, czy masz plik o nazwie .npmrc w swoim $ HOME
  2. Jeśli ma „global = true”, zmień na „global = false”
  3. Teraz wykonaj „npm install” w katalogu aplikacji. Bardziej prawdopodobne jest, że wszystkie moduły zależne od pakietu powinny zostać zainstalowane w module node_modules (lokalnie) w katalogu aplikacji.

0
  • węzeł dezinstalacji sudo brew
  • napar aktualizacja
  • napar upgrade
  • czyszczenie naparu
  • zaparzyć węzeł instalacji
  • sudo chown -R $ (whoami) / usr / local
  • napisz link - nadpisz węzeł
  • sudo brew postinstall node

To zadziałało dla mnie na MacOS X Sierra


0

Nie jestem z tego dumny, ale w moim przypadku miałem:

 require('express.handlebars')

 //and the correct form is:
 require('express-handlebars'); //Use dash instead.

0

Wystąpił ten sam błąd, postępując zgodnie z przykładem w tej książce: „Kubernetes działa i działa”.
Widzę wiele odpowiedzi sugerujących instalację ekspresu „ręcznie”, ale nie jestem przekonany, że jest to najlepsze rozwiązanie.
Ponieważ używamy package.json (widzę to w logach) i działa właściwy sposób budowania aplikacji npm install, dodałem wyraźną zależność w pliku package.json .

 "dependencies": {
    "express": "^4.17.1"
}

Aktualną wersję otrzymuję z npm search express.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.