Npm kullanarak yerel bir modül mü kuruyorsunuz?


Yanıtlar:


481

Gönderen npm bağlantı belgelerinde :

Yerel modül dizininde:

$ cd ./package-dir
$ npm link

Modülü kullanmak için projenin dizininde:

$ cd ./project-dir
$ npm link package-name

Veya tek seferde göreli yollar kullanarak:

$ cd ./project-dir
$ npm link ../package-dir

Bu, başlık altında iki komutun kullanılmasına eşdeğerdir.


14
Şimdiye kadar gördüğüm tek aklı başında yaklaşım bu - npm neden bu kadar belirsiz / geniş w. yerel bir paket oluşturmak, kurmak ve kullanmak için, bilmiyorum ... link çalışır, (ve harika), ama terminoloji oldukça kafa karıştırıcı.
smaudet

6
@Rich Apodaca, doktor linki için teşekkürler. Sürecin geri alınmasından bahsetmiyor. Görünüşe göre tüm semboller oluşturmak, böylece bunları normal olarak kaldırabilir miyim?
Tyler Collier

1
@TylerCollier npm unlink'in ayna görüntüsü işlemi yığını gibi görünüyor stackoverflow.com/a/24940024/54426
Rich Apodaca

1
Sadece bir not, eğer Angular2 (veya belki başka uygulamalar?) Kullanıyorsanız, npm bağlantı etrafında belirli bir tür sorunun temel nedeni olarak bazı vızıltı var. Burada ve burada
The Red Pea

4
Ancak npm link, dış bağımlılıkların ikinci bir örneğini yaratacağını unutmayın . Eğer A paketine ihtiyacınız varsa B ve C'ye, B'ye C'ye ihtiyacınız varsa B'yi bağlamak A uygulamasının iki C
vakasına

422

sadece bir <folder>argüman sağlıyorsanız npm install, argüman paket adı yerine yerel klasöre işaret etmelidir:

npm install /path

5
Bağlantıdan farklı olarak, bu .npmignore kullanır.
Camille Wintz

30
@bithavoc En azından npm 5 itibariyle, bir klasör yüklemek artık bir kopya değil bir sembolik bağlantı oluşturuyor . Bkz. Docs.npmjs.com/cli/install
Frank Tan

3
Bu şekilde kullanmaya çalıştım, ancak modülüm peerDependencies'i bulamıyor.
Witalo Benicio

1
Yanıtlayan kişinin komut dosyasını çalıştırmadan rm -rf node_modulesönce ve npm installsonra yapmak güzel .
Renato Back

3
@FrankTan Evet, ama eski davranışı nasıl elde edebilirim? Ben istiyorum kopya!
Michael

151

Aynı kişi tarafından sorulup yanıtlandığından beri, bir npm bağlantısı ekleyeceğim , alternatif olarak bir .

dokümanlardan:

Bu, kendi eşyalarınızı kurmak için kullanışlıdır, böylece üzerinde tekrar çalışmanıza gerek kalmadan üzerinde çalışabilir ve tekrar tekrar test edebilirsiniz.

cd ~/projects/node-bloggy  # go into the dir of your main project
npm link ../node-redis     # link the dir of your dependency

[Düzenle] NPM 2.0'dan itibaren package.json içinde yerel bağımlılıkları beyan edebilirsiniz

"dependencies": {
    "bar": "file:../foo/bar"
  }

11
Sorunun orijinal amacı olmayabilir, ancak muhtemelen bunu google aracılığıyla bulan çoğu insanın istediği şeydir.
Dusty J

1
Bu yanıt eksik görünüyor, bir npm linkkez klasöre karşı (genel bir sembolik bağlantı oluşturmak için) çalıştırmanız ve sonra npm link package-nameprojenin klasörü içinde (projenizde global bir sembolik bağlantı kullanmak için) çalıştırmanız gerekir. Aşağıdaki cevap doğru cevaptır.
Thomas Potaire

8
@ThomasPotaire iki yanıtı da doğru. Npm bağlantı belgelerine bakarsanız, bu göreli dizin yaklaşımını steno olarak her iki yöntemi de sunar.
MJ

1
İkinci yöntem ( file:yaklaşımı kullanarak ) uygulamam ve yerel modülün bir bağımlılığı paylaşmasına izin verdi. npm linkSonuçta yaptığım test , bağımlılığın bir singleton olarak kullanılması gerektiğinde işleri bozan yinelenen bir bağımlılıkla sonuçlandı.
Daniel Waltrip

Yerel bir paketim vardı (paket1 diyelim), paket2 paket1'in göreceli yoluyla belirtilen bir bağımlılığa sahiptir. npm göreceli yol "file: ../../ package1" ile başladığında paketi kurmuyorum, '' ../../package1 "olduğunda çalışıyor, başlangıçta dosya eklemek başka bir şey ifade ediyor mu?
Dip686

17

npm pack + package.json

Benim için işe yarayan buydu:

ADIM 1: In module project, yürütün npm pack:

Bu bir <package-name>-<version>.tar.gz dosya oluşturur.

ADIM 2: Dosyayı consumer project

İdeal olarak, bu tür tüm dosyaları kökünüzdeki bir tmpklasöre koyabilirsiniz consumer-project:

3.ADIM package.json:

"dependencies": {
  "my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}

ADIM 4: Installpaketler:

npm installveya npm iveyayarn

Paketiniz consumer-project's node_modulesklasörünüzde mevcut olmalıdır .

İyi şanslar...


10

Bu yaklaşımlardan hiçbiri ( npm linkveya package.jsondosya bağımlılığı), yerel modülde yalnızca projenizin kapsamında yüklemek istediğiniz eş bağımlılıkları varsa işe yaramaz.

Örneğin:

/local/mymodule/package.json:
  "name": "mymodule",
  "peerDependencies":
  {
    "foo": "^2.5"
  }

/dev/myproject/package.json:
  "dependencies":
  {
    "mymodule": "file:/local/mymodule",
    "foo": "^2.5"
  }

Bu senaryoda, npm setleri yukarı myproject's node_modules/böyle:

/dev/myproject/node_modules/
  foo/
  mymodule -> /local/mymodule

Düğüm yüklendiğinde mymoduleve yüklendiğinde require('foo'), düğüm mymodulesembolik bağlantıyı çözer ve sonra yalnızca bulamadığı /local/mymodule/node_modules/(ve atalarını) arar foo. Bunun yerine, düğümün içine bakmasını istiyoruz /local/myproject/node_modules/, çünkü projemizin nereden geldiğini ve nereden geldiğinifoo kurulduk.

Yani, biz ya düğümü anlatmak için bir yol gerekir değil bu sembolik çözmek ararken foo, ya da biz bir yüklemeye UÖM'yi anlatmak için bir yol gerekir kopyasını ait mymoduledosya bağımlılığı sözdizimi kullanıldığında package.json. İkisini de yapmanın bir yolunu bulamadım maalesef :(


Yüklü NODE_PATHolan node_modules/yere işaret edecek bir geçici çözüm buldum foo. Yani yukarıdaki durum için, bu olurdu: NODE_PATH=/dev/myproject/node_modules/ Bu mymodulebulmayı sağlar foo.
Paul Medynski

Bunun için bir çözüm var. Bağımlılık modüllerini proje kök klasörüne koyun . Package.json içindeki bağımlılıklarınızı her zamanki 'file:' önekiyle tanımlayın . Do i npm Bu da bağımlılıkları diğer türleri için olduğu gibi kendi bağımlılıkları toplevel node_modules için çekilebilir sıra sıra projenin node_modules bir sembolik yaratacaktır. Npm sürümüm v6.14.4. Bunu düzeltmek için birkaç saat geçirdikten sonra, bu çözümü burada bulabilirsiniz: ( atmos.washington.edu/~nbren12/reports/journal/… ). Teşekkürler nbren12.
sasebot

Aynı sorunu yaşıyordum. Bu cevabı buldum: stackoverflow.com/questions/50807329/… , bu akran bağımlılıkları ve yerel kütüphaneler ile sorunumu çözüyor.
theawless

0

Ana mülkü kaçırıyor musunuz?

Önceki insanlar yanıt verdiği gibi npm --save ../location-of-your-packages-root-directory. ../location-of-your-packages-root-directoryAncak çalışması için iki şey olması gerekir.

1) package.jsonbu dizinde

2) mainmülkiyet package.jsonkurmak ve olmalıdır çalışma ig "main": "src/index.js",eğer için giriş dosyası ../location-of-your-packages-root-directoryDİR../location-of-your-packages-root-directory/src/index.js

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.