Làm thế nào để bạn cài đặt lại các phụ thuộc của ứng dụng bằng cách sử dụng npm?


384

Có cách nào đơn giản để cài đặt lại tất cả các gói mà ứng dụng của tôi phụ thuộc vào (tức là chúng nằm trong thư mục node_modules của ứng dụng của tôi) không?


4
npm rebuildcũng có thể giúp một số vấn đề với sự phụ thuộc bản địa
Francisco Presencia

1
Trong trường hợp nó giúp người khác: Nếu bạn chỉ đang cố cài đặt lại một gói, npm update <packageName>hoạt động rất tốt
rinogo

Câu trả lời:


617

Cách dễ nhất mà tôi có thể thấy là xóa node_modulesthư mục và thực thi npm install.


28
Đã đồng ý; giả sử bạn đã tạo một package.jsontệp cho ứng dụng của mình.
JohnnyHK

9
Coi chừng việc chạy npm installsau khi xóa node_modulesthư mục có thể dẫn đến các phiên bản phụ thuộc khác nhau được xác định package.jsonkhi bị kéo xuống. Nếu bạn yêu cầu các phiên bản phụ thuộc rất cụ thể cho ứng dụng của mình, hãy cẩn thận và xem xét npm shrinkwraphoặc kiểm tra trong node_modulesthư mục của bạn để kiểm soát nguồn.
smithclay

10
@smithclay Tôi đã xác định phiên bản rõ ràng của các gói trong gói.json của ứng dụng của mình, vì vậy điều đó sẽ ổn, phải không?
trusktr

@vadim Tôi đã thực hiện một số thử nghiệm về hành vi của npm installnó và nó luôn cài đặt lại các gói phụ thuộc và nâng cấp các phiên bản mới nhất theo sự cho phép của pack.json. Vì vậy, loại bỏ node_modulescác thư mục là không cần thiết trừ khi bạn nghĩ rằng nó bị hỏng. Có một lý do bạn nghĩ rằng nó nên được gỡ bỏ? Tuy nhiên, nếu mục đích là loại bỏ bất kỳ gói nào không liên quan thì bạn có thể thực hiện npm prunethay thế
himanshu

1
@himanshu bạn có quyền npm installnâng cấp tất cả các mô-đun lên trạng thái pack.json . Nhưng câu hỏi là làm thế nào để cài đặt lại tất cả các gói . Vì vậy, chúng có thể bị hỏng hoặc có thể cần phải xây dựng lại các phần nhị phân sau khi nâng cấp verison node.js.
Vadim Baryshev

96

Cách đúng là thực thi npm update. Đó là một lệnh thực sự mạnh mẽ, nó cập nhật các gói bị thiếu và cũng kiểm tra xem phiên bản mới hơn của gói đã được cài đặt có thể được sử dụng chưa.

Đọc phần giới thiệu cho NPM để hiểu những gì bạn có thể làm với npm.


58
Nhưng nếu không có gói mới hơn thì điều này sẽ không làm gì cả, phải không? Tôi đang cố gắng để ép buộc cài đặt lại ngay cả khi gói đã ở phiên bản mới nhất.
trusktr

2
Nếu không có gói nào bị thiếu, thì nó sẽ kiểm tra xem nó có thể sử dụng các phiên bản mới nhất của gói không (bao gồm cả phụ thuộc của gói) được liệt kê trong pack.json. Vì vậy, về bản chất nó sẽ nâng cấp các gói nếu có thể. Nhưng nó sẽ không cài đặt lại. Nếu bạn muốn làm điều đó bằng cách sử dụng các lệnh, bạn có thể thực hiện npm uninstall <package_name>để gỡ cài đặt gói cụ thể hoặc thực hiện npm uninstallđể gỡ cài đặt tất cả các gói.
himanshu

1
Tôi đã cố gắng làm npm uninstallmà không chỉ định một gói nhưng điều đó gây ra lỗi.
trusktr

Bạn có gói.json trong thư mục thư mục mà bạn đã thực hiện điều này không? Nếu bạn đang gỡ cài đặt gói toàn cầu thì bạn sẽ cần thêm -g
himanshu

1
Liên kết bạn cung cấp đã chết, bạn có thể vui lòng cung cấp một liên kết mới không? (Tôi đã tìm thấy điều này nhưng tôi không chắc có thể chấp nhận thay đổi nó)
Motti

63

Hầu hết thời gian tôi sử dụng lệnh sau để đạt được cài đặt lại hoàn toàn tất cả các mô-đun nút (hãy chắc chắn rằng bạn đang ở trong thư mục dự án).

rm -rf node_modules && npm install

Bạn cũng có thể chạy npm cache cleansau khi xóa node_modulesthư mục để đảm bảo không có bất kỳ phụ thuộc nào được lưu trong bộ nhớ cache.


48

npmđã cập nhật lệnh CLI cho installvà thêm --forcecờ.

npm install --force

Đối số --force(hoặc -f) sẽ buộc npmphải tìm nạp tài nguyên từ xa ngay cả khi bản sao cục bộ tồn tại trên đĩa.

Xem npm install


Tuyệt vời, cũng làm việc với 'git + github.com ...'!
Toni Bünter

12

Bạn có thể sử dụng mô-đun cài đặt lại được tìm thấy trong npm.

Sau khi cài đặt nó, bạn có thể sử dụng lệnh sau:

reinstall

Sự khác biệt duy nhất với việc xóa node_modulesthư mục và thực hiện thủ công npm installlà lệnh này tự động xóa bộ nhớ cache của npm. Vì vậy, bạn có thể nhận được ba bước trong một lệnh.

upd: npx reinstall là một cách để chạy lệnh này mà không cần cài đặt gói toàn cầu (chỉ dành cho npm5 +)


1
@ g00glen00b Tôi đã chỉnh sửa để bây giờ bao gồm thông tin hữu ích không có siêu liên kết
Rob

@ g00glen00b Điều đó hoàn toàn tốt; nó không làm cho điều này trở thành một ứng cử viên để xóa. Vui lòng xem bài đăng này - Đặc biệt, nó giải quyết các câu trả lời ngắn bằng một liên kết, với điều kiện là có một số thông tin hữu ích (ví dụ: tên của thư viện) khi siêu liên kết bị xóa
Rob


1

Đối với Windows, bạn có thể sử dụng

(if exist node_modules rmdir node_modules /q /s) && npm install

trong đó loại bỏ node_modulesthư mục và thực hiện npm installsau đó. Việc gỡ bỏ trước khi cài đặt đảm bảo rằng tất cả các gói được cài đặt lại.


0

Thực hiện theo bước này để cài đặt lại các mô-đun nút và cập nhật chúng

hoạt động ngay cả khi thư mục node_modules không tồn tại. Bây giờ thực hiện lệnh sau một cách đồng bộ. bạn cũng có thể sử dụng "cập nhật npm" nhưng tôi nghĩ đây là cách ưa thích

npm outdated // not necessary to run this command, but this will show outdated dependencies

npm install -g npm-check-updates // to install the "ncu" package

ncu -u --packageFile=package.json // to update dependencies version in package.json...don't run this command if you don't need to update the version

npm install: will install dependencies in your package.json file.

nếu bạn ổn với phiên bản phụ thuộc của bạn trong tệp pack.json, không cần phải làm theo các bước đó chỉ cần chạy

 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.