Mô-đun npm của tôi nên được cài đặt ở đâu trên Mac OS X?


82

Tôi đã cố gắng nâng cấp phonegapqua npmkhi tôi bắt đầu gặp sự cố. Truyện dài ngắn, có hai node_modulesthư mục trên máy tính của tôi.

/usr/local/lib/node_modules
/usr/local/share/npm/lib/node_modules

Khi tôi chạy npm upgrade -g phonegap, có vẻ như npmcập nhật bản sao của gói nằm trong đó /usr/local/lib/node_modules. Tuy nhiên, nếu tôi which phonegapthấy rằng liên kết tượng trưng trỏ đến cài đặt cũ hơn tại /usr/local/share/npm/lib/node_modules.

Ngoài ra, khi tôi cố gắng cài đặt một gói độc lập chẳng hạn như express, các tệp được cài đặt trong /usr/local/lib/node_modulesthư mục, nhưng không có liên kết biểu tượng nào với tệp thực thi được tạo ở bất kỳ đâu trong của tôi $PATH.

Hai câu hỏi:

  • Thư mục nào thích hợp cho các mô-đun nút trên Mac OS X?
  • Làm cách nào tôi có thể cấu hình npmđể liên kết các tệp thực thi trong $PATHkhi nó cài đặt phần mềm?

Điểm thưởng: Cách cài đặt có nodeảnh hưởng đến cấu hình không? Có rất nhiều lựa chọn .


CHỈNH SỬA : Tôi đã phát hiện ra rằng các liên kết tượng trưng đang được tạo trong của tôi /usr/local/bin, nhưng của tôi .bash_profileđã được thiết lập /usr/local/share/npm/bintrước /usr/local/bintrong của tôi $PATH. Tôi lờ mờ nhớ rằng đã thêm đường dẫn đó vào hồ sơ của mình vào một thời điểm nào đó, nhưng tôi không chắc tại sao.

Vì vậy, câu hỏi bây giờ trở thành: làm thế nào tôi kết thúc với hai node_modulesthư mục khác nhau trên máy tính của mình và tại sao tôi muốn có của tôi node_modulestrong share/npm/libthư mục con thay vì ngay trong /usr/local/lib?

Câu trả lời:


114

/usr/local/lib/node_modules là thư mục chính xác cho các mô-đun nút được cài đặt toàn cầu.

/usr/local/share/npm/lib/node_moduleskhông có ý nghĩa gì đối với tôi. Một vấn đề ở đây là bạn bối rối vì có hai thư mục được gọi là node_modules :

/usr/local/lib/node_modules
/usr/local/lib/node_modules/npm/node_modules

Cái sau có vẻ là các mô-đun nút đi kèm với Node, ví dụ lodash, khi cái trước là mô-đun Node mà tôi đã cài đặt bằng cách sử dụng npm.


1
Sự khác biệt giữa hai nút này là gì? Đối với người dùng OS X được khuyến nghị khi cài đặt để sử dụng một từ nút. Tốt hơn nên chuyển sang cài đặt npm thích hợp?
alicia

2
Đã cài đặt npm2 từ macports, các đường dẫn của bạn không có ở những vị trí đó, cũng như không có trong / opt / local / share ..
holms

71

Thomas David Kehoe thứ hai , với lời cảnh báo sau:

Nếu bạn đang sử dụng trình quản lý phiên bản nút (nvm), mô-đun nút toàn cầu của bạn sẽ được lưu trữ dưới bất kỳ phiên bản nút nào bạn đang sử dụng tại thời điểm bạn lưu mô-đun.

Vì vậy ~/.nvm/versions/node/{version}/lib/node_modules/.


6
Chính xác những gì tôi đang tìm kiếm.
ap_snitch 20/02

56
npm root -g

để kiểm tra vị trí toàn cầu của npm_modules


4

Nếu bạn muốn biết vị trí của các gói NPM, bạn nên:

which npm // locate a program file in the user's path SEE man which
// OUTPUT SAMPLE
/usr/local/bin/npm
la /usr/local/bin/npm // la: aliased to ls -lAh SEE which la THEN man ls
lrwxr-xr-x  1 t04435  admin    46B 18 Sep 10:37 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js

Vì vậy, cho rằng bản thân npm là một gói NODE, nó được cài đặt ở cùng một vị trí với các gói khác ( EUREKA ). Vì vậy, để xác nhận bạn nên cd vào node_modules và liệt kê thư mục.

cd /usr/local/lib/node_modules/
ls
#SAMPLE OUTPUT
@angular npm .... all global npm packages installed

HOẶC LÀ

npm root -g

Theo bình luận của @anthonygore


4
Dễ dàng hơn: -g gốc NPM
anthonygore

1
cho tôi, npm root -gwhich npmkhông cho kết quả tương tự. Tôi muốn gỡ cài đặt expo-clivà tôi đã thành công bằng cách xóa expovà các expo-clithư mục từ /usr/local/bin/npm. Xin cảm ơn @ T04435!
Aleksandar
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.