Làm cách nào để dọn sạch thư mục node_modules của các gói không có trong pack.json?


338

Giả sử tôi cài đặt các gói dự án với npm installvẻ bề ngoài đó vào package.jsoncho mô-đun để được cài đặt. Sau một thời gian, tôi thấy rằng tôi không cần một số mô-đun cụ thể và loại bỏ sự phụ thuộc của nó khỏi package.json. Sau đó, tôi loại bỏ một số mô-đun khác package.jsonvì chúng không còn cần thiết nữa và các mô-đun khác được thay thế bằng các lựa chọn thay thế.

Bây giờ tôi muốn dọn dẹp node_modulesthư mục để chỉ các mô-đun được liệt kê ở package.jsonlại đó và phần còn lại phải đi, đại loại như thế npm clean. Tôi biết tôi có thể loại bỏ chúng bằng tay nhưng muốn có một số chức năng đường sẵn sàng để sử dụng.

Câu trả lời:


407

Tôi nghĩ bạn đang tìm kiếm npm prune

npm prune [<name> [<name ...]]

Lệnh này loại bỏ các gói "không liên quan". Nếu tên gói được cung cấp, thì chỉ các gói khớp với một trong các tên được cung cấp sẽ bị xóa.

Các gói không liên quan là các gói không được liệt kê trong danh sách phụ thuộc của gói cha.

Xem tài liệu: https://docs.npmjs.com/cli/prune


1
Theo như tôi biết, trong phiên bản NPM mới, tất cả các phụ thuộc đều nằm ở node_modulesthư mục gốc chứ không phải như trước đây, nơi mỗi phụ thuộc có cài đặt phụ thuộc riêng trong các node_modulesthư mục riêng của họ..với vô số bản sao của cùng một phụ thuộc ... Vì vậy, npm prunecó xem xét điều này? bởi vì những phụ thuộc sâu sắc đó không được viết trên chính package.jsondự án của bạn .. nên cắt tỉa theo cách đệ quy.
vsync

2
@vsync Giảm trùng lặp được thực hiện với lệnh npm dedupe docs.npmjs.com/cli/dedupe . Nó cố gắng đơn giản hóa cây nút bằng cách di chuyển các phụ thuộc lên cây.
cuộc hỗn chiến

Tôi đã thấy NPM prune thất bại trong việc xóa những thứ thường làm hỏng khi kho lưu trữ của công ty tôi có một cái gì đó bị hỏng trong đó. Sau đó tôi phải rm-rf. Sẽ thật tuyệt nếu có lệnh "thổi bay mọi thứ sau đó lấy lại tất cả mọi thứ trong một lần"
ggb667

209

Bạn có thể xóa node_modules / thư mục của mình và sau đó cài đặt lại các phụ thuộc từ gói.json.

rm -rf node_modules/
npm install

Điều này sẽ xóa tất cả các gói đã cài đặt trong thư mục hiện tại và chỉ cài đặt các phụ thuộc từ gói.json. Nếu các phụ thuộc đã được cài đặt trước đó, npm sẽ cố gắng sử dụng phiên bản được lưu trong bộ nhớ cache, tránh tải xuống phụ thuộc lần thứ hai.


4
Vâng, tôi biết tôi có thể sử dụng phương pháp này nhưng tôi tò mò tại sao vẫn không có giải pháp thanh lịch hơn cho điều đó.
Sergei Basharov

Có thực sự không có lệnh npm để xóa node_modules ngoài việc xóa thư mục?
Anders

4
Trên nền tảng windows, nó bị lỗi trong khi xóa node_modules thông qua Explorer hoặc dòng lệnh (vì đường dẫn đến một số mô-đun dài hơn 256). Cần có lệnh npm để làm điều đó một cách sạch hơn.
Ravi Kumar

9
Hoặc sử dụng rmdir node_modules /s /qtrên Windows. superuser.com/a/179661/440976
Wédney Yuri

5
Tôi nghĩ rằng, câu trả lời này thiếu một điểm rất quan trọng: nếu bạn bị hạn chế bởi lưu lượng truy cập (tức là bạn có kết nối trả phí trên mỗi megabyte như điện thoại di động) và bạn có rất nhiều mô-đun, điều này có thể khiến bạn phải trả giá , trong khi prunetùy chọn không yêu cầu bạn phải có kết nối internet.
Ivan Kolmychek

102

Do thư mục lồng nhau, Windows không thể xóa thư mục vì tên của nó quá dài. Để giải quyết vấn đề này, hãy cài đặt RimRaf:

npm install rimraf -g

rimraf node_modules

8
Hoặc chỉrm -rf node_modules
kappaallday

16
rm -rf node_modulessẽ không hoạt động trên windows. Xem giải pháp này: superuser.com/a/179661/440976
Wédney Yuri

1
win7 x64 rimraf đã hoạt động rất tốt thông qua PowerShell .. cảm ơn
gorelative

Giải pháp tốt nhất cho Windows 10 64-bit qua CMD
Matt Cromwell

rm -rf node_modules không hoạt động với tôi trên Windows 10. Nhưng rimraf hoạt động với tôi
ssmsnet

24

đơn giản chỉ cần chạy

rm -r node_modules

trong thực tế, bạn có thể xóa bất kỳ thư mục với điều này.

như rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

chỉ cần mở gitbash di chuyển đến thư mục gốc và chạy lệnh này

Hy vọng điều này sẽ giúp.


2
Không hoạt động, tôi gặp lỗi "quyền bị từ chối" (sử dụng gitbash.
Drainke035

3
mở gitbash trong chế độ quản trị viên. Tôi đoán điều đó sẽ giúp. hoặc thay đổi cài đặt cấp độ thư mục
Ajay Kotnala

3
Điều này sẽ xóa tất cả các gói. OP nói rõ "Tôi muốn dọn sạch thư mục node_modules để chỉ các mô-đun được liệt kê trong pack.json ở đó".
Boaz - Tái lập Monica

trong trường hợp đó, bạn của tôi, bạn chỉ có thể thực hiện "npm gỡ bỏ gói_name" hoặc - lưu như sufix cũng sẽ xóa mục nhập của nó khỏi tệp pack.json. NPM uninstall package_name (gói delete) NPM uninstall package_name --save (gói delete, nhập cảnh được khỏi phụ thuộc vào gói json) NPM uninstall package_name --save-dev (gói delete, nhập cảnh remove từ devdependencies trong gói json)
Ajay Kotnala

22

Đầu tiên trên toàn cầu cài đặt rimraf

npm install rimraf -g

đi đến đường dẫn bằng cmd nơi thư mục node_modules của bạn và áp dụng lệnh bên dưới

rimraf node_modules

câu trả lời tốt, nhưng cài đặt một gói để gỡ cài đặt những cái khác không phải là một ý tưởng tốt mặc dù. npm prunelà một giải pháp lý tưởng.
Binayak Gouri Shankar

Có, nhưng nếu bạn muốn xóa thư mục node_module khỏi dự án của bạn thì đây là cách tốt nhất và dễ dàng.
Ankit Parmar


9

từ phiên bản 6.5.0 npm hỗ trợ lệnh clean-installđể làm mới cứng tất cả các gói


1
Đây chính xác là những gì tôi cần. Khi tôi cập nhật nút, điều đầu tiên xảy ra là "có vẻ như bạn đã thay đổi môi trường kể từ khi chạy 'npm install'". Vì tôi đã có trong bảng điều khiển, dễ dàng nhất là chỉ cần cài đặt sạch thay vì loay hoay xóa các thư mục trước tiên, v.v.
Jarrod McGuire

3

Tôi đã thêm một vài dòng bên trong pack.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

Nếu bạn muốn cleanchỉ bạn có thể sử dụng này rimraf node_moduleshoặc rm -rf node_modules.

Nó hoạt động tốt



1

Bài viết hay nhất tôi tìm thấy về nó là bài này: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Tất cả từ bàn điều khiển và dễ dàng thực hiện từ bất kỳ điểm thư mục.

Nhưng như một bản tóm tắt của bài viết, lệnh này để tìm kích thước cho mỗi node_modulethư mục được tìm thấy trong các dự án khác nhau.

find . -name "node_modules" -type d -prune -print | xargs du -chs

Và để thực sự loại bỏ chúng:

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

Bài viết cũng chứa các hướng dẫn cho windows shell.


0

Xóa / Chỉnh sửa các gói không cần thiết trong gói-lock.json (tên gói sẽ được viết theo phụ thuộc & devDependencies) và sau đó

npm install


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.