Помилка Node.js: Неможливо знайти експрес-модуль


145

Я написав свій перший додаток node.js, але він не може знайти експрес-бібліотеку:

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)

Але експрес інталізований (з -gклавішею):

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)

Деякі відомості:

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)

Як я можу вирішити цю проблему? ( ПОВИНЕН Я встановити його без -g?)




Відповіді:


275

Вам потрібно локально встановити Express у контексті програми ( node_modulesпапки):

$ npm install express

Причиною цього є те, що програми завжди шукають у їх локальному контексті будь-які залежності. Глобальна установка призначена лише для встановлення доступних у всій системі системних бінарних файлів, таких як тестові бігунки для завантаження або завантажувачі або подібні речі.

За допомогою програми Express, коли ви встановлюєте її в усьому світі, ви отримуєте expressдвійковий файл, який може завантажувати додаток для вас. Для отримання додаткової інформації введіть

$ express --help

Отже, щоб відповісти на ваше остаточне запитання: ТАК , вам потрібно встановити його без -g.


1
Це мені теж допомогло. У мене був winstonвстановлений глобально, який працював чомусь, коли запускав додаток як звичайний користувач, але при запуску програми та скрипта в системі init це не працюватиме. Я виправив це, встановивши winston локально в каталозі додатків (і додавши його до package.json).
trusktr

3
ви можете зв'язати глобальну встановлену залежність за допомогою cd до кореневого каталогу свого проекту, а потім використати "npm link <деяке ім'я залежності>"
khoi nguyen

11
npm встановити після створення програми. Він встановить усі залежності.

Спасибі це справді допомогло. Перехід до папки node_modules і замість установки express вирішив мою проблему
Megha

@Golo Roden Кодування вашої відповіді я спробував з вашим рішенням, але це помилка кидання: 'npm ERR! tar.unpack untar error C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm Помилка! Помилка помилки Windows_NT 6.3.9600 npm! argv "C: \\ Файли програми \\ nodejs \\\\ node.exe" "C: \\ Програмні файли \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "встановити" " експрес "
VjyV

20

Для мене він працював при встановленні експрес-локально з опцією --save у такий спосіб:

$ npm install express --save

12

Перевірте, чи не встановлено expressмодуль, використовуйте цю команду:

 npm install express

і якщо ваш node_modulesкаталог знаходиться в іншому місці, встановіть NODE_PATHзмінну навколишнього середовища:

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

У Windows 10 після npm install express він не може автоматично додаватися до шляху вузла, вам потрібно вручну додати до нього модулі вузла.
Джейн

5

Golo мають добре пояснити рішення, але я можу додати уточнення:
іноді модулі вузлів встановлюються в

/usr/local/lib/node_modules

і при запуску вузла blabla.js шукаються модулі

/lib

Тож рішення - створити символічне посилання:

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

1
простіший спосіб -> npm link <module>
Amit G

4

У вашому випадку ваш expressмодуль встановлений на C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, але вам потрібно занести цей модуль до каталогу проектів. Таким чином , ви повинні скопіювати файл в expressпапку модуля з C:\Users\Dmitry\AppData\Roaming\npm\node_modules\в каталог проекту , як: C:\ChatServer\Server\node_modules. Якщо у папці проекту у вас немає папки з назвою "node_modules", створіть її спочатку та вставте ці файли в цю папку. Цей метод працював для мене на моєму ПК Windows. Перезавантажте сервер вузлів і ще раз запустіть командний вузол C:\ChatServer\Server>node server.js. Це має працювати зараз !!!!


Працювали і на Windows 10!
Віктор Михайло Косгей


3

Враховуючи, що у вашій системі встановлено вузол , встановіть Express для локального проекту для вашого проекту, використовуючи наступне для Windows:

npm install express

або

npm install express --save

Ви можете надати йому глобальний доступ за допомогою:

npm install -g express --save

2

У мене була помилка в vscode, хоча модулі там встановлені. Я використовую машинопис і express. У server.tsфайлах усього імпорту було підкреслено червоним кольором. Виявляється, у мене був несправний tsconfig.jsonфайл.

{
    "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

створіть одну папку у своєму жорсткому диску, наприклад sample1, і перейдіть до типу командного рядка: cd і надає шлях до папки sample1, а потім встановіть усі модулі ...

npm встановити express

npm встановити нефрит

npm встановити socket.io

а потім все, що ви створюєте, збережіть у папці sample1

Спробуй це...


1

перейдіть у каталог додатків і встановіть експрес-модуль, використовуючи команду нижче npm install express --save, а потім перелічіть весь модуль установки за допомогою команди нижче npm ls ви побачите всі локально встановлені модулі.


1

глобальна установка express не працюватиме на вашому локальному проекті, тому вам потрібно встановити його локально для використання.

npm install express

Сподіваюся, це спрацює

Дякую


0

Я потрапив у ту ж проблему. У мене був експрес-встановлений глобально на / usr / local / bin /. Коли я роблю 'npm install', express не створювався у node_modules локальної директорії.

  1. Перевірте, чи є у вашому $ HOME ім'я файлу .npmrc
  2. Якщо в ньому є "global = true", змініть на "global = false"
  3. Тепер зробіть 'npm install' в каталозі додатків. Швидше за все, ви повинні отримати всі залежні від пакета модулі, встановлені в node_modules (локальні) в каталозі додатків.

0
  • sudo brew видалити вузол
  • оновлення варіння
  • оновлення пива
  • заварити очищення
  • варити вузол установки
  • sudo chown -R $ (whoami) / usr / local
  • заварювання посилання - overoverrite вузол
  • sudo варити вузол для встановлення

Це працювало для мене на MacOS X Sierra


0

Я не пишаюся тим, що поділяю це, але в моєму випадку у мене було:

 require('express.handlebars')

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

0

У мене була така ж помилка, випливаючи з прикладу цієї книги: "Kubernetes Up & Running".
Я бачу багато відповідей, які пропонують встановити експрес "від руки", але я не переконаний, що це найкраще рішення.
Оскільки ми використовуємо package.json (я бачу це в журналах) і правильний спосіб створення програми працює npm install, я додав виразну залежність у файл package.json .

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

Я отримую поточну версію npm search express.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.