Lỗi Node.js: Không thể tìm thấy mô-đun express


145

Tôi đã viết ứng dụng node.js đầu tiên của mình, nhưng nó không thể tìm thấy thư viện express:

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)

Nhưng express là intalled (với -gkhóa):

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)

Một số thông tin:

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)

Làm thế nào tôi có thể giải quyết vấn đề này? ( PHẢI tôi cài đặt nó mà không có -g?)




Câu trả lời:


275

Bạn cần cài đặt Express cục bộ vào ngữ cảnh của ứng dụng ( node_modulesthư mục):

$ npm install express

Lý do cho điều này là các ứng dụng luôn tìm trong bối cảnh cục bộ của chúng cho bất kỳ sự phụ thuộc nào. Việc cài đặt toàn cầu chỉ để thiết lập các nhị phân có sẵn trên toàn hệ thống, chẳng hạn như người chạy thử nghiệm đơn vị hoặc bootstrappers hoặc những thứ tương tự.

Với Express, khi bạn cài đặt nó trên toàn cầu, bạn sẽ nhận được một expresstệp nhị phân có thể khởi động ứng dụng cho bạn. Để biết thêm thông tin, gõ

$ express --help

Vì vậy, để trả lời câu hỏi cuối cùng của bạn: , bạn cần cài đặt nó mà không cần -g.


1
Điều này cũng giúp tôi. Tôi đã winstoncài đặt trên toàn cầu, hoạt động vì một số lý do khi khởi động ứng dụng của tôi như một người dùng bình thường, nhưng khi khởi động ứng dụng của tôi và tập lệnh init hệ thống, nó sẽ không hoạt động. Tôi đã sửa nó bằng cách cài đặt winston cục bộ trong thư mục ứng dụng (và thêm nó vào pack.json).
trusktr

3
bạn có thể liên kết một phụ thuộc được cài đặt toàn cầu bằng cd vào thư mục gốc của dự án và sau đó sử dụng "npm link <một số tên phụ thuộc>"
khoi nguyen

11
cài đặt npm sau khi bạn đã tạo ứng dụng của mình. Nó sẽ cài đặt tất cả các phụ thuộc.

Cảm ơn điều này thực sự có ích. Chuyển đến thư mục node_modules và hơn là cài đặt express đã giải quyết vấn đề của tôi
Megha

@Golo Roden Giải mã câu trả lời của bạn tôi đã thử với giải pháp của bạn nhưng đó là lỗi ném: 'npm ERR! tar.unpack sửa lỗi C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ pack.tgz npm ERR! Windows_NT 6.3.9600 npm ERR! argv "C: \\ Chương trình tập tin \ nodejs \\\\ node.exe" "C: \\ Chương trình tập tin thể hiện "
VjyV

20

Đối với tôi, nó hoạt động khi được cài đặt express cục bộ với tùy chọn --save như sau:

$ npm install express --save

12

Kiểm tra nếu bạn không cài đặt expressmô-đun, sử dụng lệnh này:

 npm install express

và nếu node_modulesthư mục của bạn ở một nơi khác, hãy đặt NODE_PATHbiến môi trường:

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

Trong Windows 10 sau khi cài đặt npm express, nó không thể tự động thêm vào đường dẫn nút, bạn cần thêm thủ công các mô-đun nút vào nó.
Jane

5

Golo đã giải thích rõ về giải pháp, nhưng tôi có thể thêm một sự làm rõ:
đôi khi các mô-đun nút được cài đặt trong

/usr/local/lib/node_modules

và khi bạn khởi chạy các mô-đun blabla.js nút được tìm kiếm trong

/lib

Vì vậy, một giải pháp là tạo ra một liên kết tượng trưng:

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

1
cách dễ dàng hơn -> npm link <module>
Amit G

4

Trong trường hợp của bạn, expressmô-đun của bạn được cài đặt tại C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, nhưng bạn cần phải đưa mô-đun này vào thư mục dự án của bạn. Vì vậy, bạn nên sao chép tệp các expressthư mục mô-đun từ thư mục C:\Users\Dmitry\AppData\Roaming\npm\node_modules\dự án của bạn dưới dạng : C:\ChatServer\Server\node_modules. Nếu bạn không có thư mục có tên 'node_modules' trong thư mục dự án của mình, thì hãy tạo thư mục đó trước và dán các tệp đó vào thư mục này. Phương pháp này làm việc cho tôi trên máy tính windows của tôi. Khởi động lại máy chủ nút của bạn và một lần nữa chạy nút lệnh C:\ChatServer\Server>node server.js. Nó nên hoạt động ngay bây giờ !!!!


Làm việc trên windows 10 quá!
Victor Michael Kosgei

3

Trên hệ điều hành dựa trên Ubuntu, bạn có thể thử

sudo apt-get install node-express

nó hoạt động với tôi trên Mint


3

Do bạn đã cài đặt nút trên hệ thống của mình, hãy cài đặt Express cục bộ cho dự án của bạn bằng cách sử dụng như sau cho Windows:

npm install express

hoặc là

npm install express --save

Bạn có thể cung cấp cho nó quyền truy cập toàn cầu bằng cách sử dụng:

npm install -g express --save

2

Tôi đã có lỗi này trong vscode, mặc dù các mô-đun nơi cài đặt. Tôi đang sử dụng bản thảo và thể hiện. Trong các server.tstập tin, tất cả các mục nhập có gạch chân màu đỏ. Hóa ra tôi đã có một tsconfig.jsontập tin bị lỗi .

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

tạo một thư mục trong đĩa cứng của bạn, ví dụ sample1 và đi đến loại dấu nhắc lệnh: cd và đưa đường dẫn của thư mục sample1 và sau đó cài đặt tất cả các mô-đun ...

npm cài đặt nhanh

npm cài ngọc

npm cài đặt socket.io

và sau đó bất cứ điều gì bạn đang tạo ứng dụng lưu trong thư mục sample1

thử nó...


1

đi đến thư mục ứng dụng của bạn và cài đặt mô-đun express bằng lệnh npm install express --save sau đó liệt kê tất cả các mô-đun cài đặt bằng lệnh npm ls bên dưới, bạn sẽ thấy tất cả các mô-đun cài đặt cục bộ.


1

cài đặt express trên toàn cầu sẽ không hoạt động trên dự án địa phương của bạn, vì vậy bạn cần cài đặt nó cục bộ để sử dụng.

npm install express

Hy vọng điều này sẽ làm việc

Cảm ơn bạn


0

Tôi gặp vấn đề tương tự. Tôi đã cài đặt nhanh trên toàn cầu tại / usr / local / bin /. Khi tôi thực hiện 'npm install', express không được tạo trong node_modules của thư mục cục bộ.

  1. Kiểm tra xem bạn có tên tệp .npmrc trong $ HOME của bạn không
  2. Nếu nó có 'global = true', hãy đổi thành 'global = false'
  3. Bây giờ hãy 'npm install' trong thư mục ứng dụng. Nhiều khả năng, bạn sẽ nhận được tất cả các mô-đun phụ thuộc gói được cài đặt trong node_modules (cục bộ) trong thư mục ứng dụng.

0
  • sudo brew gỡ cài đặt nút
  • cập nhật bia
  • nâng cấp bia
  • dọn dẹp bia
  • nút cài đặt bia
  • sudo chown -R $ (whoami) / usr / local
  • nút liên kết - nút ghi
  • nút cài đặt sudo brew

Điều này làm việc cho tôi trên MacOS X Sierra


0

Tôi không tự hào chia sẻ điều này, nhưng trong trường hợp của tôi, tôi đã có:

 require('express.handlebars')

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

0

Tôi đã có cùng một lỗi sau ví dụ trên cuốn sách này: "Kubernetes Up & Running".
Tôi thấy nhiều câu trả lời đề nghị cài đặt express "bằng tay" nhưng tôi không tin là giải pháp tốt nhất.
Bởi vì chúng tôi đang sử dụng gói.json (tôi có thể thấy nó trong nhật ký) và đúng cách để xây dựng ứng dụng đang chạy npm install, tôi đã thêm phụ thuộc rõ ràng vào tệp pack.json .

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

Tôi nhận được phiên bản hiện tại với npm search express.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.