Các mô-đun riêng của ứng dụng Node.js. Đặt chúng ở đâu?


8

Tình huống sẽ là:

Tôi phát triển 2 dự án trong môi trường phát triển Node.js của mình, P1 và P2.

P1 yêu cầu phát triển hai mô-đun đơn giản, mod1 và mod2, được lưu trữ trong P1/lib. Mỗi một trong các mô-đun này giải quyết tìm thấy các phụ thuộc bên ngoài của chúng trong P1/node_modules. Các phụ thuộc cần thiết cho P1 đã được cài đặt trong thư mục này qua npm.

Bây giờ hình ảnh chúng tôi muốn sử dụng lại mod1 trong P2 khác, đây là những nghi ngờ của tôi xuất hiện. Tôi có thể ...

  • Chỉ cần sao chép mod1 vào P2/lib. Nhân rộng, vì vậy tôi thậm chí không xem xét tùy chọn này.

  • Từ P2, tham chiếu mod1 từ P1 : require($PROJECTS_DIR + '/P1/lib/mod1'). Không phải là một lựa chọn tốt, cách này P2 sẽ phụ thuộc vào P1.

  • Đặt mod1 vào thư mục cấp cao hơn hoặc sử dụng NODE_PATH, để P1 và P2 có thể giải quyết nó chỉ bằng cách làm require('mod1'). Tuy nhiên, khi triển khai, tôi cũng nên triển khai thư mục cấp cao hơn này có vẻ hơi bẩn.

  • Tôi muốn coi mod1 là mô-đun npm, vì vậy nó có thể dễ dàng cài đặt trong mọi dự án hoặc môi trường, tuy nhiên, trong trường hợp cụ thể này, tôi không thể xuất bản mô-đun thành npm vì quá cụ thể của dự án. Tôi có thể tạo một kho npm riêng và đặt mod1 vào trong. Ý chính của việc này sẽ là thiết lập nó để được truy cập từ môi trường sản xuất. Nó có đáng không?

  • Điều gì về việc đặt tất cả lại với nhau node_modules? (depencencies bên ngoài và thư viện của riêng tôi). Điều đó sẽ rất tuyệt vì các mô-đun có thể chỉ được yêu cầu như 'Yêu cầu (' mô-đun '). Nhưng nó cũng có vẻ khá bẩn.

  • Không chắc chắn làm thế nào npm linksẽ làm việc khi triển khai. Nó tạo ra một liên kết tượng trưng, ​​không được theo dõi khi cam kết mã thông qua Git hoặc SVN. Nếu tôi chạy npm installtrong sản xuất, nó cũng sẽ cài đặt mô-đun được liên kết chứ?

Không có điều nào ở trên khá thỏa mãn tôi. Tôi không biết liệu một trong số này có phù hợp không, hoặc các bạn có đề xuất nào khác, nhưng, có cách nào ưu tiên để cấu trúc thư viện riêng để chúng có thể dễ dàng sử dụng lại trong các dự án khác không?

Câu trả lời:


6

Sử dụng npm link. Nó cho phép bạn có một mô-đun bất cứ nơi nào bạn muốn và sau đó bạn có thể "liên kết" nó trong dự án của bạn (một liên kết tượng trưng sẽ được tạo trong thư mục node_modules / của bạn), do đó bạn có thể sử dụng nó với require('mod1'). Mô-đun của bạn phải tương thích npm.

Thêm thông tin tại đây: https://docs.npmjs.com/cli/link

Về mối quan tâm riêng tư của bạn, npm nghĩ về điều này và cung cấp privatetùy chọn. Xem tại đây: https://docs.npmjs.com/misc/regology (Truy cập: "Tôi không muốn gói của mình được xuất bản trong sổ đăng ký chính thức. Nó là riêng tư.")

Đối với mỗi phụ thuộc mô-đun, bạn chỉ cần xác định chúng trong gói.json.


Cảm ơn Florian, khi tôi cam kết thay đổi qua svn hoặc git, tôi không nhận được liên kết tượng trưng. Có nghĩa là tôi sẽ phải sử dụng npm linktrong môi trường sản xuất? Hoặc là nó ẩn trong npm install.Bất kỳ cách nào để chỉ định nó trong pack.json?
jaime

@jaime git và svn theo liên kết tượng trưng.
Florian Margaine

Trong môi trường sản xuất, tôi sẽ chạy một tập lệnh để đóng gói các mô-đun trong thư mục node_modules /.
Florian Margaine

@jaime Bạn chỉ cần sử dụng npm linkkhi phát triển.
Daniel

docs.npmjs.com/ Kẻ - 404's. Nhưng thực sự cách tốt nhất để giữ mọi thứ riêng tư là không đưa chúng lên internet. Có vẻ như liên kết cũng là tùy chọn tốt nhất ... ngoại trừ npmjs.org/doc/link.html 404's. Phải yêu thối link.
Pat
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.