Có một môi trường ảo cho node.js không?


133

Tôi đã tìm kiếm trang mô-đun wiki, nhưng tôi không thể tìm thấy bất cứ thứ gì tương tự như virtualenv (python) hoặc rvm.

Bất cứ ai ở đây phân tách node.js trong env của riêng họ? Tôi thực sự không thích cài đặt hệ thống npm.

Câu trả lời:


44

Nếu có các gói npm toàn hệ thống là vấn đề chính của bạn, thì có thể xem xét sử dụng lệnh 'gói' rất tuyệt vời với npm. Điều này gần với đá quý đóng băng hoặc sử dụng bộ đóng gói trong đường ray, thay vì rvm.

Nó siêu dễ. Chỉ cần tạo tệp pack.json:

{ "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}}

và sau đó chạy:

npm bundle vendor

hoặc nếu phiên bản npm của bạn là> = 1.0 chạy:

npm install

để đóng băng vào thư mục nhà cung cấp. và sau đó sử dụng:

require.paths.unshift('./vendor');

1
@andho Haven đã không tự mình kiểm tra điều này, nhưng tôi hiểu rằng các phiên bản NPM gần đây chỉ đơn giản là sử dụng npm installcho việc này.
Marnen Laibow-Koser

13
Đã thử nghiệm và xác nhận ngay bây giờ. npm installThay thế npm bundlenhư NPM 1.0, tôi tin.
Marnen Laibow-Koser

184

nodeenv - môi trường ảo cho node.js (Analog virtualenv )


Điều này đã có vẻ tuyệt vời khi bắt đầu, nhưng tôi không thể thực hiện cài đặt npm với nodeenv cùng lúc với node.js được biên dịch (trên osx Lion). Có lẽ tôi chỉ có thể sử dụng cài đặt nvm và cài đặt npm riêng cho từng nútenv ... vào thời điểm tôi nghĩ thử dùng nó, tôi đã thực hiện nhiều phiên bản nút với các phương tiện khác.
Mikael Lepistö

2
Có thể được sử dụng để cài đặt trong môi trường ảo Python hiện có, để node.jsmôi trường được kích hoạt cùng với môi trường Python. Xem nodeenv -p.
naitsirhc

3
nodeenv (thực tế là virtualenv + nodeenv) cũng phù hợp với người dùng shell fish vì nave và những người khác không hỗ trợ bất kỳ shell nào khác ngoài bash và zsh.
akarca

1
Có phải cũng có một Virtualenv-Wrapper tương đương với nó?
vmonteco

25

Ngoài ra còn có một số hệ thống quản lý phiên bản Node có thể giúp đỡ.

Hãy xem https://aveithub.com/isaacs/nave

NVM cũng có thể được sử dụng https://github.com/creationix/nvm

Ngoài ra còn có một cái gọi là n https://github.com/visionmedia/n


1
Nvm hoạt động rất tốt nếu bạn chỉ muốn cài đặt các phiên bản khác nhau của node.js và npm cùng một lúc. Đối với phần còn lại tôi thấy nó đủ để có các mô-đun cần thiết được cài đặt vào thư mục dự án với npm.
Mikael Lepistö

2
Nếu bạn đang xem nvmhoặc nmuốn tự động chuyển đổi khi bạn thay đổi thư mục, hãy xem avn: github.com/wbyoung/avn
wbyoung

1
Theo tôi thấy n không phải là một môi trường ảo. Nó sẽ chia sẻ tất cả các thư viện được cài đặt trên toàn cầu nhưng npm.
Yannic Hamann

7

Câu trả lời của bxjx là chính xác về mặt khái niệm. Tuy nhiên, xin lưu ý rằng lệnh bundle không còn có một thư mục. Nó luôn thả các gói vào node_modulesthư mục, để npm biết nơi tìm chúng sau này (và có thể tránh phụ thuộc cài đặt kép).

Bất kỳ giải pháp nào cũng có thể liên quan đến việc cài đặt npm và nave "toàn hệ thống" (nghĩa là trong của bạn PATH, có thể ở ~đâu đó), nhưng sau đó chỉ cài đặt các phụ thuộc cụ thể của bạn trong môi trường ảo.

Tôi đã trả lời kỹ hơn về vấn đề github .

tl; dr: Trường hợp sử dụng là hợp lệ và hữu ích, và trong khi nó chủ yếu ở đó, nó không được phục vụ tốt như nó có thể. Chúng ta nên đảm bảo suy nghĩ kỹ và thực hiện đúng.


Vấn đề GitHub dường như không còn tồn tại. Có một liên kết cập nhật?
Drazisil

4

Bạn không cần phải luôn luôn cài đặt các phụ thuộc trên toàn cầu. Thông thường, nó được khuyến nghị bởi vì sau đó bạn có thể sử dụng các lệnh mà gói npm cung cấp, nhưng nếu bạn cài đặt nó cục bộ (trong node_modulesthư mục), bạn cũng có thể sử dụng các lệnh này, chúng chỉ xuất hiện trong node_modules/.bin/thư mục, vì vậy bạn sẽ phải gõ node_modules/.bin/<command>, Điều này gây phiền nhiễu, nhưng tất nhiên bạn có thể thêm đường dẫn này vào PATHbiến môi trường của mình :

export PATH=node_modules/.bin:$PATH

Sau đó, bạn có thể chỉ cần gõ <command>và nó hoạt động!

Thực sự có một lệnh npm trả về một đường dẫn tuyệt đối đến .binthư mục:

$ npm bin
/path/to/node_modules/.bin

Lệnh này cũng hoạt động khi bạn ở trong thư mục con của dự án, nó sẽ trả về node_modules/.binthư mục đầu tiên mà nó tìm thấy trong các thư mục mẹ của nó.

Bạn có thể thêm bí danh này vào .bashrcđể tự động thêm .bin/thư mục vào PATH:

alias nodebin='export PATH=$(npm bin):$PATH'

Vì vậy, khi bạn đang ở trong một thư mục của một dự án có một node_modules/thư mục trong thư mục gốc, bạn có thể nhập nodebinvà sau đó bạn có thể sử dụng tất cả các lệnh trong .bin/thư mục!



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.