NPM: Sau khi không tìm thấy mô-đun “liên kết npm”


88

Tôi đang phát triển hai mô-đun cho NodeJS, mô-đun đầu tiên được đặt tên aligatorvà mô-đun thứ hai aligator-methods. Cái thứ hai phụ thuộc vào cái thứ nhất để làm việc. Tôi đang phát triển hai mô-đun này cùng lúc và tôi muốn liên kết toàn cầu aligatorđể tôi có thể sử dụng nó giống như trên sổ đăng ký npm và tôi vừa cài đặt nó trên toàn cầu. Để thực hiện điều này, tài liệu NPM nói rằng tôi cần sử dụng npm linknhưng nó không hoạt động.

Tệp package.jsoncủa mô-đun aligator:

{
  "name": "aligator",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "private": true,
  "directories": {
    "doc": "docs",
    "example": "examples",
    "test": "spec"
  },
  "scripts": {
    "test": "gulp jasmine"
  },
  "license": "MIT",
  "devDependencies": {
    "gulp": "^3.6.2",
    "gulp-jasmine": "^0.2.0",
    "gulp-jshint": "^1.6.1",
    "gulp-rename": "^1.2.0",
    "jasmine-node": "^1.14.3"
  },
  "dependencies": {
    "bluebird": "^1.2.4",
    "lodash": "^2.4.1",
    "mathjs": "^0.22.0"
  }
}

Tệp package.jsoncủa mô-đun aligator-methods:

{
 "name": "aligator-methods",
 "version": "0.0.1",
 "description": "",
 "main": "index.js",
 "private": true,
 "directories": {
   "doc": "docs",
   "example": "examples",
   "test": "jasmine"
 },
 "scripts": {
   "test": "gulp jasmine"
 },
 "author": "",
 "license": "MIT",
 "devDependencies": {
   "gulp": "^3.6.2",
   "gulp-jasmine": "^0.2.0",
   "gulp-jshint": "^1.6.1",
   "gulp-rename": "^1.2.0",
   "jasmine-node": "^1.14.3"
 },
 "dependencies": {
   "lodash": "^2.4.1",
   "mathjs": "^0.22.0",
   "aligator": "^0.0.1"
 }
}

Trước hết, tôi đã liên kết mô-đun trên toàn cầu:

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

Điều này nếu tôi không nhầm thì đã tạo ra một tham chiếu chung cho mô-đun của tôi aligatorvà bây giờ tôi có thể sử dụng mô-đun này từ mọi nơi tôi muốn trong máy tính.

Sau đó, tôi đi đến mô-đun khác và cố gắng cài đặt phần phụ thuộc nhưng nó cho tôi kết quả này:

$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0

Tôi thậm chí đã cố gắng liên kết nó trực tiếp với:

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

Nhưng nó cũng không hoạt động.

Bất kỳ suy nghĩ về những gì nó có thể xảy ra? Tôi đọc ở đâu đó rằng có lẽ nó liên quan đến việc cài đặt nodenpm của tôi vì nó được tạo bởi Homebrew và vì vậy đôi khi tôi cần sử dụng sudo, điều đó có vẻ khó xảy ra nhưng tôi đã thử những gì họ đề xuất và nó cũng không hoạt động.


Trong mã đã đăng, tên của mô-đun đầu tiên được viết aligtorvà bạn cố gắng tham khảo nó trong mô-đun thứ hai như aligator. Điều đó cũng có thể làm cho sự phụ thuộc của bạn sụp đổ.
Bruno Toffolo

@BrunoToffolo Vâng, bạn nói đúng, nhưng, trong trường hợp này, đây chỉ là lỗi chính tả trong bài đăng. Tôi đã sửa chữa nó, cảm ơn.
Roc

mất 4 giờ trong cuộc sống khốn khổ của tôi khi lừa cấu hình webpack: / Bạn đã cứu mạng tôi! +1
Tom Sarduy

8
Chà, tôi đã gặp vấn đề tương tự với vấn đề maincủa tôi package.json, cảm ơn bạn đã cập nhật câu trả lời cùng với bản sửa lỗi của bạn!
mattyb

nếu bạn đã tìm thấy câu trả lời, bạn nên đăng câu trả lời đó dưới dạng câu trả lời và đặt câu hỏi như đã giải quyết xong câu trả lời đó :)
Alberto S.

Câu trả lời:


39

Tôi gặp sự cố này do NVM, tôi đang chạy một phiên bản của nút cho phần phụ thuộc và một phiên bản khác cho phần phụ thuộc.


1
Bạn hoặc bất kỳ ai khác có thể liên kết đến một địa điểm để giải quyết vấn đề này một cách tình cờ không?
Kevin Danikowski

4
Trong trường hợp của tôi, tôi cần chạy 'nvm use <VERSION>' trên cả hai gói, trong đó VERSION giống nhau cho cả hai gói.
linuxdan

29

Xóa package-lock.jsonrồi chạy npm installlại giải quyết được sự cố cho tôi.


2
Điều đó có thể giải quyết vấn đề hiện tại nhưng có thể tạo ra một số vấn đề lớn hơn. tập tin khóa đóng một vai trò rất quan trọng và không nên xóa. Tóm lại: đó là các cơ chế đảm bảo rằng mỗi thành viên trong nhóm đang sử dụng các phụ thuộc giống hệt nhau. Bạn có thể xem câu trả lời này trên stack stack: stackoverflow.com/questions/54124033/… Nhưng đọc qua lý do nó tồn tại trong tài liệu cũng là một khởi đầu tốt. docs.npmjs.com/files/package-lock.json
SKuijers

Tôi sẵn sàng nâng cao câu trả lời này nếu có một ghi chú in đậm chỉ ra rằng đây hoàn toàn nên là phương sách cuối cùng. Như @SKuijers đã chỉ ra, các tệp khóa đóng một vai trò thiết yếu trong việc duy trì các phiên bản phụ thuộc. Có lẽ, các phiên bản phụ thuộc cũng đã bị khóa lại package.json, nhưng hầu hết thời gian tôi thấy rằng package-lock.jsonhoặc yarn.lockđã là người gác cổng cho việc này.
FrostyDog

28

Vấn đề là thuộc maintính của package.jsonđã trỏ đến một tệp không tồn tại. Có vẻ như sự cố có thể xảy ra do nhiều lý do, vì vậy hãy chắc chắn xem các câu trả lời khác.


omg tôi muốn ủng hộ điều này 50 lần và bản thân mình facepalm một lần cho mỗi lần ủng hộ.
Ben

Thật thú vị khi biết rằng dự án yêu cầu main. Hầu hết tôi đã làm mà không có nó, nhưng đoán nó tạo ra những vấn đề nhỏ này.
cst1992

Rất vui! Tôi đã thấy câu trả lời của bạn và ngay lập tức biết đây là vấn đề của tôi :).
slp

11

Khi bạn lần đầu tiên chạy npm linktừ aligatorthư mục, bạn tạo một liên kết từ thư mục node_modules toàn cầu của mình tới aligator. Sau đó, khi bạn chạy thư mục npm link aligatortừ aligator-methodsthư mục, bạn liên kết aligatortừ node_modules được cài đặt cục bộ của mình với nguồn ban đầu (như kết quả hiển thị trong ví dụ của bạn ở trên). Khi điều này được thực hiện, không cần phải cài đặt nữa vì nó đã được "cài đặt". Bạn gặp lỗi nào sau khi chạy npm link aligatorlệnh?

Nếu bạn chỉ muốn cài đặt phần phụ thuộc từ thư mục cục bộ, bạn có thể thử sử dụng npm installthay thế. Ví dụ:

$ cd ~ / aligator-method
$ npm install ../aligator


5
Cảm ơn vì nỗ lực của bạn để giải quyết vấn đề này. Của tôi npm linkkhông hiển thị bất kỳ lỗi. Vấn đề trong trường hợp của tôi là gắn thuộc tính mainđang trỏ đến một tệp không tồn tại. Đối với tôi, npm installbạn nói đúng, tôi không cần cài đặt bất cứ thứ gì npm link. Cảm ơn vì tôi đã không biết điều đó.
Roc

1
Tôi đang gặp vấn đề tương tự, nhưng chưa tìm thấy giải pháp ... nếu tôi cố gắng yêu cầu riêng từng gói được liên kết, tất cả trừ một gói hoạt động ... gói không hoạt động chỉ thông báo: "Lỗi: Không thể tìm thấy mô-đun ' -i-vừa-liên kết '".
Michael

@Michael có vẻ như tôi có một mô-đun được lồng trong một thư mục sâu hơn đang cố gắng "động" yêu cầu mô-đun đang bị lỗi (tức là tên của chuỗi được truyền cho request () đã được chuyển đến mô-đun), do đó tôi phải npm liên kết vào thư mục sâu hơn.
Michael

4

Vấn đề của tôi cuối cùng là repo A đang sử dụng npmvà repo B đang sử dụng yarn, vì vậy tôi cần chạy yarn linktrong repo B để đưa nó vào qua npm link package-namerepo A.


Ngài đã làm nên ngày của tôi! Cảm ơn
Alec

2

Khắc phục sự cố này cho phiên bản của tôi; trong npm v5.3.0, tôi đã xóa node_moduleskhỏi repo mà tôi đang liên kết vào một dự án khác.

Tôi phát hiện ra rằng sau npm v3, họ cố gắng đặt tất cả các phần phụ thuộc node_modules vào một thư mục node_modules (một thư mục trong dự án của bạn) để làm phẳng cấu trúc nhất có thể ( http://codetunnel.io/npm-5-changes-to-npm -liên kết / ).


2

Điều làm việc cho tôi là:

  1. Xóa node_modulestrong cả mô-đun người phụ thuộc và người tiêu dùng.
  2. Chạy npm unlink --no-save [dependency-module]
  3. liên kết lại với các lệnh 2 liên kết theo npm-link

Bây giờ tôi có thể kiểm tra toàn bộ mô-đun chưa được xuất bản của mình cục bộ.

Ngoài ra, có một lệnh gói npm có thể giúp bạn kiểm tra các mô-đun chưa được xuất bản của mình, mặc dù không hoàn toàn mạnh mẽ.

npm-pack


1

Đối với tôi, điều này đã xảy ra khi tôi giảm số phiên bản của gói cục bộ từ 0,1.0 xuống 0,0.1. Và trong các dự án mà tôi đã liên kết với gói này, tôi vẫn đang sử dụng số phiên bản cao hơn. Cập nhật các phụ thuộc trong package.jsonnó đã sửa.


0

Khi sử dụng peerDependency

Tôi đang phát triển hai gói stejs, và stejs-loader. stejs-loaderstejsnhư một peerDependency. Khi tôi chạy npm link stejs-loadernpm link stejstrong dự án của mình, tôi gặp lỗi stejs-loaderkhông thể tìm thấy stejs. Tôi đã sửa nó bằng cách chạy npm link stejstrong thư mục của stejs-loader.


0

Kiểm tra mô-đun tsconfigResolution

Nếu giống như tôi, bạn đã tình cờ thay đổi tsconfig moduletừ es5thành esnexthoặc một cái gì đó, thì moduleResolutionmặc định có thể đã thay đổi.

Nếu không moduleResolutionđược đặt thành "nút", chỉ định kiểu sẽ không giải quyết các gói node_modules.

Bạn có thể đọc trên trang Tùy chọn trình biên dịch về cách giá trị mặc định phụ thuộc vào giá trị của modulemà giá trị mặc định của nó phụ thuộc vào target- nhưng có thể đặt nó thành "nút" một cách rõ ràng.

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.