2012-02-03 24 views
13

Tôi đã cài đặt NVM cho Node.js sử dụng các hướng dẫn từ bài đăng này:Node quản lý phiên bản (NVM) NPM cài đặt module vào thư mục chung

http://www.backdrifter.com/2011/02/18/using-nvm-and-npm-to-manage-node-js/

Khi tôi chuyển đổi giữa các phiên bản nút và sau đó sử dụng NPM để cài đặt một mô-đun, tất cả các mô-đun được đặt trong cùng một thư mục 'node_modules' (~/node_modules /) thay vì trong thư mục 'node_modules' cụ thể cho phiên bản nút đó?

Bất kỳ ý tưởng nào về cách khắc phục điều này?

Trả lời

29

Căn cứ ý kiến ​​từ https://github.com/creationix/nvm/pull/97:

Khi cài đặt gói với NPM sử dụng công tắc toàn cầu -g gói kết thúc trong thư mục thích hợp (ví dụ: .nvm/$ VERSION/lib/node_modules) Tuy nhiên, nút không thể yêu cầu nó vì nó bằng cách nào đó không tìm kiếm trên tiền tố của nó.

Vì vậy, sử dụng npm install -g xxxxx sẽ đặt mô-đun vào đúng vị trí cho NVM nhưng nếu bạn cố gắng require một trong số họ không thể tìm thấy mô-đun. Tôi vẫn đang chơi xung quanh với điều này và sẽ cập nhật nếu tôi tìm thấy một giải pháp.

Cập nhật

đâu NPM đặt node_modules? (xem https://docs.npmjs.com/files/folders)

  • Cài đặt cục bộ (mặc định): đặt nội dung vào ./node_modules của gói gốc hiện tại.
  • Cài đặt chung (với -g): đặt nội dung vào/usr/local hoặc bất cứ nơi nào nút được cài đặt.
  • Cài đặt cục bộ nếu bạn định truy cập require().
  • Cài đặt nó trên toàn cầu nếu bạn định chạy nó trên dòng lệnh.
  • Nếu bạn cần cả hai, hãy cài đặt ở cả hai nơi hoặc sử dụng npm link.

Vì vậy, những gì tôi đã làm là chạy npm init (xem http://npmjs.org/doc/init.html) trong thư mục gốc của dự án của tôi đã tạo package.json. Bây giờ khi tôi chạy npm install xxxxx nó tạo ra một dir node_modules trong thư mục dự án của tôi (mà tôi thêm vào .gitignore của tôi). Điều này làm việc cho các mô-đun mà tôi yêu cầu trong mã của tôi.

Đối với các lệnh như CoffeeScript tôi cài đặt với npm install -g coffee-script, đặt nó vào đúng thư mục (.nvm/$ VERSION/lib/node_modules). Mặc dù tôi không thể yêu cầu các mô-đun này (liên kết npm nên giải quyết vấn đề này) Tôi có thể chạy các lệnh - tức là coffee.

+0

Cuối cùng là một câu trả lời hay cho việc này, đã đập đầu tôi vào lúc này. –

1

Tôi vừa cài đặt nhanh trên toàn cầu (-g) và gặp sự cố khi yêu cầu ("thể hiện"). Cũng giống như Jesse Vogt cho biết tôi chỉ cài đặt lại express nhưng lần này không có -g như thế này: "sudo npm install express" và bây giờ đang hoạt động hoàn hảo!

+0

Bạn có thể giải thích lý do tại sao hoạt động đó không? –

+0

Thành thật với bạn; Tôi không biết, tôi là người mới khá với điều này. Tuy nhiên, lướt trên web mà Jesse còn lại (https: //docs.npmjs.com/get-start/installation-npm-packages-local) Tôi tìm thấy những điều sau đây: "Nếu bạn muốn phụ thuộc vào gói từ mô-đun của riêng bạn bằng cách sử dụng một cái gì đó như yêu cầu của Node, thì bạn muốn cài đặt cục bộ ..." Tôi không hiểu rõ sự khác biệt nhưng chắc chắn nếu bạn cần sử dụng require() để chạy một máy chủ, bạn sẽ cài đặt cục bộ (w/o the -g), bởi vì nó làm việc cho tôi. –

+0

Cảm ơn bạn đã xây dựng :) –

Các vấn đề liên quan