NPM không cài đặt phụ thuộc mô-đun


151

Đây là package.jsonmô-đun của tôi mà tôi đang đưa vào dự án mẹ:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

Một điều cần lưu ý là mô-đun này được chứa trong một repo riêng và tôi đưa nó vào phần cha mẹ package.jsonnhư:"module-name": "git+ssh://git@myserver:user/module-name.git"


Gói.json của bạn trông ổn, cũng như dòng bạn sử dụng để bao gồm nó. Bạn có nhận được một thông báo lỗi? Là git trên con đường của bạn?
poida

1
Tôi không gặp lỗi mỗi sa, mô-đun cài đặt nhưng postinstalltập lệnh của tôi không thành công vì các gruntgói cục bộ không được tìm thấy vì chúng không được cài đặt bởi NPM
Ahmed Nuaman

1
Vấn đề này vẫn còn tồn tại vào tháng 11 năm 2016. Tôi đã thực hiện cài đặt sạch mô-đun làm việc trên máy tính mới. Câu trả lời của @ Mohsen đã sửa nó.
Joe Lapp

Câu trả lời:


152

Có vẻ như bạn gặp phải một lỗi đã tồn tại khá lâu và chưa có giải pháp. Có một số vấn đề mở cho trường hợp này trong kho npm:

Trong những người đầu tiên liệt kê một số cách giải quyết mà bạn có thể thử.

Một giải pháp thay thế có thể là (một chút hackish) để liệt kê rõ ràng các phụ thuộc là phụ thuộc cấp đầu tiên. Điều này đòi hỏi bạn phải duy trì danh sách nhưng thực tế nó phải được thực hiện rất ít khi.


1
@ Flame2057 thật tốt khi biết bạn không gặp may, mặc dù không quá nhiều thông tin. Bạn có thể tiếp tục và đặt ra một câu hỏi, hy vọng cộng đồng có kiến ​​thức để giải quyết. Chúc vui vẻ!
allprog

Một bước bổ sung là cần thiết cho tôi. Tôi đã phải nhấp chuột phải vào "Dependencies" trong dự án của mình và chọn "Khôi phục các gói" sau khi thực hiện các bước khác được đề cập ở đây (xóa node_modules và pack.lock.json, sau đó cài đặt npm).
Táo khuyết

113

Tôi đã có vấn đề rất giống nhau, loại bỏ toàn bộ node_modulesthư mục và cài đặt lại làm việc cho tôi. Đã học được mẹo này từ chương trình IT Crowd !

rm -rf node_modules
npm install

Điều này thực sự làm việc cho tôi. Tôi nghĩ điều đó thực sự kỳ lạ - điều gì gây ra sự cố đó? Bất kể, nếu tôi xóa thư mục và chạy lại cài đặt npm, thì nó hoạt động. Trước đó, không có gì sẽ cài đặt trong thư mục con đó. Bây giờ, tất cả được cài đặt ở đó.
Cthe Good 12/05/2015

Cảm ơn @Moshen. Tôi đã gỡ bỏ một phiên bản cũ của Node và cài đặt sạch. Tôi đã xóa tất cả node_modules / trên toàn cầu nhưng quên xóa sau đó khỏi một số ứng dụng hiện có. Tôi đã phải xóa thư mục node_modules trong thư mục của mỗi ứng dụng hiện có, sau đó chạy npm install.
wilblack

Câu nói hay "bạn đã thử khởi động lại từ phương pháp đầu chưa?". Nó hiệu quả tuyệt vời đối với tôi.
Marco Aurélio Deleu

Mặc dù thật tuyệt khi biết có một cách giải quyết, nhưng điều này thực sự đánh cắp 'khởi động lại máy của bạn và thử lại' và chỉ che giấu vấn đề thực sự. Tôi gặp vấn đề tương tự với cài đặt NPM (quá trình thoát ngay lập tức mà không có tin nhắn) và một trong những cách giải quyết là xóa thư mục node_modules và cài đặt lại; điều đó không làm tôi tự tin rằng chúng tôi hiểu những gì đang diễn ra ở đây.
Kelly S. Pháp

1
Điều này làm việc cho tôi. Tôi có thể +1 lần nữa để tham khảo IT Crowd.
texelate

32

Tôi đang sử dụng máy windows.

  1. Tôi đã xóa thư mục node_modules.
  2. Bằng cách nào đó, tệp pack.lock.json đang được tạo. Tôi đã xóa tập tin đó.
  3. Sau đó cài đặt npm.
  4. Xây dựng sạch sẽ.
  5. Chạy.

14
Câu trả lời này cần có được nhiều tình yêu hơn. Tệp pack.lock.json đã làm tôi khó chịu.
mwilcox

16

nếu bạn thừa hưởng mã này, có thể là các phụ thuộc và phiên bản đã bị khóa và bạn có tệp ./npm-shrinkwrap.json.

nếu phần phụ thuộc của bạn không được liệt kê trong tệp đó, nó sẽ không bao giờ được cài đặt bằng npm installlệnh.

bạn sẽ cần phải cài đặt thủ công các gói và sau đó chạy npm shrinkwrapđể cập nhật tệp thu nhỏ.


2
Tôi gặp sự cố khi cài đặt thủ công một gói đã tạo một package-lock.jsontệp sau khi cập nhật lên nút 8.0.0 và npm 5.0.0. Sau đó, chạy npm installsẽ chỉ cài đặt một gói đó thay vì tắt tất cả các phụ thuộc của tôi. Xóa package-lock.jsonvà chạy lại npm installgiải quyết vấn đề cho tôi.
Monkpit

1
@Monkpit Điều đó cũng đã giải quyết nó cho tôi, cảm ơn! package-lock.jsonđang cản đường.
VirtualWolf

10

Tôi nghi ngờ bạn đang đối mặt với vấn đề mà package.jsontệp của bạn không nằm trong cùng thư mục với tệp của bạn Gruntfile.js. Khi bạn chạy các grunt xxxlệnh của mình , bạn sẽ gặp lỗi một thông báo như:

Local Npm module "xxx" not found. Is it installed?

Hiện tại, giải pháp là:

  • Tạo gói.json trong cùng thư mục với Gruntfile.js
  • Xác định các mô-đun theo yêu cầu của dự án grunt của bạn
  • Thực thi npm installđể tải chúng cục bộ
  • Bây giờ lệnh grunt cần thiết sẽ hoạt động.

IMHO, thật đáng buồn khi chúng ta không thể có các mô đun phân giải được tải từ một mô đun npm cha (tức là pack.json trong một thư mục mẹ trong cùng một dự án). Các cuộc thảo luận ở đây dường như chỉ ra rằng nó đã được thực hiện để tránh tải các mô-đun "toàn cầu" nhưng tôi nghĩ rằng những gì chúng ta muốn là tải từ các mô-đun "dự án của tôi".


Vì vậy, đây là cấu trúc của dự án mẹ của tôi (đó là cấu trúc nhập dự án mô đun con): cl.ly/image/020E0b3I0t1A và cấu trúc của dự án mô đun con của tôi: cl.ly/image/2q0L3l1v0s40 ; bạn có thể thấy rằng cả hai đều chứa Gruntfile.jsvà cả hai đều chứa package.jsoncùng cấp.
Ahmed Nuaman

1
Đây không phải là vấn đề với grunt, đó là vấn đề npmkhông cài đặt đệ quy các phụ thuộc trong dự án mô-đun phụ của tôi.
Ahmed Nuaman

9

OP có thể đúng với phiên bản cũ hơn của nút. Tuy nhiên, tôi cũng phải đối mặt với nút 4.4.1.

Nó rất có thể được liên kết với phiên bản nút bạn đang sử dụng. Cố gắng nâng cấp lên phiên bản mới nhất. Một số phụ thuộc nhất định không tải quá mức nếu chúng không tương thích với phiên bản nút.

Tôi tìm thấy điều này bằng cách chạy npm update.

Sau khi nâng cấp lên phiên bản mới nhất (4.4 -> 5.9); cái này đã được sửa


8

Trong trường hợp của tôi, nó đã giúp loại bỏ node_modulespackage-lock.json.

Sau đó chỉ cần cài đặt lại mọi thứ với npm install.


8

Đồng thời kiểm tra xem tên gói của bạn có được chấp nhận chính xác không:

SAI LẦM:

{
    "name":"My Awesome Package"
}


CHÍNH XÁC

{
    "name": "my-awesome-package-name"
}

1
Vâng, tôi có một khoảng trắng trong tên và nó không được cài đặt đúng cách.
Ansjovis86

1
Không chỉ về không gian, nó còn nói về '-' anh ấy đã sử dụng trong tên, tôi cũng đã gặp phải vấn đề tương tự, đặt - hoặc _ trong tên, nó sẽ hoạt động.
molagbal

4

Bạn có thể cần cài đặt grunt-cli, hãy thử điều này trước khi thực hiện cài đặt npm:

sudo npm install -g grunt-cli

Điều đó sửa lỗi grunt không thoát cho tôi, bạn cũng sẽ cần một tệp grunt hợp lệ.

Nguồn: https://stackoverflow.com/a/16456467/241294


Điều gì xảy ra khi bạn thử lệnh 'grunt' tại dấu nhắc lệnh của bạn? Có tồn tại trên con đường của bạn? Bạn nói đúng, có vẻ như nó được cài đặt từ pastebin của bạn. Bạn đã cài đặt nó với sudo và -g?
poida

Đó không phải là vấn đề với người lẩm ~ ᐅ which grunt /opt/local/bin/grunt
bẩm

Ngoài ra khi tôi clone repo chính nó, chứ không phải qua NPM và chạy npm installgrunt install, nó hoạt động tốt. Vấn đề là NPM dường như không cài đặt các phần phụ thuộc của repo như được chỉ định trongpackage.json
Ahmed Nuaman

Trong thư mục nào bạn đang tìm kiếm các gói phụ thuộc? Chúng không nên ở cấp cao nhất nhưng dưới: gói cấp cao nhất / node_modules / module-name / node_modules. Có thể đó là grunt không tìm thấy tập tin grunt vì nó làm việc trong thư mục sai?
poida

Đây không phải là vấn đề với grunt, khi bạn cài đặt các mô-đun với NPM, nó thường cung cấp một bản tóm tắt ở cuối bất kỳ sự phụ thuộc nào của mô-đun đó đã được cài đặt; Khi tôi cài đặt mô-đun trong câu hỏi, tôi không nhận được một bản tóm tắt của bất kỳ mô-đun phụ thuộc nào được cài đặt.
Ahmed Nuaman

4

Chỉ trong trường hợp bất cứ ai đang mắc phải tình trạng khó khăn này và xảy ra sai lầm tương tự như tôi đã làm, đây là những gì trong trường hợp của tôi. Sau khi đập đầu vào tường trong một giờ, tôi nhận ra rằng mình đã đặt cái json của mình không chính xác và "phụ thuộc" chính nằm bên trong "kho" khóa.
Không cần phải nói, không có lỗi rõ ràng và không có mô-đun được cài đặt.


3

Một cách khác để giải quyết vấn đề này là thêm phần này vào package.jsonphần tập lệnh mô-đun của bạn

"preinstall": "npm install {Packages You depend on}"

Điều này sẽ làm là gì, nó sẽ cài đặt tất cả các gói cần thiết cho mô-đun và bạn sẽ không gặp phải lỗi đó.


3

xảy ra với phiên bản nút cũ. sử dụng phiên bản mới nhất của nút như thế này:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

chỉnh sửa: cũng đảm bảo bạn save.
ví dụ:npm install yourmoduleName --save


2

Tôi đã nhận được lỗi này khi tôi cài đặt một môi trường Node dev sạch trên windows.

Để khắc phục điều này, tôi đã đi vào thư mục dự án mới của mình (mà tôi vừa mới sử dụng yo angular) và gõ hai lệnh:

npm install -g grunt --save-dev

Điều đó sẽ cài đặt các phụ thuộc grunt cục bộ cho dự án của bạn. Kế tiếp:

npm install

Điều đó sẽ đảm bảo tất cả các phụ thuộc dự án (mới) của bạn được cài đặt.

Tada!


2

Đáng để đề cập để đảm bảo sự phụ thuộc của bạn nên nằm trong dependenciesphần của bạn package.json(trái ngược với devDependencies).

Vấn đề của tôi về cơ bản giống như OP:

  • cài đặt một repo riêng (Hãy gọi nó repo1) thông qua "module-name": "git+ssh://git@myserver:user/my-repo-name.git"repo khác (Hãy gọi nó repo2),
  • trong repo2's node_modules, một gói phụ thuộc từ repo1không có ở đó.
  • Sai lầm ngớ ngẩn của tôi! .. repo1đã liệt kê sự phụ thuộc devDependenciesđó thay vìdependencies
  • Di chuyển phụ thuộc vào tôi repo1's package.jsontừ devDependencies đếndependencies
  • Trong tôi repo2, tôi đã loại bỏ sự phụ thuộc của mình node_modulespackage-lock.json, đã làm npm install, một sự phụ thuộc!

Tôi đã khai báo biến môi trường sản xuất NODE_ENV = trong Dockerfile của tôi phía trên lệnh cài đặt npm, khiến cho devDependencies không được cài đặt
Pieter De Clercq

0

Tôi đã từng gặp vấn đề tương tự. Nhưng trên cùng một máy, một dự án có gói.j.j tốt, trong đó tất cả các phụ thuộc của tôi được cài đặt thành công. Và trong một dự án khác, các phụ thuộc của gói.json không được cài đặt cho dù tôi có làm gì đi nữa. Tôi vừa sao chép gói.json và dán vào dự án khác. Va no đa hoạt động! Sự khác biệt tôi đã tìm thấy chỉ là dòng trống khi bắt đầu tập tin. Không biết hoặc nó ảnh hưởng đến bất cứ điều gì, có thể một số vấn đề khác. Nhưng vấn đề chỉ là tệp pack.json.


0

Tôi nghĩ rằng tôi cũng phải đối mặt với vấn đề này, và giải pháp tốt nhất tôi tìm thấy là nhìn vào bảng điều khiển của tôi và tìm ra lỗi đã bị ném. Vì vậy, tôi đã đọc nó một cách cẩn thận và thấy rằng vấn đề là tôi đã không chỉ định repo, mô tả và tên hợp lệ trong tôi package.json. Tôi đã thêm những mẩu thông tin đó và mọi thứ đều ổn.

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.