2012-12-13 32 views
5

Tôi muốn có các mô-đun Nút được lưu trữ ở một nơi tập trung, ví dụ: /var/http/common/ và để ứng dụng của tôi hoạt động ở một vị trí khác, theo số /var/http/www/apps/APP#1_NAME/.Tập trung node_modules

tôi đã có thể thiết lập các đòi hỏi trong server.js sử dụng đường dẫn tương đối như require('../../../common/express'), nhưng từ việc đọc posts bởi tác giả NPM của, có vẻ như tôi đang hack nó, và tôi nên sử dụng npm link để tạo ra một tài liệu tham khảo "địa phương" cho Node (liên kết với cài đặt thực).

đầu tiên tôi cài đặt module nút của tôi trong /var/http/common/, nhưng sau đó khi tôi đã cố gắng để tạo ra các liên kết tượng trưng (npm link ../../../common/node_modules/express), NPM dường như đã coi đó như một nhanh "toàn cầu" cài đặt và cài đặt lại trong /usr/local/lib/node_modules/express (và tạo ra một "địa phương" symlink để nó ./node_modules/express ->) mà không phải là những gì tôi mong đợi sẽ xảy ra. Đây có phải là điều tôi thực sự muốn không? Tôi có nên sử dụng npm config set prefix trước tiên không?

Trả lời

3

Hóa ra: Tôi nên có thiết lập npm config set prefix trước khi làm bất cứ điều gì khác.

Có thể xuất hiện npm linknpm install -g làm điều tương tự; tuy nhiên trong khi, npm link sẽ cài đặt mô-đun trên toàn cầu, nó cũng tạo liên kết tượng trưng cục bộ trong node_modules trỏ đến $prefix/lib/node_modules/$module. MaxGfeller không chính xác: Nếu không có liên kết tượng trưng cục bộ đó, Node sẽ phàn nàn rằng nó không thể tìm thấy các mô-đun (được cài đặt toàn cầu). Này được xác định qua những nỗ lực riêng của tôi cũng như được suy ra từ npm help folders:

• Cài đặt nó địa phương nếu bạn đang đi để require() nó.

• Cài đặt nó trên toàn cầu nếu bạn định chạy nó trên dòng lệnh dòng.

• Nếu bạn cần cả, sau đó cài đặt nó ở cả hai nơi, hoặc sử dụng NPM liên kết.

Điều này không giải quyết cụ thể những gì tôi đã hỏi: Tôi muốn có các mô-đun được lưu trữ ở vị trí trung tâm (được nhiều ứng dụng Node truy cập) nhưng tôi không quan tâm đến việc sử dụng chúng từ lệnh như— Tôi chỉ muốn sử dụng chúng trong require('').

Đối với câu hỏi của tôi về cách sử dụng đường dẫn tương đối trong require(''), tôi vẫn chưa nhận được/tìm thấy câu trả lời có thẩm quyền cho điều đó, nhưng dường như từ sự tồn tại của npm link sử dụng đường dẫn rel không phải là ý định của tác giả. Đối với tôi, nó có vẻ giống như một trường hợp của six-of-one, nhưng tôi muốn vẫn phù hợp với tiêu chuẩn của Node.

+0

nghĩ rằng bạn cần $ NODE_PATH được đặt để tránh liên kết sym cục bộ –

2

Bạn có thể cài đặt mô-đun nút của mình trên toàn cầu bằng cách thêm '-g' vào lệnh. Ví dụ:

npm install express -g 

Trong mã của bạn, bạn có thể sử dụng nó thường:

require('express'); 

Các module này sau đó được lưu trữ trong/usr/local/lib/node_modules

+0

Hi Max. Cảm ơn, nhưng tôi không muốn chúng được cài đặt ở vị trí đó (Tôi có nên sử dụng npm config set prefix trước không?). Ngoài ra tôi đã hỏi vì tôi đã không chạy npm cài đặt, tôi chạy npm liên kết; vì vậy tôi muốn biết lý do tại sao nó cũng chạy một cài đặt - có thể vì nó phát hiện ra rằng các mô-đun không được cài đặt ở vị trí toàn cầu mặc định? – jacob