Ошибка Node.js: не удается найти модуль Express


147

Я написал свое первое приложение 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?)




Ответы:


279

Вам необходимо установить Express локально в контексте вашего приложения ( node_modulesпапки):

$ npm install express

Причина этого в том, что приложения всегда ищут в своем локальном контексте любые зависимости. Глобальная установка предназначена только для настройки общесистемных двоичных файлов, таких как средства запуска модульных тестов, загрузчики и тому подобное.

С Express, когда вы устанавливаете его глобально, вы получаете expressдвоичный файл, который может загружать приложение за вас. Для получения дополнительной информации введите

$ express --help

Итак, чтобы ответить на ваш последний вопрос: ДА , вам нужно установить его без -g.


1
Мне это тоже помогло. Я winstonустановил глобально, что по какой-то причине работало при запуске моего приложения от имени обычного пользователя, но при запуске моего приложения и сценария инициализации системы это не сработало. Я исправил это, установив Winston локально в каталог приложения (и добавив его в package.json).
trusktr

3
вы можете связать глобальную установленную зависимость с помощью компакт-диска с корневым каталогом вашего проекта, а затем использовать «npm link <some dependency name>»
khoi nguyen

11
npm install после того, как вы создали свое приложение. Он установит все зависимости.

Спасибо, это действительно помогло. Переход в папку node_modules и установка экспресса решила мою проблему
Megha

@Golo Roden В соответствии с вашим ответом, я пробовал использовать ваше решение, но выдает ошибку: 'npm ERR! tar.unpack ошибка распаковки C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! Windows_NT 6.3.9600 npm ERR! argv "C: \\ Program Files \\ nodejs \\\\ node.exe" "C: \\ Program Files \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "install" " экспресс »
VjyV

20

Для меня это сработало при локальной установке Express с параметром --save следующим образом:

$ npm install express --save

12

Убедитесь, что вы не устанавливаете expressмодуль, используйте эту команду:

 npm install express

и если ваш node_modulesкаталог находится в другом месте, установите NODE_PATHпеременную envirnment:

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

В Windows 10 после экспресс-установки npm он не может автоматически добавляться в путь к узлу, вам необходимо вручную добавить к нему модули узла.
Джейн

5

Голо хорошо объяснил решение, но я мог бы добавить уточнение:
иногда модули узлов устанавливаются в

/usr/local/lib/node_modules

и когда вы запускаете узел, модули blabla.js ищутся в

/lib

Итак, решение - создать символическую ссылку:

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

1
более простой способ -> ссылка npm <модуль>
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, хотя модули были установлены. Я использую машинопись и экспресс. В 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 установить экспресс

npm установить jade

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

а затем все, что вы создаете, сохраните в папке sample1

попытайся...


1

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


1

глобальная установка Express не будет работать в вашем локальном проекте, поэтому вам необходимо установить его локально для использования.

npm install express

Надеюсь, это сработает

Спасибо


0

Я столкнулся с той же проблемой. Я установил экспресс-версию глобально в / usr / local / bin /. Когда я выполняю «npm install», экспресс не был создан в node_modules локального каталога.

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

0
  • sudo brew удалить узел
  • варить обновление
  • варить апгрейд
  • заварить очистку
  • узел установки brew
  • sudo chown -R $ (whoami) / usr / местный
  • brew link --overwrite node
  • узел sudo brew postinstall

Это сработало для меня на 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.