NPM: "npm link" modülü bulunamadıktan sonra


93

NodeJS için birincisi adlandırılmış aligatorve ikincisi olmak üzere iki modül geliştiriyorum aligator-methods. İkincisi, ilkinin çalışmasına bağlıdır. Bu iki modülü aynı anda geliştiriyorum ve küresel bağlantı kurmak istiyorum, aligatorböylece npm kayıt defterinde olduğu gibi kullanabileyim ve küresel olarak kurdum. Bunu yapmak için NPM dokümantasyonu kullanmam gerektiğini söylüyor npm linkama çalışmıyor.

package.jsonModül dosyası 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"
  }
}

package.jsonModül dosyası 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"
 }
}

Her şeyden önce modülü global olarak bağladım:

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

Bu, yanılmıyorsam modülümün global bir referansını oluşturdu aligatorve şimdi bu modülü bilgisayarda istediğim her yerden kullanabilirim.

Sonra diğer modüle gittim ve bağımlılığı kurmaya çalıştım ama bana şu çıktıyı verdi:

$ 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

Hatta doğrudan şununla ilişkilendirmeyi denedim:

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

Ama işe yaramadı.

Bunun ne olabileceğine dair herhangi bir fikrin var mı? Homebrew tarafından yapıldığı için düğüm ve npm kurulumumla bir ilgisi olabileceğini bir yerde okudum ve bazen kullanmam gerekiyordu sudo, olası görünmüyordu ama önerdiklerini denedim ve işe yaramadı.


Gönderilen kodda, ilk modülün adı yazılır aligtorve ikinci modülde ona atıfta bulunmaya çalışırsınız aligator. Bu, bağımlılığınızın da çökmesine neden olabilir.
Bruno Toffolo

@BrunoToffolo Evet, haklısın, ama bu durumda, bu sadece yazıdaki bir yazım hatasıydı. Düzelttim, teşekkürler.
Roc

sefil hayatımın 4 saatini kaybettim webpack yapılandırması: / Hayatımı kurtardın! +1
Tom Sarduy

8
Vay ben aynı problem vardı mainSesimin package.json, sizin düzeltme ile cevap güncellenmesi için teşekkür ederim!
mattyb

Cevabı bulduysanız, bunu cevap olarak göndermek ve soruyu bununla çözülmüş olarak ayarlamak iyi bir fikir olacaktır :)
Alberto S.

Yanıtlar:


40

NVM nedeniyle bu sorunla karşılaştım, bağımlılık için bir düğüm sürümü ve bağımlı için başka bir düğüm çalıştırıyordum.


1
Bunu tesadüfen çözebileceğiniz bir konuma siz veya başka biri bağlanabilir mi?
Kevin Danikowski

4
Benim durumumda her iki pakette de 'nvm use <VERSION>' çalıştırmam gerekiyor, burada VERSION her iki paket için de aynıydı.
linuxdan

34

Silip tekrar package-lock.jsonçalıştırmak npm installsorunu benim için çözdü.


3
Bu, mevcut sorunu çözebilir, ancak muhtemelen daha büyük sorunlar yaratır. kilit dosyaları çok önemli bir rol oynayabilir ve olmamalıdır silinecektir. Kısaca: her takım üyesinin aynı bağımlılıkları kullanmasını sağlayan mekanizmalardır. Yığın taşması ile ilgili bu yanıtı kontrol edebilirsiniz: stackoverflow.com/questions/54124033/… Ancak belgelerde var olma nedenini okumak da iyi bir başlangıçtır. docs.npmjs.com/files/package-lock.json
SKuijers

1
Kalın yazıyla bunun tamamen son çare olması gerektiğini belirten bir not varsa, bu cevabı yükseltmeye istekli olurum. @SKuijers'ın işaret ettiği gibi, kilit dosyaları, bağımlılık sürümlerinin korunmasında önemli bir rol oynar. Muhtemelen, bağımlılık versiyonları içinde kilitli edilmiştir package.jsonyanı, ama çoğu zaman görüyorum package-lock.jsonya yarn.lockbunun için bekçisi olmuştur.
FrostyDog

33

Sorun, mainözelliğinin package.jsonvar olmayan bir dosyayı göstermesiydi. Görünüşe göre problem birden fazla nedenden dolayı olabilir, bu yüzden diğer cevaplara bir göz attığınızdan emin olun.


1
Aman Tanrım, bunu 50 kez yükseltmek ve her olumlu oy için kendimi bir kez yüze oturtmak istiyorum.
Ben

Projenin gerektirdiğini bilmek ilginç main. Çoğunlukla onsuz yaptım, ancak sanırım bu küçük sorunları yaratıyor.
cst1992

Güzel bul! Cevabınızı gördüm ve bunun benim sorunum olduğunu hemen anladım :).
slashp

12

Dizinden ilk çalıştırdığınızda npm link, aligatorglobal node_modules dizininizden aligator. Çalıştırdığınızda Sonra npm link aligatorgelen aligator-methodsdizinde, bağlamak aligator(sizin örnekte yukarıdaki çıktı gösterileri gibi) orijinal kaynağına yerel olarak yüklü node_modules gelen. Bu yapıldıktan sonra, zaten "kurulu" olduğu için artık kurmaya gerek kalmayacaktır. npm link aligatorKomutu çalıştırdıktan sonra hangi hataları görüyorsunuz ?

Yalnızca yerel bir dizinden bir bağımlılık kurmak istiyorsanız, npm installbunun yerine kullanmayı deneyebilirsiniz . Örneğin:

$ cd ~ / aligator-yöntemleri
$ npm install ../aligator


6
Bunu çözmek için gösterdiğiniz çaba için teşekkür ederiz. Benim npm linkherhangi bir hata göstermemiştir. Benim durumumdaki sorun, mülkün mainmevcut olmayan bir dosyaya işaret ediyor olmasıydı. Bana gelince npm install, haklısın, her şeyi yapan npm linkherhangi bir şey yüklememe gerek yoktu . Bunun için teşekkürler bilmiyordum.
Roc

1
Aynı problemi yaşıyorum, ancak bir çözüm bulamadım ... her bağlantılı paketi ayrı ayrı talep etmeye çalışırsam, biri dışında hepsi çalışıyor ... çalışmayan sadece şöyle diyor: "Hata: modül bulunamıyor 'modülü -i-sadece bağlantılı '".
Michael

@Michael, başarısız olan modülü "dinamik olarak" gerektirmeye çalışan daha derin bir dizine yerleştirilmiş bir modülüm var gibi görünüyor (yani, gereksinim () için iletilen dizenin adı modüle aktarıldı), bu nedenle npm daha derin dizine bağlantı.
Michael

4

Sorunum, repo A'nın kullandığı npmve repo B'nin kullandığı ile sonuçlandı yarn, bu yüzden yarn linkonu npm link package-namerepo A'ya çekmek için repo B'de çalıştırmam gerekiyordu .


Siz bayım, günümü yarattın! Teşekkürler
Alec

3

Benim için işe yarayan şey şuydu:

  1. node_modulesHem bağımlılık hem de tüketici modülünü silin .
  2. Çalıştırmak npm unlink --no-save [dependency-module]
  3. npm-link başına 2-link komutlarıyla yeniden bağlan

Artık yayınlanmamış modülümü yerel olarak tamamen test edebiliyorum.

Ek olarak, pek sağlam olmasa da yayınlanmamış modüllerinizi test etmenize yardımcı olabilecek bir npm paketi komutu vardır.

npm-paketi


2

Bu sorunun benim sürümüm için düzelt; npm v5.3.0'da, node_modulesbaşka bir projeye bağlanırken depodan kaldırdım .

Npm v3'ten sonra yapıyı olabildiğince düzleştirmek için tüm node_modules bağımlılıklarını bir node_modules dizinine (projenizde bir tane) koymaya çalıştıklarını öğrendim ( http://codetunnel.io/npm-5-changes-to-npm -link / ).


1

Benim için bu , yerel paketimin sürüm numarasını 0.1.0'dan 0.0.1'e düşürdüğümde oldu . Ve bu pakete bağladığım projelerde hala daha yüksek sürüm numarasını kullanıyordum. Bağımlılıkları güncelleme sorunu package.jsondüzeltildi.


0

PeerDependency kullanırken

İki paket geliştiriyorum stejsve stejs-loader. stejs-loadersahip stejsbir şekilde peerDependency. Çalıştığımda npm link stejs-loaderve projemde bulamadığım npm link stejsbir hata alıyordum . Ben çalıştırarak sabit var Rehberinde .stejs-loaderstejsnpm link stejsstejs-loader


0

Tsconfig modülünü kontrol edin

Benim gibi tsconfig değiştirmek olduysa modulegelen es5etmek esnextya da bir şey, o zaman moduleResolutionvarsayılan değişmiş olabilir.

Olmadan moduleResolution"düğüm" olarak set olmak typescript node_modules paketlerini çözmez.

Derleyici Seçenekleri sayfasında, varsayılan değerin değerine nasıl bağlı olduğunu okuyabilirsiniz, bunun varsayılan değeri modulede buna bağlıdır target- ancak muhtemelen bunu açıkça "düğüm" olarak ayarlayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.