Làm cách nào để đặt vị trí tùy chỉnh cho cài đặt cục bộ của gói npm?


177

Có thể chỉ định đích gói tùy chỉnh cho npm install , thông qua cờ lệnh hoặc biến môi trường không?

Theo mặc định, npm cài đặt cục bộ kết thúc trong node_modulesthư mục hiện tại, nhưng tôi muốn nó cài đặt vào node_modulestrong một thư mục khác, ví dụ vendor/node_modules. Làm thế nào tôi có thể làm điều đó xảy ra?


Bạn đang cố gắng để thực hiện? điều này đã được thảo luận ở đây: stackoverflow.com/questions/13668097/
Kẻ

10
@PascalBelloncle: Thay vì cài đặt các gói vào các thư mục con của ./node_modules, tôi muốn npm cài đặt chúng vào các thư mục con của ./vendor/node_modules. (Hoặc được nói rằng điều đó không thể cấu hình được.)
pje

1
Tôi hiểu đó là những gì bạn muốn làm, điều mà tôi không nghĩ là có thể ra khỏi hộp. Plus yêu cầu cũng không hoạt động. Vì vậy, tôi đã hỏi tại sao bạn muốn làm điều này. Có lẽ có một giải pháp thay thế để làm những gì bạn muốn.
Pascal Belloncle

1
Tôi đang cài đặt một gói chỉ dành cho nhị phân của nó (tức là nó sẽ chỉ được sử dụng trên dòng lệnh và không bao giờ required) nhưng tôi không muốn cài đặt nó trên toàn cầu.
pje

Tôi hiểu rồi. Xem gợi ý của tôi dưới đây.
Pascal Belloncle

Câu trả lời:


180

TL; DR

Bạn có thể làm điều này bằng cách sử dụng --prefixcờ và --globalcờ *.

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

* Mặc dù đây là cài đặt "toàn cầu", các thùng đã cài đặt sẽ không thể truy cập được thông qua dòng lệnh trừ khi ~/foo/vendor/node_modulestồn tại PATH.

TL; R

Mỗi thuộc tính cấu hình của npmcó thể được đặt ở bất kỳ sáu vị trí khác nhau. Theo thứ tự ưu tiên:

  • Cờ dòng lệnh: --prefix ./vendor/node_modules
  • Biến môi trường: NPM_CONFIG_PREFIX=./vendor/node_modules
  • Tập tin cấu hình người dùng: $HOME/.npmrchoặc userconfigparam
  • Tập tin cấu hình toàn cầu: $PREFIX/etc/npmrchoặc userconfigparam
  • Tập tin cấu hình tích hợp: path/to/npm/itself/npmrc
  • Cấu hình mặc định: node_modules / npmconf / config-defs.js

Theo mặc định, các gói được cài đặt cục bộ đi vào ./node_modules. những cái toàn cầu đi vào prefixbiến cấu hình ( /usr/localtheo mặc định).

Bạn có thể chạy npm config listđể xem cấu hình hiện tại của bạn và npm config editthay đổi nó.

PS

Nói chung, npmtài liệu của nó thực sự hữu ích. Phần thư mục là một tổng quan cấu trúc tốt của npm và phần cấu hình trả lời câu hỏi này.


2
Khi tôi kiểm tra, thực sự nếu làm theo lệnh ở trên, nó sẽ được cài đặt vào ./vendor/node_modules/lib/bowersử dụngnpm#3.8.0
đám mây điện tử vào

2
Khi làm điều này, tôi gặp lỗiNo version provided in package.json
FooBar

Bạn viết bins won't be accessible through the command line. Tất nhiên, chương trình có thể được gọi bằng đường dẫn hoàn chỉnh npm install eslint@3.4.0 -g --prefix c:\my_npm` calling c: \ my_npm \ eslint --fix my.js`
Bernhard Döbler

13
Có thể đạt được một cái gì đó tương tự với tệp pack.json không? tức là nếu tôi chạy npm installtrong thư mục A với tệp pack.json, các gói sẽ được cài đặt trong thư mục B. Có vẻ như giải pháp này dành cho các gói riêng lẻ đang được cài đặt.
Ryan-Neal Mes

1
Có cách nào để cài đặt tất cả các phụ thuộc bằng phương pháp này không? npm installcài đặt phụ thuộc cục bộ. npm install X -g -prefix "..."cài đặt mô-đun X vào tiền tố, npm install -g -prefix "..."cài đặt gói hiện tại vào tiền tố.
AnnanFay

28

Nếu bạn muốn điều này trong cấu hình, bạn có thể đặt cấu hình npm như vậy:

npm config set prefix "$(pwd)/vendor/node_modules"

hoặc là

npm config set prefix "$HOME/vendor/node_modules"

Kiểm tra cấu hình của bạn với

npm config ls -l

Hoặc như @pje nói và sử dụng --prefix cờ


4
Tôi tin rằng điều này đặt tiền tố toàn cầu? Vì vậy, làm npm installvẫn sẽ cài đặt cục bộ ./node_modulesnhưng npm install -gsẽ cài đặt "$(pwd)/vendor/node_modules". Tôi có thể tưởng tượng các thiết lập này sau đó quên nó đi, quay lại sau tự hỏi tại sao các gói toàn cầu của tôi lại hành động kỳ lạ.
AnnanFay

13

Đối với OSX, bạn có thể truy cập người dùng của mình $HOME(có thể / Người dùng / tên của bạn /) và, nếu nó chưa tồn tại, hãy tạo một .npmrctệp (một tệp mà npm sử dụng cho cấu hình người dùng) và tạo một thư mục cho các gói npm của bạn để được cài đặt trong (ví dụ: / Users / yourname / npm). Trong tệp .npmrc đó, đặt "tiền tố" vào thư mục npm mới của bạn, đây sẽ là nơi các gói npm được cài đặt "toàn cầu" sẽ được cài đặt; các gói "toàn cầu" này rõ ràng sẽ chỉ có sẵn cho tài khoản người dùng của bạn.

Trong .npmrc:

prefix=${HOME}/npm

Sau đó chạy lệnh này từ dòng lệnh:

npm config ls -l

Nó sẽ cung cấp đầu ra cho cả cấu hình cục bộ của riêng bạn và cấu hình npm toàn cầu và bạn sẽ thấy cấu hình tiền tố cục bộ của mình được phản ánh, có thể ở gần đầu danh sách dài của đầu ra.

Để bảo mật, tôi khuyên bạn nên sử dụng phương pháp này để định cấu hình hành vi npm của tài khoản người dùng của bạn qua các /usr/localthư mục của bạn , điều mà tôi đã thấy được đề xuất ở nơi khác.


9

Trên Windows 7 chẳng hạn, có thể sử dụng bộ lệnh / thao tác sau.

Tạo một biến môi trường cá nhân, dấu gạch chéo kép là bắt buộc:

  • Tên biến: %NPM_HOME%
  • Giá trị biến: C:\\SomeFolder\\SubFolder\\

Bây giờ, đặt các giá trị cấu hình cho các thư mục mới (tên tệp kiểm tra):

  • Đặt thư mục npm

npm config set prefix "%NPM_HOME%\\npm"

  • Đặt thư mục npm-cache

npm config set cache "%NPM_HOME%\\npm-cache"

  • Đặt thư mục tạm thời npm

npm config set tmp "%NPM_HOME%\\temp"

Tùy chọn, bạn có thể lọc nội dung của các thư mục gốc trước khi cấu hình được thay đổi.

  • Xóa bộ nhớ cache npm npm cache clear

  • Liệt kê các mô-đun npm npm -g ls

  • Xóa các mô-đun npm npm -g rm name_of_package1 name_of_package2


1
Cảm ơn, tôi làm theo các bước. Nhưng nó tạo ra một thư mục có tên c: /% NPM_HOME% / npm, v.v. thay vì c: / npm_home / npm
Jay

6

Sau khi tìm kiếm điều này, bản thân tôi muốn một số dự án có phụ thuộc được chia sẻ là DRYer, tôi đã tìm thấy:

  • Cài đặt cục bộ là cách Node cho mọi thứ bạn muốn sử dụng thông qua require()
  • Cài đặt toàn cầu là dành cho nhị phân bạn muốn trong đường dẫn của mình, nhưng không dành cho bất cứ điều gì thông qua require()
  • Sử dụng một phương tiện tiền tố bạn cần phải thêm thích hợp binmanđường dẫn đến$PATH
  • npm link( thông tin ) cho phép bạn sử dụng cài đặt cục bộ làm nguồn cho toàn cầu

→ dính vào cách nút và cài đặt cục bộ

tham chiếu:

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.