2013-05-10 33 views
11

Gần đây tôi đã bắt đầu chơi với node.js, nhưng tôi đã bị mất trong một mớ hỗn độn lớn của các phiên bản khác nhau của nút, npm, nvm và các gói khác. Tôi không biết những gì được cài đặt trên toàn cầu và những gì được cài đặt tại địa phương (và nếu tại địa phương, làm thế nào để các gói biết phiên bản nào của nút mà họ có thể sử dụng?).Node.js đặt các tệp của nó ở đâu?

Tôi muốn có một số bản tóm tắt về những tùy chọn cài đặt khác nhau thực hiện. Cụ thể:

  • đâu nút cài đặt khi tôi sử dụng nvm, apt-get, make install hoặc khi sử dụng những cách khác?
  • Bạn có nên cài đặt nút cục bộ không?
  • Tại sao nvm thay đổi số ~/.profile thay vì tự cài đặt trong một số thư mục bin có thể nhận dạng hệ thống?
  • Tôi thấy rằng nvm có thể cài đặt các phiên bản khác nhau của nút cùng với nhau - tại sao tôi muốn thực hiện việc này? Tôi có thể cài đặt chúng cục bộ thay vào đó, phải không?
  • Trường hợp nào npm cài đặt gói? Tôi thấy rằng nó kiểm tra gói phiên bản aganist của Node, điều gì sẽ xảy ra với các gói này khi nút được nâng cấp?
  • Trong trường hợp nào tốt hơn để sử dụng cài đặt toàn cầu hoặc cục bộ? Tôi nên đặt các gói của mình ở đâu (và vị trí đặt chúng theo mặc định?)
  • Sự khác nhau giữa npm, nvmnave là gì?

EDIT: Có rất nhiều cách để cài đặt nút here, điều này làm cho tôi bối rối hơn ...

Trả lời

16

Nút được cài đặt khi nào tôi sử dụng nvm, apt-get, make install hoặc khi sử dụng các cách khác?

apt-get cài đặt tất cả phần mềm, không chỉ nút, trên hệ thống tệp theo quy ước Ubuntu nơi lưu trữ tệp nhị phân, tệp người dùng, tệp được chia sẻ, nhật ký, v.v. chỉ có phiên bản nhất định của nút được xác định bởi chu kỳ phát hành phân phối. Nếu có bản cập nhật, chúng sẽ được cài đặt với apt-get update; apt-get upgrade Tuy nhiên, phiên bản mới nhất của một số ứng dụng sẽ không khả dụng cho đến khi nó được phân phối vào bản phân phối. Ví dụ: nút v0.x.y có thể không có sẵn cho đến khi Ubuntu 13.10 cách duy nhất để có được sẽ là cài đặt nó theo cách thủ công. Mặt tốt của apt-get hoặc trình quản lý gói hệ thống khác là nó quản lý các bản cập nhật và loại bỏ gói cho bạn. Nó lưu trữ tất cả dữ liệu về gói phần mềm trong cơ sở dữ liệu riêng của nó. Bạn luôn có thể xóa nút với apt-get remove node và đó là nó.

make install cài đặt gói theo cách thủ công nhưng được xem là có hại. Không bao giờ sử dụng make install chủ yếu bởi vì bạn sẽ không thể xóa gói dễ dàng, bạn sẽ phải đọc Makefile và xóa thủ công tất cả các tệp được cài đặt bởi nó. Trong trường hợp bạn muốn sử dụng make install, luôn có sẵn checkinstall. Đó là một phần mềm tạo ra một gói bản địa và đăng ký nó với hệ thống. Khi bạn quyết định xóa gói, bạn có thể thực hiện việc này bằng một lệnh thay vì nhiều lệnh. wiki link; Ubuntu guide on checkinstall

Hiện tại nvm tập lệnh là node version manager. Nó rất hữu ích và dễ sử dụng. Nó cho phép bạn có nhiều phiên bản của nút được cài đặt và sử dụng song song trên máy của bạn. Nó không biên dịch nút từ nguồn như make install vì vậy nó rất nhanh. nó không phụ thuộc vào chu kỳ phát hành phân phối của bạn để bạn có quyền truy cập vào tất cả các phiên bản nút có sẵn tại thời điểm này. nvm tải xuống các tệp nhị phân được biên dịch trước và hoàn hảo để sử dụng chung. Nó lưu trữ các tập tin nút của nó trong thư mục riêng của nó tại địa phương vì vậy trong trường hợp bạn muốn so sánh một cái gì đó giữa các phiên bản nút khác nhau thật dễ dàng để làm.

Bạn có nên cài đặt nút cục bộ không?

Nếu tại địa phương bạn có nghĩa là sử dụng nvm thì nó rất tốt để phát triển và thử nghiệm. Không chắc chắn về tác động và lợi ích về hiệu suất sản xuất giữa việc cài đặt nó từ nguồn hoặc sử dụng nvm các tệp nhị phân được biên dịch trước. Tôi sử dụng nvm để phát triển và cài đặt từ nguồn trong sản xuất. Tuy nhiên, nếu ai đó có thể giải thích vấn đề này thêm nữa, tôi sẽ rất vui khi tìm hiểu thêm.

Tại sao nvm thay đổi ~/.profile thay vì cài đặt chính nó trong một số thư mục bin có thể nhận dạng hệ thống?

nvm không phải là tệp thực thi. Nó là một tập hợp các hàm bash có nguồn gốc từ vỏ và có thể được sử dụng riêng biệt. Bạn có thể gọi nvm_lsnvm_ls_remote và những người khác không có tập lệnh chính sau được nhập vào trình bao của bạn. Tập lệnh chính nào phân tích cú pháp các đối số dòng lệnh và in kết quả đầu ra trong trường hợp ví dụ `nvm_ls_remote '.

trong ~ /.profile dòng sau được thêm

[[ -s /home/USERNAME/.nvm/nvm.sh ]] && . /home/USERANME/.nvm/nvm.sh # This loads NVM 

tải tất cả các chức năng vào shell của bạn

tôi thấy nvm có thể cài đặt phiên bản khác nhau của nút bên cạnh nhau - tại sao tôi muốn làm điều này? Tôi có thể cài đặt chúng cục bộ thay vào đó, phải không?

Bạn có thể cài đặt chúng tại địa phương sử dụng make install hoặc checkinstall nhưng bạn sẽ phải thực hiện các bí danh cho họ như node_0.8.1, node_0.8.2, node_0.10.1, vv và bạn sẽ phải quản lý bí danh mới, cài đặt tất cả các gói, loại bỏ chúng trong trường hợp bạn không cần chúng. Đây là một nhiệm vụ tẻ nhạt và nhàm chán có thể dễ bị lỗi đôi khi. nvm thực hiện tất cả các tác vụ này miễn phí cho bạn.

Bạn muốn thực hiện việc này để kiểm tra ứng dụng của mình trong các phiên bản nút khác nhau. Ví dụ bạn là tốt và được thử nghiệm theo v0.8 nhưng bạn muốn sử dụng các tính năng mới của v0.10.3 làm thế nào để bạn làm điều đó? Bạn phải tải xuống mã nguồn, biên dịch, tạo bí danh và chạy ứng dụng của bạn. bạn có thể làm điều này chỉ với nvm install 0.10.3 và chạy ứng dụng của bạn. Đôi khi bạn phải hỗ trợ nhiều phiên bản của nút. Ví dụ một số môi trường lưu trữ không giữ liên lạc với bản phát hành mới nhất và chỉ có v0.6 Khách hàng của bạn sử dụng ứng dụng máy chủ của bạn có thể gặp phải lỗi cụ thể đối với phiên bản này. Khi bạn sửa lỗi, bạn phải sao chép nó trước. Sử dụng nvm cài đặt v0.6 là một dòng và một nửa phút. Và bạn có thể kiểm tra tất cả các phiên bản bạn muốn theo cách này một cách dễ dàng. Kiểm tra mã của bạn theo các phiên bản khác nhau và đảm bảo bạn tốt để sử dụng.

NPM cài đặt gói ở đâu? Tôi thấy rằng nó kiểm tra gói phiên bản aganist của Node, điều gì sẽ xảy ra với các gói này khi nút được nâng cấp?

Nếu bạn đang sử dụng nvm các gói được cài đặt chung với tùy chọn -g được liên kết với phiên bản nút có liên quan. Khi bạn chuyển đổi giữa các phiên bản với nvm use 0.x, bạn phải cài đặt lại gói hoặc sử dụng nvm copy-packages <version> để sử dụng các gói từ trong phiên bản hiện tại. Nếu các gói được cài đặt cục bộ thì nó phụ thuộc. package.json phải chứa thông tin về các phụ thuộc của ứng dụng. Nếu nó nói nút: '0,8' và bạn chỉ cần cập nhật lên 0,9 bạn có thể gặp rắc rối. Ví dụ, hành vi của process.nextTick đã được thay đổi trong các bản phát hành mới nhất so với 0,6. Vì vậy hãy cẩn thận.

Trong trường hợp nào tốt hơn để sử dụng cài đặt toàn cầu hoặc cục bộ? Tôi nên đặt các gói của mình ở đâu (và vị trí đặt chúng theo mặc định?)

Tùy theo. Đối với phát triển nvm là cấp trên theo ý kiến ​​của tôi. Đối với tôi nó là thuận tiện và đơn giản. Đối với sản xuất có thể có một số tác động hiệu quả khi sử dụng các tệp nhị phân được biên dịch sẵn không được tối ưu hóa cho hệ thống của bạn. Nó sẽ là tốt hơn để hỏi điều này như là một câu hỏi riêng biệt để những người có kinh nghiệm có liên quan có thể trả lời.

Sự khác nhau giữa npm, nvm và nave là gì?

npmnode package manager ->link Nó chứa gói người dùng do người khác phát triển. Các gói này không phải là một phần của lõi nút.npm được sử dụng để xuất bản mã và quản lý phụ thuộc của bạn. Nếu ứng dụng của bạn yêu cầu ứng dụng khác được phát triển bởi người khác thì thuận tiện để xuất bản ứng dụng đó qua npm.

nvmnode version manager nó thực hiện một điều hoàn toàn riêng biệt. Nó cung cấp cho bạn khả năng chuyển đổi dễ dàng giữa các phiên bản nút trên cùng một máy và quản lý tất cả các thay đổi trong biến môi trường $PATH của bạn.

Cân nhắc nvm làm trình quản lý cập nhật cho Hệ điều hành và npm làm người quản lý các ứng dụng cho hệ thống này. Vâng, so sánh này không chính xác nhưng chỉ xuất hiện trên tâm trí của tôi

nave về cơ bản giống như nvm nhưng nó thực thi trong khi nvm là tập lệnh được nhập vào trình bao. Mỗi hệ thống có lợi ích riêng của nó. Bạn có thể đưa ra một câu hỏi riêng liên quan đến các trường hợp sử dụng và sự khác biệt.

Câu trả lời của tôi không hoàn thành 100% và chứa nhiều ý kiến ​​cá nhân chủ quan. Tuy nhiên, tôi hy vọng tôi sẽ ít nhất làm cho một số điểm rõ ràng hơn để bạn có thể tiến hành với các câu hỏi cụ thể khác. Btw, danh sách câu hỏi này của bạn có thể được hỏi dưới dạng câu hỏi riêng. Tôi tin rằng stackoverflow mang lại kết quả tốt nhất khi các câu hỏi cụ thể được hỏi riêng và nhiều người có kinh nghiệm liên quan có thể đóng góp.

+0

Đó là một câu trả lời tuyệt vời, cảm ơn bạn! Tôi đã hỏi rất nhiều câu hỏi bởi vì tôi chỉ bối rối; khi tôi có một số câu hỏi cụ thể, tôi sẽ hỏi riêng nó. – mik01aj

+0

Câu trả lời rất hữu ích! Quan điểm thực sự tốt về tất cả các tùy chọn được đưa ra bởi OP. – Qcom

3

Nếu bạn chạy

npm install 

trong folser với package.json, nó cài đặt tất cả các gói localy (trong thư mục hiện hành).

Ngoài ra, npm cài đặt mặc định packeges cục bộ. Đối với cài đặt nó globaly - sử dụng cờ -g:

npm install -g <package> 

Execute lệnh tiếp theo:

npm config list 

Bạn thấy tất cả các mô tả NPM cấu hình

+0

nhưng chính xác "toàn cầu" có ý nghĩa gì ở đây? Điều tương tự về "cục bộ" - tôi nghĩ rằng nó sử dụng thư mục 'node_modules', nhưng tôi không chắc chắn nó làm thế nào để nó fint thư mục này. – mik01aj

+0

Mở rộng câu trả lời, hãy thử nó – Eugene

+3

cục bộ trong ngữ cảnh này có nghĩa là các gói được cài đặt trong thư mục 'node_modules' trong cùng thư mục nơi bạn chạy' npm install '. Trên toàn cầu có nghĩa là nó sẽ được cài đặt ở mức hệ thống và có sẵn ở khắp mọi nơi. –

1

Bạn có thể cài đặt module trong bối cảnh địa phương của ứng dụng của bạn với

npm install modulename

Trong trường hợp này, module sẽ được cài đặt vào thư mục node_modules của ứng dụng của bạn.

Nếu không, bạn có thể cài đặt một module trong bối cảnh toàn cầu với

npm install -g modulename

Trong trường hợp này các module sẽ được cài đặt cho môi trường hệ thống lỗ thường ở/usr/local/bin/môđun.

Cài đặt toàn cầu có ý nghĩa đối với các mô-đun bạn cần trong nhiều ứng dụng, như trình kiểm tra nhanh hoặc nút.

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