Nodejs không thể tìm thấy mô-đun cài đặt trên Windows


240

Tôi đang học nodejs tại thời điểm này trên Windows. Một số mô-đun được cài đặt trên toàn cầu với npm.cmd và nodejs không thể tìm thấy các mô-đun đã cài đặt. Lấy ngọc làm ví dụ,

npm install jade -g

Jade được cài đặt trong thư mục "C:\Program Files (x86)\nodejs\node_modules", nhưng đoạn mã sau sẽ bị "Cannot find module 'jade'"lỗi,

var jade = require('jade');

Tuy nhiên, mã sẽ chạy thành công khi ngọc được cài đặt cục bộ (không có tùy chọn -g trong npm). Tôi không muốn sử dụng các mô-đun được cài đặt cục bộ, thật lãng phí không gian đĩa cho tôi. Làm cách nào tôi có thể làm cho các mô-đun được cài đặt toàn cầu hoạt động trên Windows?



3
@AmolMKulkarni: không chắc nó có liên quan ở đây như thế nào. Thêm '.js' vào yêu cầu không giải quyết được vấn đề trên Windows.
Dan Dascalescu

1
@DanDascalescu: Tôi nghĩ bạn đã hiểu nhầm câu trả lời. Mã được đưa ra trong câu trả lời đó là mã của Node.js, cho biết giao diện của gói bạn yêu cầu. Vì vậy, nếu bạn hiểu vị trí và cách tìm tệp, bạn có thể giải quyết vấn đề của mình dễ dàng hơn.
Amol M Kulkarni


Câu trả lời:


349

Thêm một biến môi trường được gọi NODE_PATHvà đặt nó thành %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10) hoặc bất cứ nơi nào npm kết thúc việc cài đặt các mô-đun theo hương vị Windows của bạn. Để được thực hiện với nó một lần và mãi mãi, hãy thêm nó dưới dạng biến Hệ thống trong tab Nâng cao của hộp thoại Thuộc tính Hệ thống (chạy control.exe sysdm.cpl,System,3).

Giải pháp nhanh trong Windows 7+ là chỉ chạy:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

Điều đáng nói NODE_PATHlà chỉ được sử dụng khi nhập mô-đun trong ứng dụng Node. Khi bạn muốn sử dụng các nhị phân của các mô-đun được cài đặt trên toàn cầu trong CLI của mình, bạn cũng cần thêm nó vào PATHnhưng không có node_modulesphần (ví dụ như %AppData%\npmtrong Windows 7/8/10).


Câu chuyện cũ

Bản thân tôi khá mới mẻ với node.js vì vậy tôi có thể không hoàn toàn đúng nhưng theo kinh nghiệm của tôi thì nó hoạt động theo cách này:

  1. -g không phải là một cách để cài đặt các thư viện toàn cầu, nó chỉ là một cách để đặt chúng trên đường dẫn hệ thống để bạn có thể gọi chúng từ dòng lệnh mà không cần viết đường dẫn đầy đủ cho chúng. Nó rất hữu ích, ví dụ, sau đó ứng dụng nút đang chuyển đổi các tệp cục bộ, như ít hơn - nếu bạn cài đặt nó trên toàn cầu, bạn có thể sử dụng nó trong bất kỳ thư mục nào.
  2. Bản thân node.js đã không nhìn vào thư mục toàn cầu npm, nó đang sử dụng một thuật toán khác để tìm các tệp cần thiết: http://nodejs.org/api/modules.html#modules_file_modules (về cơ bản là quét mọi thư mục trong đường dẫn, bắt đầu từ thư mục node_modules hiện tại và kiểm tra nó).

Xem câu hỏi tương tự để biết thêm chi tiết: Làm cách nào để tôi cài đặt một mô-đun trên toàn cầu bằng cách sử dụng npm?


17
Cảm ơn rất nhiều, các liên kết bạn cung cấp rất hữu ích, bây giờ tôi đã rõ hơn nhiều, mặc dù thuật toán tìm kiếm mô-đun có vẻ hơi phức tạp. Cuối cùng, tôi sử dụng biến môi trường NODE_PATH để tham chiếu đường dẫn mô-đun toàn cầu set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modulesvà nó hoạt động như mong đợi. Thật kỳ lạ khi các mô-đun được cài đặt trên toàn cầu được định vị trong '% USERPROFILE% \ Dữ liệu ứng dụng \ npm \ node_modules' trên Windows, trong khi đó, không thể có dấu ngoặc kép trong NODE_PATH.
Cosmore

2
Vui mừng được giúp đỡ. Không thay đổi NODE_PATH đã phá vỡ đường dẫn đến các mô-đun node.js tiêu chuẩn, như FS?
Alexey Ivanov

2
Ngay cả tôi cũng tự hỏi tại sao tôi C:\Program Files\nodejs\node_modules\npm\node_moduleskhông có mô-đun mà tôi vừa cài đặt npm install -g expressvà nó có sẵn trongC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske

1
trong Windows 8, đường dẫn là%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar

9
Nếu bạn muốn tìm ra thư mục node_modules toàn cầu của bạn ở đâu, hãy chạy lệnh npm list -g. Dòng đầu ra đầu tiên sẽ là cha mẹ của thư mục node_modules toàn cầu-- nói cách khác, thư mục node_modules toàn cầu là {output}\node_modules. Nó cũng in ra thư mục cài đặt khi bạn chạynpm install --global {xyz}
cowlinator 28/03/2016

34

nếu bạn đang ở trong nền tảng windows7, có lẽ bạn nên thay đổi NODE_PATH như thế này: %AppData%\npm\node_modules


7
đó là trong appdata \ roaming trên windows 8
aswell

6
Tôi đang ở trên windows 8.1 với npm 2.5.1 và tôi đã cài đặt NODE_PATH của mình dưới dạng tài liệu, nhưng nó vẫn không thể tìm thấy các gói đã cài đặt của tôi. Suy nghĩ?
JaKXz

5
Trong windows 10, nó chỉ nên là% AppData% \
npm

Trong trường hợp của tôi (W10), đó là% AppData% \ Roaming \ npm
Hinrich

32

Tôi biết tôi có thể đánh thức một zombie nhưng tôi nghĩ đây vẫn là một vấn đề, nếu bạn cần truy cập toàn cầu vào các mô-đun nút trên Windows 7, bạn cần thêm điều này vào đường dẫn biến toàn cục của mình:

C:\Users\{USER}\AppData\Roaming\npm

Quan trọng: chỉ có điều này mà không có node_modulesphần, tôi đã mất nửa giờ để thấy điều này.


4
Ngoài ra, đối với người dùng Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson

4
Cảm ơn lời khuyên về việc loại bỏ node_modulesmột phần, đã đấu tranh với điều này quá!
danguilherme

20

Để làm cho nó hoạt động trên windows 10, tôi đã giải quyết nó bằng cách thêm thư mục %USERPROFILE%\AppData\Roaming\npmvào PATH của tôi. Có \node_modulesthêm như thế này: %USERPROFILE%\AppData\Roaming\npm\node_modules\không làm việc cho tôi.


7
Hay đơn giản hơn, `% AppData% \ npm`
Dan Diplo

Thật là kỳ lạ khi làm việc! Tôi đã săn lùng vấn đề này trong hai ngày, theo nghĩa đen. Đây là giải pháp tối nghĩa nhất mà tôi đã thử và là giải pháp đầu tiên có hiệu quả. Cảm ơn bạn rất nhiều.
Sẽ

vâng, chỉ cần thêm vào pathvariabele môi trường, sau đó chúng ta có thể chạy nó trực tiếp trong windows 10
Zhu Xiaohu

1
Nó sẽ chỉ ra cách thực hiện điều này bằng một ví dụ, thay vì nói những điều như "chỉ cần thêm vào ..."
Gabe Hiemstra

14

Tôi sẽ chỉ trích dẫn từ bài viết trên blog của nút này ...

Nói chung, quy tắc của ngón tay cái là:

  • Nếu bạn đang cài đặt một cái gì đó mà bạn muốn sử dụng trong chương trình của mình, sử dụng yêu cầu ('bất cứ điều gì'), sau đó cài đặt nó cục bộ, tại thư mục gốc của dự án của bạn.
  • Nếu bạn đang cài đặt thứ gì đó mà bạn muốn sử dụng trong trình bao của mình, trên dòng lệnh hoặc thứ gì đó, hãy cài đặt nó trên toàn cầu, để các nhị phân của nó kết thúc trong biến môi trường PATH của bạn.

...

Tất nhiên, có một số trường hợp bạn muốn làm cả hai. Coffee-script và Express đều là những ví dụ điển hình về các ứng dụng có giao diện dòng lệnh, cũng như thư viện. Trong những trường hợp đó, bạn có thể thực hiện một trong những điều sau đây:

  1. Cài đặt nó ở cả hai nơi. Nghiêm túc mà nói, bạn có ngắn trên không gian đĩa? Thật tốt, thật đấy. Chúng là những chương trình JavaScript nhỏ.
  2. Cài đặt nó trên toàn cầu và sau đó npm link coffee-script hoặc npm link express (nếu bạn đang ở trên một nền tảng hỗ trợ các liên kết tượng trưng.) Sau đó, bạn chỉ cần cập nhật bản sao toàn cầu để cập nhật tất cả các liên kết tượng trưng.

10
They’re tiny JavaScript programs.Một số thư viện này chắc chắn không nhỏ!
UpTheCux

1
@UpTheCalet Tôi tự tin rằng anh ấy đã đề cập đến kích thước trong phạm vi không gian đĩa. Chúng là các tệp văn bản. Họ là khách quan nhỏ.
Phillip Copley

12

Để làm cho nó ngắn, sử dụng npm link jadetrong thư mục ứng dụng của bạn.


4
Dường như npm link jadekhông thể hoạt động trên Windows, npm trả về thông báo lỗi như sau:npm ERR! Error: npm link not supported on windows
Cosmore

1
Hiện tại, như phiên bản v0.8.9
Gianfranco P.

@beyonddoor: Bạn cần chạy npm linktừ cửa sổ lệnh Administrator.
Ông trùm

12

Đã thử thêm / chỉnh sửa các biến môi trường và đưa ra kết luận rằng:

  1. Chỉnh sửa / thêm User variables(của hộp phía trên) thay vì System variables(của phần dưới); nếu không, bạn phải "chạy như quản trị viên" để làm cho nó hoạt động.
  2. Bổ sung ;%AppData%\npmđể Pathsử dụng nó như một công cụ dòng lệnh (nếu được hỗ trợ, thích jshintgrunt-cli).
  3. Tạo NODE_PATHvà thiết lập nó %AppData%\npm\node_modulesđể require('<pkg_name>')trong các kịch bản mà không cần cài đặt nó trong thư mục dự án. (Nhưng npm linkđược đề xuất cho yêu cầu này nếu bạn đang làm việc trên HĐH với mklinkVista và mới hơn.)

Môi trường thử nghiệm:

  • Giành chiến thắng 7 (Ent., 64-bit, SP1), Node.js 4.2.4, npm 2.14.12
  • Giành chiến thắng 8.1 (Ent., 64-bit), Node.js 0.10.30, npm 1.4.21

9

Tôi đã có một thời gian khủng khiếp để các mô-đun toàn cầu làm việc. Cuối cùng, tôi đã thêm một cách rõ ràng vào C:\Users\yourusername\AppData\Roaming\npmbiến PATH trong Biến hệ thống. Tôi cũng cần phải có biến này xuất hiện trước biến đường dẫn nodejs trong danh sách.

Tôi đang chạy Windows 10.


đây là điều duy nhất làm việc cho tôi chạy trên windows 8
charlie carver

1
Đây là điều duy nhất làm việc cho tôi, cảm ơn bạn!
devqon

6

Tôi gặp vấn đề này trên Windows 7, đang chạy

npm install -g gulp

là quản trị viên trong khi đăng nhập như một người dùng bình thường.

Giải pháp: Khi thực hiện cài đặt giống như người dùng bình thường (không phải "chạy như quản trị viên" cho cmd), tất cả đều ổn. Tôi đoán nó có liên quan đến đường dẫn cài đặt và tìm kiếm mặc định.


1
Để làm rõ điểm này hơn một chút ... Khi Node được cài đặt với tư cách quản trị viên, nó cập nhật đường dẫn hệ thống để bao gồm một tham chiếu đến thư mục mô-đun nút toàn cầu của quản trị viên. Khi một người dùng mới cài đặt một cái gì đó trên toàn cầu, nó sẽ cài đặt vào một thư mục mô-đun nút khác. Mỗi người dùng khác với người dùng đã cài đặt Node sẽ cần cập nhật đường dẫn của họ để bao gồm thư mục mô-đun nút toàn cầu. Nếu bạn cài đặt và sử dụng nút trên cùng một tài khoản thì điều này sẽ không cần thiết.
dpsthree

Windows 8.1 pro với nodejs v6.9.4, để thiết lập đường dẫn chạy: C: \ Program Files \ nodejs \ gậtevars.bat
Robot70

4

Từ kinh nghiệm của tôi với win8.1 npm cài đặt các mô-đun trên C:\Users\[UserName]\AppData\Roaming\npm\node_modules nhưng vô tình tìm kiếm chúng trên đó C:\Users\[UserName]\node_modules.

Một mô-đun tham chiếu giải pháp đơn giản trong ứng dụng theo đường dẫn đầy đủ:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");

4

Đối với các cửa sổ, mọi người đều nói rằng bạn nên đặt các biến môi trường cho các mô-đun nodejs và npm, nhưng bạn có biết tại sao không? Đối với một số mô-đun, chúng có công cụ dòng lệnh, sau khi cài đặt mô-đun, có tệp [mô-đun] .cmd trong C: \ Program Files \ nodejs và được sử dụng để khởi chạy trong lệnh window. Vì vậy, nếu bạn không thêm đường dẫn chứa tệp cmd vào các biến môi trường % PATH% , bạn sẽ không khởi chạy chúng thành công thông qua cửa sổ lệnh.


2

Tôi đã có cùng một vấn đề, cố gắng cài đặt bower với npm install -g bower

Tôi nghĩ rằng điều này là do nút được cài đặt bởi người dùng khác , không phải tôi.

Tôi gỡ cài đặt nút, và sau đó tôi cài đặt lại nó. Trong quá trình cài đặt, tôi thấy văn bản này cho tùy chọn Thêm vào PATH> mô-đun npm :

Thông báo trong cài đặt nút

nhập mô tả hình ảnh ở đây

Sau khi cài đặt nút, tôi thực hiện npm install -g bowerlại. Và bây giờ Bower hoạt động.

Chắc chắn không cần thiết cài đặt lại nút với người dùng riêng, như tôi. Giải pháp phải thông qua các biến NODE_PATH hoặc PATH , như những người dùng khác đã giải thích.

Điều này chỉ để nhận xét rằng sự cố này chỉ xảy ra nếu nút đã được cài đặt bởi người dùng khác (hoặc nếu trong quá trình cài đặt, tùy chọn Thêm vào PATH> mô-đun npm chưa được đánh dấu).


2

Đối với tôi đã làm việc trên Windows 10 npm config set prefix %AppData%\npm\node_modules


1

Ngoài ra, bạn có thể thêm tiền tố~/.npmrc phải . Tôi đã nhận được 64 Win7.C:\Program Files\nodejs


1

Tôi vấp phải câu hỏi này vì tôi muốn sử dụng node.js với visual studio 2015 trên máy tính mới của tôi với windows 10. Tôi đã sử dụng node.js trên windows 7 và 8 và 8.1 Không bao giờ có vấn đề node.js tìm mô-đun. Tôi sử dụng một node.js kế thừa 0.10,39 vì tôi phải sử dụng phiên bản này vì mô-đun nối tiếp và RFXCOM.

Câu trả lời cho windows 10 là đặt NODE_PATH trong các biến môi trường với C: \ Users \ User \ node_modules.


1
Ơ, không. (Windows 10 tại đây ..) Tôi thấy một số mô-đun tại C:\Users\User\node_modules Tôi thấy một số mô-đun tại C:\Users\User\AppData\Roaming\npm\node_modules Tôi thấy một số mô-đun tại C:\Users\User\node_modules Cũng nằm ở C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Không chắc chắn điều này xảy ra như thế nào. Đó là cái gì, và tại sao họ lại làm theo cách đó?
zipzit

1

Đối với Windows 10, tôi đã phải cài đặt cục bộ gulp trong thư mục:

C: \ Users \ myaccount \ AppData \ Roaming \ npm \ node_modules

npm install gulp

Điều này đã khắc phục vấn đề "gulp của tôi không được công nhận"


0

Chỉ cần tải xuống và cài đặt lại nút từ đây và điều này sẽ khắc phục tất cả các vấn đề về đường dẫn.

Đừng quên khởi động lại dấu nhắc lệnh hoặc thiết bị đầu cuối của bạn.


0

Tất cả các câu trả lời trên không làm việc cho tôi. Điều duy nhất hoạt động cuối cùng là thêm% AppData% \ npm vào biến Đường dẫn môi trường xóa hai tệp ng trong C: \ Program Files \ nodejs.

Các gói ng không được cài đặt trong C: \ Program Files \ nodejs \ node_modules, vì vậy rõ ràng việc sử dụng nhị phân ng từ thư mục nodejs sẽ không hoạt động.

Tôi không chắc tại sao nó lại tìm kiếm trong thư mục này, vì tôi đã cấu hình - biến môi trường PATH - .npmrc trong C: \ Users \ MyUser - Đã thử thêm biến hệ thống và / hoặc NODE_PATH


-4

nếu bạn đang sử dụng windows, phải mất một số bước, 1) tạo một tệp có tên là pack.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

trong đó hello là tên của gói và * có nghĩa là phiên bản mới nhất của sự phụ thuộc của bạn

2) mã cho thư mục dự án của bạn và chạy lệnh sau

cài đặt npm

Nó cài đặt các phụ thuộc


4
Điều này không cài đặt nó trên toàn cầu (mà câu hỏi yêu cầu). Điều này kéo sự phụ thuộc vào ứng dụng
bryanmac

Tôi đã thử mọi thứ được liệt kê ở trên để thử và thuyết phục cài đặt node.js của mình để nhận ra các mô-đun được cài đặt trên toàn cầu và KHÔNG CÓ của nó hoạt động. Ngay cả sau khi gỡ cài đặt và cài đặt lại nút (v8.11.3 LTS), mỗi lần tôi cố gắng đưa ra lệnh request ("mongodb") trong tập lệnh node.js, tôi vẫn gặp lỗi SAME: "Không thể tìm thấy mô đun mongodb". Tuy nhiên, nếu tôi phát lệnh "npm ll -g mongodb", NPM sẽ cho tôi biết mô-đun được cài đặt. Ai đó có thể XIN cho tôi một số thông tin rằng CÔNG TRÌNH với vấn đề này?
David Edwards

CẬP NHẬT: Saulius ở trên đã cung cấp một cách giải quyết thực sự hoạt động, cụ thể là chỉ định đường dẫn đầy đủ đến mô-đun trong câu lệnh JavaScript yêu cầu. Nhưng nếu quan sát đã nêu của anh ấy về việc tìm kiếm node.js trong các thư mục sai cho các mô-đun đã cài đặt là chính xác, ai đó có thể cảnh báo cho các nhà phát triển node.js về điều này không? Bởi vì vấn đề VẪN ảnh hưởng đến v8.11.3 LTS.
David Edwards
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.