yerel modüller npm paket bağımlılıkları olarak nasıl belirtilir


267

Bağımlılıklar altında package.json dosyasında belirtilen üçüncü taraf modülleri (örn. 'Ekspres') olağan bağımlılık kümesi olan bir uygulama var. Örneğin

"express"     : "3.1.1"

Kendi kodumu modüler olarak yapılandırmak ve package.json tarafından yüklenecek yerel (şu anda içinde bulunduğum dosya sisteminde anlamı) modülleri bir dizi var istiyorum. Yerel bir modülü çalıştırarak kurabileceğimi biliyorum:

npm install path/to/mymodule

Ancak, bunun package.json bağımlılık yapısı aracılığıyla nasıl yapılacağını bilmiyorum. --saveBu "mymodule": "0.0.0"komuttaki seçeneği kullanmak benim package.json'a koymaktır (dosyayolu konumuna başvurmaz). Daha sonra yüklü sürümü node_modules'ten kaldırır ve package.json'dan yeniden yüklemeyi denerseniz, başarısız olur (çünkü merkezi kayıt defterinde "mymodule" arar ve yerel olarak görünmez).

Eminim bunu söylemenin bir yolu "dependencies": {} bir dosya sistemi yolundan yüklenmesini istediğim yapıyı bir yolu ama nasıl bilmiyorum.

Başka kimsede bu sorun vardı? Teşekkürler.


1
Gerçekten iyi bir soru. S package.jsonsahip olduklarımıza eşdeğer bir özellik olmadığını anlamak üzücü Gemfile.
Jarl

Yanıtlar:


405

npm install şimdi bunu destekliyor

npm install --save ../path/to/mymodule

Bunun çalışması mymoduleiçin kendine ait bir modül olarak yapılandırılması gerekir package.json. Bkz . NodeJS modülleri oluşturma .

Npm 2.0 itibarıyla yerel bağımlılıklar yerel olarak desteklenmektedir. Benzer bir soru için danilopopeye'nin cevabına bakınız . Yanıtını burada kopyaladım, çünkü bu soru web arama sonuçlarında çok yüksek.

Bu özellik, npm'nin 2.0.0 sürümünde uygulanmıştır. Örneğin:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

Aşağıdaki yollardan herhangi biri de geçerlidir:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

senkronizasyon güncellemeleri

Yana npm installkopya mymodulehalinde node_modules, değişikliklermymodule bireyin kaynağı otomatik bağımlı proje tarafından görülmez.

Bağımlı projeyi güncellemenin iki yolu vardır.

  • Sürümünü güncelleyin mymoduleve kullanınnpm update : Yukarıda görebileceğiniz gibi, package.json"bağımlılıklar" girdisi, normal bağımlılıklar için gördüğünüz gibi bir sürüm belirtici içermez. Bunun yerine, yerel bağımlılıklar için, 's tarafından belirlenen npm updateen son sürümün kurulu olduğundan emin olmaya çalışır . Chriskelly'nin bu özel sorunun cevabına bakınız .mymodulepackage.json

  • Kullanarak yeniden yükleyin npm install. Bu mymodule, daha eski olsa veya alternatif bir dalı kullanıma alınmış olsa bile, kaynak yolundaki her şeyi yükler .


2
Bu benim için çalıştı. (Az önce yerel bir göreceli yol yaptım"mymodule":"file:mymoduledir"
Don Rhummy

72
npm install --save ../my-local-repo
Ivan Rave

15
Ve projede nasıl kullanılır? Ben böyle çağırmaya çalışıyorum import { HelloWorld } from "my-test-lib";, ama "Cant find module" hatası alıyorum. Lütfen stackoverflow.com/questions/46818083/…
Vitalii Vasylenko adresine bakınız.

6
@LucioMollinedo, yerel modülü nasıl içe aktardığınızın sözdizimini paylaşabilir misiniz? Vitallii ile olduğu gibi, "Can't fine module" hatası alıyorumimport { HelloWorld } from "my-test-lib";
Stan James

7
Bu, bir pakete referans
Glass Cannon


11

Sonunda düzgün bir yol bulamadım, bu yüzden adlı bir dizin oluşturmaya gittim local_modulesve sonra bu bashscript'i script.json komut dosyalarına ekledim-> preinstall

#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f "${packageJson}" ]; then
        echo "installing ${i}..."
        npm install "${i}"
    fi
done

5

İle çok mücadele ettikten sonra npm link (yerel modülleri bir kayıt defterinde yayınlamadan veya node_modules klasöründe ayrı bir kopyasını muhafaza etmeden önerilen çözüm), bu soruna yardımcı olmak için küçük bir npm modülü oluşturdum.

Düzeltme için iki kolay adım gerekir .

İlk:

npm install lib-manager --save-dev

İkinci olarak, bunu şu adrese ekleyin package.json:

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

Daha fazla bilgi için https://www.npmjs.com/package/lib-manager . Umarım birine yardımcı olur.


0

Düğüm_ modüllerine önceden kurulmuş modüllerinizi diğer dosyalarınızla birlikte yayınlamak kabul edilebilirse, bunu şu şekilde yapabilirsiniz:

// ./node_modules/foo/package.json
{ 
  "name":"foo",
  "version":"0.0.1",
  "main":"index.js"
}

// ./package.json
...
"dependencies": {
  "foo":"0.0.1",
  "bar":"*"
}

// ./app.js
var foo = require('foo');

Ayrıca modülünüzü git üzerinde depolamak ve üst paket.json'a git bağımlılığını yüklemesini söylemek isteyebilirsiniz: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies


5
Ne yazık ki bu, yerel modüllerime ve aynı dizinde kayıt defterinden (örn. Connect) yüklü üçüncü taraf / katkıda bulunan modüllere sahip olan node_modules'i içerecektir. Git / VCS perspektifinden kafa karıştırmanın yanı sıra (yani, oluşturduğumlar dışında node_modules'deki tümünü yoksaymak zorunda kalacaktır), aynı zamanda kötü bir uygulamadır (yazdıkları ve yayınlamadıklarıların diğerlerinin yazıp yayınladığından ayrı tutulmaları gerekir. ).
Sam Adams

Yerel bir modül eklediğimde, değişiklikler yaptığımda bunlar ana uygulamam tarafından görülmüyor. Neden böyle?
Mark Tyers
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.