Làm thế nào để npm cài đặt vào một thư mục được chỉ định?


Câu trả lời:


325

Bạn có thể sử dụng --prefixtùy chọn:

mkdir -p ./install/here/node_modules
npm install --prefix ./install/here <package>

Các gói sau đó sẽ được cài đặt ./install/here/node_modules. Điều mkdirnày là cần thiết vì npm có thể chọn một thư mục đã tồn tại node_modulescao hơn trong hệ thống phân cấp. (Xem tài liệu npm trên các thư mục .)


65
Dường như bạn phải có tệp pack.json trong thư mục thay thế này nếu bạn sử dụng tùy chọn --prefix. Có cách nào để có gói.json trong thư mục hiện tại và cài đặt vào thư mục thay thế không?

2
@fractal Xem câu trả lời của tôi cho điều đó
yunzen

10
@coundy Có cách nào để chỉ định đường dẫn cho npm install(không có tên gói) không? Tôi đã thuê cái này trực tiếp, nhưng sau đó npm tìm kiếm package.jsontrong {prefix}. Điều tôi cũng nhắm đến là có thể cho phép packages.jsonroot trong dự án và đồng thời cài đặt tất cả các gói trong {project root}/{project webroot}.
automatix

Tôi gặp phải một vấn đề đệ quy. Có cách nào để bảo nó chạy một lần không? Tôi đã giải quyết nó tạm thời bằng cách thay đổi thư mục và sau đó gọi npm install, nhưng --prefixcó vẻ như là một giải pháp tốt hơn, nếu nó không gây ra sự đệ quy.
adi518

47

Trong tài liệu có ghi: Sử dụng tùy chọn tiền tố cùng với tùy chọn toàn cầu :

Các tiền tố cấu hình mặc định đến vị trí nút được cài đặt. Trên hầu hết các hệ thống, đây là / usr / local . Trên các cửa sổ, đây là vị trí chính xác của nhị phân node.exe. Trên các hệ thống Unix, nó tăng một cấp, vì nút thường được cài đặt tại {tiền tố} / bin / nút thay vì {tiền tố} /node.exe .

Khi cờ toàn cầu được đặt, npm sẽ cài đặt mọi thứ vào tiền tố này. Khi nó không được đặt, nó sử dụng thư mục gốc của gói hiện tại hoặc thư mục làm việc hiện tại nếu chưa có trong gói.

(Nhấn mạnh bởi họ)

Vì vậy, trong thư mục gốc của bạn, bạn có thể cài đặt với

npm install --prefix <path/to/prefix_folder> -g

và nó sẽ cài đặt node_modulesthư mục vào thư mục

<path/to/prefix_folder>/lib/node_modules

2
Bạn không thể requirecài đặt các gói trên toàn cầu, bạn có thể?
Pavlo

3
@Pavlo Điều này có giúp gì không? stackoverflow.com/questions/15636367/ từ
yunzen

1
Bạn nên thêm điều này vào câu trả lời.
Pavlo

6
@Pavlo Tôi không nghĩ vậy. Đó không phải là câu trả lời cho OP.
yunzen

@Pavlo Nếu một gói được cài đặt trên toàn cầu, bạn sẽ yêu cầu nó giống như mọi khi. Vì vậy, có bạn có thể yêu cầu một gói được cài đặt trên toàn cầu.
Rob Evans

43

Kể từ phiên bản npm 3.8.6, bạn có thể sử dụng

npm install --prefix ./install/here <package>

để cài đặt trong thư mục được chỉ định. NPM tự động tạo node_modulesthư mục ngay cả khi thư mục node_modulesđã tồn tại trong cấu trúc phân cấp cao hơn. Bạn cũng có thể có một package.jsontrong thư mục hiện tại và sau đó cài đặt nó trong thư mục được chỉ định bằng cách sử dụng --prefixtùy chọn:

npm install --prefix ./install/here

Kể từ npm 6.0.0, bạn có thể sử dụng

npm install --prefix ./install/here ./

để cài đặt gói.json trong thư mục hiện tại vào thư mục "./install/here". Có một điều mà tôi đã nhận thấy trên Mac là nó tạo ra một liên kết tượng trưng đến thư mục mẹ bên trong thư mục node_modules. Nhưng, nó vẫn hoạt động.

LƯU Ý: NPM tôn vinh đường dẫn mà bạn đã chỉ định thông qua --prefixtùy chọn. Nó giải quyết theo tài liệu npm trên các thư mục , chỉ khi npm installđược sử dụng mà không có --prefixtùy chọn.


1
Điều này dường như không hoạt động, tôi luôn nhận đượcCan't install <current directory>: Missing package name
Tibor Blenessy

1
@TiborBlenessy Giả sử bạn đang nói về câu lệnh cài đặt thứ hai. Vui lòng đảm bảo rằng bạn đã có tệp pack.json hợp lệ trong thư mục hiện tại của mình. Nếu nó vẫn không hoạt động thì hãy cho tôi biết phiên bản npm của bạn. Các bước này được sử dụng để làm việc với phiên bản npm được chỉ định. Và, nếu họ không còn nữa, tôi rất muốn lặn sâu và tìm hiểu nguyên nhân gốc rễ và có thể tôi sẽ đưa ra một giải pháp thay thế.
Rohit Sharma

1
@RohitSharma Sử dụng npm 6.0.0 phương pháp này không hoạt động như mong đợi package.jsontệp trong./install/here
Christian Ivicevic

@ChristianIvicevic Bạn có thể sử dụng npm install --prefix ./install/here ./ để cài đặt gói.json trong thư mục hiện tại vào thư mục "./install/here". Có một điều mà tôi đã nhận thấy trên Mac là nó tạo ra một liên kết tượng trưng đến thư mục mẹ bên trong thư mục node_modules. Nhưng, nó vẫn hoạt động với npm 6.0.0
Rohit Sharma

1
@Tanoro Lệnh thứ ba sẽ hoạt động với npm 6.0.0 với việc tạo liên kết tượng trưng như được đề cập trong câu trả lời. Tôi chưa bao giờ thử 2 lệnh đầu tiên với npm v3.5.2, đó là lý do tại sao tôi đã đề cập đến phiên bản cụ thể của npm tôi đã thử. Xin vui lòng cập nhật câu trả lời với các lệnh làm việc cho các phiên bản khác.
Rohit Sharma

0

Tôi đang sử dụng bản dựng powershell và không thể chạy npm mà không thay đổi thư mục hiện tại.

Đã kết thúc bằng lệnh start và chỉ định thư mục làm việc:

start "npm" -ArgumentList "install --warn" -wo $buildFolder
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.