NPM: Setelah modul “npm link” tidak ditemukan

93

Saya sedang mengembangkan dua modul untuk NodeJS, yang pertama bernama aligatordan yang kedua aligator-methods. Yang kedua tergantung pada yang pertama untuk bekerja. Saya mengembangkan dua modul ini pada saat yang sama dan saya ingin tautan global aligatorsehingga saya dapat menggunakannya seperti di registri npm dan saya baru saja menginstalnya secara global. Untuk melakukan ini, dokumentasi NPM mengatakan bahwa saya perlu menggunakan npm linktetapi tidak berfungsi.

File package.jsonmodul 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"
  }
}

File package.jsonmodul 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"
 }
}

Pertama-tama saya menautkan modul secara global:

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

Ini jika saya tidak salah telah membuat referensi global modul saya aligatordan sekarang saya dapat menggunakan modul ini dari mana pun yang saya inginkan di komputer.

Kemudian saya pergi ke modul lain dan mencoba menginstal dependensi tetapi itu memberi saya output ini:

$ 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

Saya bahkan mencoba menautkannya langsung dengan:

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

Tapi itu juga tidak berhasil.

Ada pemikiran tentang apa yang mungkin terjadi? Saya membaca di suatu tempat bahwa mungkin itu ada hubungannya dengan instalasi node dan npm saya karena dibuat oleh Homebrew dan terkadang saya perlu menggunakan sudo, sepertinya tidak mungkin tetapi saya mencoba apa yang mereka usulkan dan itu tidak berhasil juga.

Roc
sumber
Dalam kode yang diposting, nama modul pertama dieja aligtordan Anda mencoba merujuknya di modul kedua sebagai aligator. Itu juga dapat membuat ketergantungan Anda macet.
Bruno Toffolo
@BrunoToffolo Ya, Anda benar, tetapi, dalam hal ini, ini hanya salah eja di pos. Terima kasih sudah saya perbaiki.
Roc
kehilangan 4 jam dari hidup saya yang menyedihkan karena menipu konfigurasi webpack: / Anda menyelamatkan hidup saya! +1
Tom Sarduy
8
Wow saya punya masalah yang sama dengan mainsaya package.json, terima kasih telah memperbarui jawaban dengan perbaikan Anda!
mattyb
jika Anda telah menemukan jawabannya, akan menjadi ide yang baik untuk memposting itu sebagai jawaban dan menetapkan pertanyaan sebagai terselesaikan dengan yang itu :)
Alberto S.

Jawaban:

40

Saya mengalami masalah ini karena NVM, saya menjalankan satu versi node untuk dependensi dan satu lagi untuk dependensi.

linuxdan.dll
sumber
1
Dapatkah Anda atau orang lain menautkan ke lokasi untuk menyelesaikan masalah ini secara kebetulan?
Kevin Danikowski
4
Dalam kasus saya, saya perlu menjalankan 'nvm use <VERSION>' pada kedua paket, di mana VERSION sama untuk kedua paket.
linuxdan
34

Menghapus package-lock.jsonlalu menjalankan npm installkembali menyelesaikan masalah bagi saya.

Sean Inge Asbjørnsen
sumber
3
Itu bisa menyelesaikan masalah saat ini tetapi mungkin menciptakan beberapa masalah yang lebih besar. file kunci memainkan peran yang sangat penting dan tidak boleh dihapus. Singkatnya: ini adalah mekanisme yang memastikan bahwa setiap anggota tim menggunakan dependensi yang sama persis. Anda dapat memeriksa jawaban ini di stack overflow: stackoverflow.com/questions/54124033/… Tapi membaca alasannya di dokumen adalah awal yang baik juga. docs.npmjs.com/files/package-lock.json
SKuijers
1
Saya bersedia menambahkan jawaban ini jika ada catatan yang dicetak tebal yang menunjukkan bahwa ini harus menjadi pilihan terakhir. Seperti yang ditunjukkan @SKuijers, file kunci memainkan peran penting dalam mempertahankan versi dependensi. Agaknya, versi dependensi telah dikunci package.jsonjuga, tetapi sebagian besar waktu saya melihat bahwa package-lock.jsonatau yarn.locktelah menjadi penjaga gerbang untuk ini.
FrostyDog
33

Masalahnya adalah mainproperti dari package.jsonmenunjuk ke file yang tidak ada. Tampaknya masalah dapat terjadi karena berbagai alasan, jadi pastikan untuk melihat jawaban lain.

Roc
sumber
1
Ya ampun saya ingin upvote ini 50 kali dan facepalm sendiri sekali untuk setiap upvote.
Ben
Menarik untuk mengetahui bahwa proyek membutuhkan main. Sebagian besar saya melakukannya tanpa itu, tapi tebak itu menciptakan masalah kecil ini.
cst1992
Temuan bagus! Saya melihat jawaban Anda dan langsung tahu ini adalah masalah saya :).
slashp
12

Saat Anda pertama kali menjalankan npm linkdari aligatordirektori, Anda membuat tautan dari direktori global node_modules ke aligator. Kemudian ketika Anda menjalankan npm link aligatordari aligator-methodsdirektori, Anda menautkan aligatordari node_modules yang diinstal secara lokal ke sumber asli (seperti yang ditunjukkan keluaran dalam contoh Anda di atas). Setelah ini selesai, tidak perlu menginstal lagi karena sudah "diinstal". Kesalahan apa yang Anda lihat setelah Anda menjalankan npm link aligatorperintah?

Jika Anda hanya ingin menginstal dependensi dari direktori lokal, Anda dapat mencoba menggunakan npm install. Sebagai contoh:

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

dylant
sumber
6
Terima kasih atas usaha Anda untuk menyelesaikan ini. Saya npm linktidak menunjukkan kesalahan apa pun. Masalah dalam kasus saya adalah properti maintersebut mengarah ke file yang tidak ada. Adapun saya, npm installAnda benar, saya tidak perlu menginstal apa pun dan npm linkmelakukan semuanya. Terima kasih untuk itu saya tidak mengetahuinya.
Roc
1
Saya mengalami masalah yang sama, tetapi belum menemukan solusi ... jika saya mencoba untuk secara individual meminta setiap paket yang ditautkan, semuanya kecuali satu berfungsi ... yang tidak berfungsi hanya mengatakan: "Kesalahan: Tidak dapat menemukan modul 'modul -saya-baru-ditautkan '".
Michael
@Michael sepertinya saya memiliki modul yang bersarang di direktori yang lebih dalam yang mencoba untuk "secara dinamis" memerlukan modul yang gagal (yaitu nama string yang diteruskan ke require () diteruskan ke modul), oleh karena itu saya harus npm tautkan ke direktori yang lebih dalam.
Michael
4

Masalah saya akhirnya adalah bahwa repo A digunakan npmdan repo B sedang digunakan yarn, jadi saya perlu menjalankan yarn linkdi repo B untuk menariknya masuk melalui npm link package-nameke repo A.

FrostyDog
sumber
Anda, Pak, membuat hari saya menyenangkan! Terima kasih
Alec
3

Apa yang berhasil bagi saya adalah:

  1. Hapus node_modulesdi modul ketergantungan dan konsumen.
  2. Lari npm unlink --no-save [dependency-module]
  3. re-link dengan perintah 2-link sesuai npm-link

Sekarang saya dapat menguji sepenuhnya modul saya yang tidak dipublikasikan secara lokal.

Selain itu, ada perintah paket npm yang dapat membantu Anda menguji modul yang tidak diterbitkan, meskipun tidak sekuat itu.

npm-pack

SandeepJ
sumber
2

Perbaiki untuk versi saya tentang masalah ini; di npm v5.3.0, saya menghapus node_modulesdari repo yang saya tautkan ke proyek lain.

Saya menemukan bahwa setelah npm v3 mereka mencoba untuk menempatkan semua dependensi node_modules ke dalam satu direktori node_modules (satu di proyek Anda) untuk meratakan struktur sebanyak mungkin ( http://codetunnel.io/npm-5-changes-to-npm -link / ).

crollywood
sumber
1

Bagi saya ini terjadi ketika saya menurunkan nomor versi paket lokal saya dari 0.1.0 menjadi 0.0.1. Dan dalam proyek tempat saya menautkan ke paket ini, saya masih menggunakan nomor versi yang lebih tinggi. Memperbarui dependensi dalam package.jsonmemperbaikinya.

Flion
sumber
0

Saat menggunakan peerDependency

Saya sedang mengembangkan dua paket stejs,, dan stejs-loader. stejs-loadermemiliki stejssebagai a peerDependency. Ketika saya menjalankan npm link stejs-loaderdan npm link stejsdalam proyek saya, saya mendapatkan kesalahan itustejs-loader tidak dapat ditemukan stejs. Saya memperbaikinya dengan menjalankan npm link stejsdirektori stejs-loader.

ItsaMeTuni
sumber
0

Periksa tsconfig moduleResolution

Jika seperti saya, Anda kebetulan mengubah tsconfig moduledari es5menjadi esnextatau semacamnya, makamoduleResolution defaultnya mungkin telah berubah.

Tanpa moduleResolution disetel ke "node", skrip tidak akan menyelesaikan paket node_modules.

Anda dapat membaca di halaman Compiler Options tentang bagaimana nilai default bergantung pada nilai module, yang defaultnya bergantung pada target- tapi mungkin secara eksplisit mengaturnya ke "node".

Matthias
sumber