Làm cách nào để tôi cài đặt các phụ thuộc của gói.json trong thư mục hiện tại bằng cách sử dụng npm


202

Tôi có một ứng dụng web: fooapp . Tôi có một package.jsontrong gốc. Tôi muốn cài đặt tất cả các phụ thuộc một cách cụ thể node_modules directory. Làm thế nào để tôi làm điều này?

Những gì tôi muốn

Hãy nói rằng tôi có hai widgetphụ thuộc. Tôi muốn kết thúc với một cấu trúc thư mục như thế này:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Những gì tôi nhận được

Khi tôi chạy npm install fooapp/ tôi nhận được điều này:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm tạo một bản sao của thư mục ứng dụng của tôi trong thư mục node_modules và cài đặt các gói bên trong thư mục node_modules khác .

Tôi hiểu điều này có ý nghĩa cho việc cài đặt một gói. Nhưng tôi không require()ứng dụng web của mình bên trong một cái gì đó khác, tôi chạy nó trực tiếp. Tôi đang tìm kiếm một cách đơn giản để cài đặt các phụ thuộc của mình vào một thư mục node_modules cụ thể.

Câu trả lời:


389

Đang chạy:

npm install

từ bên trong thư mục ứng dụng của bạn (tức là nơi đặt.j.j) sẽ cài đặt các phụ thuộc cho ứng dụng của bạn, thay vì cài đặt nó dưới dạng một mô-đun, như được mô tả ở đây . Chúng sẽ được đặt trong ./node_modules so với tệp pack.json của bạn (nó thực sự phức tạp hơn một chút so với điều này, vì vậy hãy kiểm tra các tài liệu npm ở đây ).

Bạn có thể tự do di chuyển thư mục node_modules sang thư mục mẹ của ứng dụng nếu bạn muốn, bởi vì cơ chế 'yêu cầu' của nút hiểu điều này. Tuy nhiên, nếu bạn muốn cập nhật các phụ thuộc của ứng dụng bằng cài đặt / cập nhật, npm sẽ không thấy 'node_modules' được di dời và thay vào đó sẽ tạo một thư mục mới, một lần nữa liên quan đến gói.json.

Để ngăn chặn điều này, chỉ cần tạo một liên kết tượng trưng đến nút_modules được di dời từ thư mục ứng dụng của bạn:

ln -s ../node_modules node_modules

Tuyệt diệu! Tôi sẽ dùng thử và đánh dấu câu trả lời này là được chấp nhận nếu nó hoạt động.
Daniel Beardsley

9
Mặc dù đó là một giải pháp hiệu quả, tôi thấy npm linkthuận tiện hơn trong những tình huống như vậy khi bạn cần lấy các mô-đun từ một thư mục khác (xem stackoverflow.com/a/14387210/820520 )
melekes 17/07/14

14

Trong trường hợp của tôi, tôi cần phải làm

sudo npm install  

dự án của tôi nằm trong / var / www vì vậy tôi cũng cần đặt quyền thích hợp.


15
sudo có thể không cần thiết cho cài đặt npm.
Allen Koo

2
Tùy thuộc vào người dùng cần thực thi tệp js và các phụ thuộc được cài đặt, bạn có thể chạy sudo -u [username] npm install. Tốt hơn là chỉ npm installchownthư mục node_modules đệ quy sau thực tế.
TheLonelyGhost

5
không bao giờ chạy npm với sudo trừ khi bạn đang sử dụng -g- và thậm chí sau đó có nhiều cách tốt hơn để xử lý việc đó.
tkone

1
Cảm ơn bạn đã trả lời, nhưng tại sao vậy? bạn có thể giải thích? Ý tôi là, điều gì sẽ xảy ra nếu tôi có một dự án mà tôi muốn hoặc cần giữ một thư mục có quyền root và cài đặt các phụ thuộc mà không có -g ở đó? có thể có một lý do chính đáng, nhưng tôi đã cài đặt sudo npm (không có -g) một vài lần và không bao giờ gặp rắc rối nào. Chúc mừng!
aesede

1
@RredCat Tôi đồng ý về cách thức thực hiện đúng loại công cụ này, nhưng sau một thời gian tôi nhận thấy rằng cuộc thảo luận này đang chuyển sang Ubuntu, có vẻ như có một vấn đề trong cách quản lý một số quyền và thư mục, điều đó buộc người dùng phải sử dụng sudo npm. Một lần nữa, chỉ trong Ubuntu.
aesede

0

Chỉ cần thực hiện

sudo npm i --save

Đó là tất 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.