npm Kılavuzu: Node.js Paket Yöneticisi
Yayınlanan: 2022-03-11JavaScript, web sitelerinin ve web uygulamalarının geliştirilmesi söz konusu olduğunda en çok kullanılan dildir. Kaynakların çokluğu şaşırtıcı ve daha da fazlası, mevcut kütüphanelerin sayısı.
İlk başta, bu kitaplıkların sayısı azdır ve bakımı kolaydır; ancak, yakında yeterince bağımlılık cehennemi başlar ve daha olgun bir çözüm gerekir.
Node Paket Yöneticisi'ni (npm) girin – en çok Node.js ile birlikte kullanılan bir JavaScript paket yöneticisidir, ancak bağımsız olarak da kullanılabilir. Size projenizin bağımlılıkları üzerinde olağanüstü bir kontrol sağlar ve açık kaynak dünyasına katkıda bulunmanız için harika bir yol sağlar.
npm install <package name>
dosyasını çalıştırarak ve JavaScript dosyanıza enjekte ederek başlayabilirsiniz.
Belirli bir sürümü yüklemek ister misiniz? Sorun yok. npm install <package name>@1.2.3
çalıştırın.
Global olarak bir paket mi kurmak istiyorsunuz (Mocha veya Angular-CLI gibi)? Sadece şöyle bir -g
ekleyin: npm install -g angular-cli mocha
.
Kuşkusuz, çoğu kullanım durumu bir npm kurulumunda durur ve başka bir şeye ihtiyaç yoktur. Bununla birlikte, npm, gerekli, gerçekten yararlı veya sadece harika olduğunu düşündüğümleri vurgulayarak, size yol göstereceğim birçok ek özelliğe sahiptir.
CLI komutları
CLI, kullanıcıların zamanlarının çoğunu npm ile etkileşime girerek geçirdiği yerdir ve yardım arayüzü gerçekten yararlıdır.
Yardımı ( npm help
) sorgulamak, bir dizi seçeneği ortaya çıkarır ve npm help-search <searchText>
'i çalıştırmak size doğrudan npm işaretlemesinden arama sonuçlarının bir listesini verir.
İşte öne çıkan temel komutlar.
install
: Burada, npm ile çalışırken mutlak gerekliliği nedeniyle bahsedilmiştir. Yeni bir paketi yerel olarak veya genel olarak kurmak (-g
eklerken) veyapackage.json
dosyasında listelenen bağımlılıkları kurmak için kullanılır (daha fazlası için).uninstall
: Bu da bir zorunluluktur. Yerel veya genel olaraknode_modules
dizininden belirli bir paketi temizlemek için kullanılır (-g
eklerken).access
: Bu, npm-organizasyonları ve kapsamlı (özel) paketler bağlamında npm kullanıcı izni yöneticilerinin oyun alanıdır. Cidden güçlü şeyler.adduser
,owner
,team
, vb. İle birlikte kullanıldığında, kimin neye erişimi olduğu konusunda hassas bir kontrol sağlar.bin
: Paketler dünyanın neresine kurulur? Mutlak dosya yolunu görmek için bu komutu çalıştırın.cache
: Paketleri soldan, sağdan ve ortadan npm'den kurmaya başlarsanız, bu komut oldukça kullanışlıdır. Yerel olarak önbelleğe alınmış paketlerin listesini görmek içinls
alt komutuyla veya önbellekteki tüm paketleri temizlemek içinclean
alt komutuyla onu arayın. Npm kayıt defterinin hala biraz kararsız olduğu zamanlarda, bu, kararlı bir ortama geri dönmek veya npm izinlerini doğru şekilde ayarlamadığınızda bazı şeyleri sıfırlamak için gerekliydi.config
: Farklı yapılandırma seçeneklerine daha sonra gireceğiz, ancak bu komut öncelikleset
,get
veyadelete
alt komutlarını kullanarak yerel veya genel yapılandırma dosyasındaki kalıcı yapılandırma özellikleriyle ilgilenir.dedupe
veyaddp
: Uzun bir süre boyunca bir proje üzerinde çalışırken ve paketleri doğrudan npm'den kurarken, bu komut yerel paket ağacında yürür ve bağımlılıkları basitleştirmeye çalışır.link
: Kendi npm paketinizi geliştirirken, bu, global bağlama bir sembolik bağlantı oluşturmanıza izin verir, böylece npm kayıt defterinden global olarak kurulmuş gibi test edilebilir. Örneğin, düğümde global olarak yüklenmiş bir CLI'ye sahip bir derleme aracı yazıyorsanız, bu komutu çalıştırabilir ve CLI'nizin davranışını önce onu dağıtmaya gerek kalmadan test edebilirsiniz.ls
: Bir ağaç yapısında paket bağımlılıklarını ve bağımlılıklarını görselleştirmek için kullanılır. Bunu görmek güzel ve diğer projelerle karşılaştırma yapmak için de kullanışlı.outdated
: Bu, kurulu bağımlılıkların mevcut durumunu ve eski olup olmadıklarını değerlendirmek için kullanılır. Kök bağımlılık listesinin yüzlerce satır uzunluğunda olduğu projelerde, paketlerin manuel olarak kontrol edilmesi neredeyse imkansızdır. Bu komuta-g --depth=0
eklenmesi, global olarak kurulmuş paketlerinizi de kontrol etmenize olanak tanır.publish
: Bu komut, npm için kendi paketinizi geliştirirken gereklidir. Tam olarak adından da anlaşılacağı gibi yapar; paketinizi npm kayıt defterine yayınlar.search
: Üçüncü bağımsız değişkende sağlanan metni içeren tüm paketleri kayıt defterinde aramak için bunu kullanın.shrinkwrap
: Kısacası, bu komutlar, bir paketteki belirli bağımlılık sürümlerini sırayla kilitlemenizi sağlar, böylece rahat bir semver (anlamsal sürüm oluşturma) numarası üretim kodunu bozmaz.star
: Kullanmakta olduğunuz bir paketi gerçekten beğeniyor musunuz? Takdirinizi doğrudan terminalden göstermek için bu komutu kullanın, bu daha sonra paketin npm kayıt defterindeki sayfasına yansır.update
: Bu, genellikle güncel olmayan paketleri güncellemek içinoutdated
komutu takip eder.version
: Bu sizepackage.json
version özelliğini çarpmanız ve hepsi bir arada git etiketi yapmanız için bir kısayol verir.
Bu komutların çoğunun alt komutlar ve/veya konfigürasyonlar alabileceğini ve bu listenin hiçbir şekilde CLI hakkında bir tartışma olmadığını unutmayın.
npm-config
Yapılandırma, npm'nin önemli bir parçasıdır ve yapılandırma değişkenlerinin ayarlanabilmesi için birden çok yol vardır.
CLI ve Çevresel Değişkenler aracılığıyla Yapılandırma
İlk olarak, konfigürasyon terminalden CLI aracılığıyla ayarlanabilir.
Genellikle şöyle görünür: npm <command> --<configuration option> [<optional value>]
.
Değer belirtilmezse, seçenek varsayılan olarak true olarak ayarlanır.
Örneğin, kapsamlı (private) bir npm paketi üzerinde çalıştığınızı ve bunu public paket olarak yayınlamaya karar verdiğinizi varsayalım.
Bu, publish
komutunuza --access=public
ekleyerek kolayca yapılabilir. Özelliği herkese açık olarak belirtmemiş olsaydık, varsayılan kısıtlanmış (özel) olurdu.
Bunun gibi diğer komutlara eklenen yapılandırma her yerde kalıcı değildir, bu nedenle CLI aracılığıyla bir dizi yapılandırma ayarlamak yorucu olabilir.
Bu durumlarda, çevresel değişkenleri kullanarak yapılandırmayı ayarlamak daha iyi olabilir.
npm_config_
öneki ile ayarlanan herhangi bir çevresel değişken, npm'yi yapılandırmak için kullanılacaktır.
Örneğin: export npm_config_registry=localhost:4321
, kayıt defteri yapılandırma seçeneğini global olarak ayarlar ve npm yürütüldüğünde, 4321 numaralı bağlantı noktasındaki localhost'ta bulunan npm kayıt defterini kullanır.
npmrc dosyası aracılığıyla yapılandırma
Gereksinimlerinize bağlı olarak farklı düzeylerde ayarlanabilen özel .npmrc
dosyasını kullanarak yapılandırma seçeneklerini de ayarlayabilirsiniz:
- Proje düzeyi: Bir proje kodunun
package.json
dosyasıyla birlikte kökünde, genelliklepath/to/project/.npmrc
- Kullanıcı düzeyi: Belirli bir kullanıcının hesabını yapılandıran dizin, genellikle
~/.npmrc
- Global seviye: npm'nin global konfigürasyonları aradığı dizin, tipik olarak
$PREFIX/etc/npmrc
- Yerleşik seviye: Dikkatli olun. Bu yapılandırma yalnızca genel değildir, aynı zamanda npm kaynak kodunun bir parçasıdır ve en iyi uygulama, korumaktan sorumlu olmadığımız kodu değiştirmememizi önerir (aslında talep eder). Genellikle
/path/to/npm/npmrc
.
.npmrc
dosyasındaki yapılandırma ayarları, şu biçimde bir komut çalıştırılarak CLI kullanılarak değiştirilebilir ve kalıcı hale getirilebilir: npm config set <key> <value>
.
Örneğin, kapsamlı (özel) bir paketin yayımlama yapılandırmasını kalıcı olarak herkese açık hale getirmek için npm config set access public
çalıştırabilirsiniz.
Varsayılan olarak, bu komut yapılandırmayı yerel olarak sürdürür (yukarıda açıklandığı gibi kullanıcı düzeyinde yapılandırma), ancak bunu global olarak sürdürmek için -g
ekleyebilirsiniz.
Proje düzeyinde veya yerleşik düzeyde kalıcı yapılandırma yapılması gerektiğinde, .npmrc
dosyası bir metin düzenleyici kullanılarak değiştirilmelidir.
package.json aracılığıyla yapılandırma
Son olarak, package.json
dosyasından yapılandırma ayarlanabilir. Ancak, bu nadiren kullanılır (ve yalnızca açıkça gerekliyse kullanılmalıdır), çünkü bir proje düzeyinde .npmrc
dosyası, paket yapılandırmasını ayarlamak için geleneksel olarak tercih edilen yerdir.
Önemli Yapılandırma Ayarları
access
: Yukarıda tartışıldığı gibi, izinleri ayarlamak için kullanılır.always-auth
: Bu ayarın varsayılan olarak false olarak ayarlandığını unutmamak önemlidir. true olarak ayarlandığında, npm, kayıt defteriyle iletişim kurarken her zaman kimlik doğrulama gerektirir.ca
: Varsayılan olarak npm sertifika yetkilisi (CA) olur. Yalnızca bilinen kayıt şirketlerine erişime izin vermek için boş olarak veya yalnızca belirli bir CA sertifikasına erişim izni vermek için belirli bir CA sertifikasına değiştirilebilir. Bu ayar,cafile
,cert
vestrict-ssl
ile birlikte nadiren kullanılır, ancak npm'nin güvenlik ve güvenilirlik yönü hakkında konuşur ve kurduğunuz paketin beklediğiniz kaynaktan geldiğini bilmenin iç huzurunu sağlar.color
: Bu, varsayılan olarak true değerindedir ve tty dosya tanımlayıcıları tarafından izin verilenstdout
renklendirerek size terminalin standart kasvetinden bir mola verir. Yanlış olarak ayarlanırsa terminal donuk kalır. Always olarak ayarlandığında,always
zaman renkli çıktı verir.depth
: Bu ayar, ne kadar derinlemesine yürütüleceklerini atayarak,ls
veoutdated
gibi özyinelemeli komutlarla gördükleriniz üzerinde ayrıntılı kontrol sağlar. 0 değeri yalnızca ilk bağımlılık düzeyini değerlendirirken, sonsuz (varsayılan) tüm bağımlılık düzeylerinin değerlendirilmesine neden olur. Bu kuralın istisnası, onuoutdated
; bu durumda, daha alakalı çıktı sağlamak için sonsuzluk 0 olarak yorumlanır.dev
: Bu, varsayılan olarak false olarak ayarlanır, ancak true olarak ayarlandığında (birnpm install
)package.json
dosyasındaki tüm geliştirme bağımlılıkları normal bağımlılıklarla birlikte yüklenir.dry-run
: Bu ayar true olarak ayarlandığında, npm paketinizde herhangi bir değişiklik yapmaz, bunun yerine size ne yapacağını söyler. Bu,dedupe
veyaupdate
gibi belirli komutları çalıştırırken çok yararlı olabilir.git-tag-version
: Varsayılan olarak true olarak ayarlanmıştır. Bu ayar,npm version
komutunu çalıştırırken git'te bir sürümü etiketler. Git'te etiketlenmiş sürümleri olan büyük bir proje için paket yöneticisi olarak npm kullanıyorsanız, size zaman kazandırabilir vepackage.json
dosyasını sizin için güncellemeyi unutmayın.loglevel
: Varsayılan olarak, bu, npm komutlarını çalıştırırken bir hata ve uyarı çıktısı verenwarn
olarak ayarlanmıştır. Diğer ayarlar arasında çıktısilent
; yalnızca çıktıdaki hataları günlüğe kaydedenerror
; yalnızcahttp
istek hatalarını bildiren http;info
, bilgilendirici çıktı istemek için); hemen hemen her şeyi günlüğeverbose
; vesilly
, adından da anlaşılacağı gibi, aptalca miktarda çıktı ve sonra biraz verir.production
: Bu doğru olarak ayarlandığında, npm buna göre hareket eder ve tüm komutları üretim modunda çalıştırır. Bu, geliştirme veya isteğe bağlı bağımlılıkların kurulmayacağı veya geliştirmeyle ilgili herhangi bir görevin yürütülmeyeceği anlamına gelir.rollback
: true olarak ayarlandığında, tüm başarısız yüklemeler kaldırılır. Bu, bir bağımlılık yüklemesi başarısız olduğunda kullanışlı olur. Günlüğe kaydetme düzeyinize bağlı olarak, hangi yüklemelerin başarısız olduğunu görebilmeli, bunları not edebilmeli ve geri alma seçeneği true olarak ayarlanmışnpm install
komutunu çalıştırabilmelisiniz. Ardından notlarınız ve kuru çalıştırma kurulumuyla (yukarıda açıklandığı gibi), sorunun hatalarını ayıklayabilirsiniz.save
: When installing a package directly from the registry, you can append
, kurulan paketi package.jsonfile. For example,
to the command which will add the installed package to the dependencies option in the
–save ekleyebilirsiniz.file. For example,
npm install lodash` bağımlılıklarınıza lodash ekleyecektir.save-dev
: Yapılandırmayı kaydet seçeneğine benzer şekilde, bir paket kurarken--save-dev
ekleyin ve daha sonrapackage.json
dosyasındaki devDependencies seçeneğine eklenecektir.save-optional
: Yapılandırmayı kaydet seçeneğine benzer şekilde, bir paket kurarken--save-optional
ekleyin ve daha sonrapackage.json
dosyasındaki isteğe bağlıDependencies seçeneğine eklenecektir.save-exact
: Paketleri kurarken,save
,save-dev
vesave-optional
seçenekleri, kurulu paketi bir semver aralık operatörü ile ilgili özelliğine ekleyerekpackage.json
dosyasını değiştirir. Yukarıda belirtilen ayarlardan biriyle bağlantılı olarak true değeriyle 'tam kaydet' yapılandırma ayarı çağrılırken, semver aralığı göz ardı edilerek belirli bir sürüm numarası kullanılır.save-prefix
: Bu,save
,save-dev
veyasave-optional
kullanırken semver aralığı operatörünü ayarlar. Varsayılan,^
'dir ve kurulum sırasında paketlerde küçük yükseltmelerin yapılmasına izin verir. Bu, herhangi bir geçerli ön ekli semver aralığı operatörüne ayarlanabilir.tag-version-prefix
: Geleneksel varsayılanv
'dir venpm version
çalıştırılırken git etiketi sürümüne neyin eklendiğini belirtir.
npm Kullanarak npm'yi güncelleme
Kendini güncellemek için npm'yi de kullanabilirsiniz.
Basitçe çalıştırın npm install -g npm@latest
ve npm en son kararlı sürüme güncellenecektir. Node.js'nin her sürümünün belirli bir npm sürümüyle birlikte geldiğini ve deneyimlerime göre, bu eşleştirmeyle çok fazla uğraşmamalısınız.
Günün sonunda benim tavsiyem, eşleştirmeyi amaçlandığı gibi sürdürmektir.
Npm'yi bağımsız bir araç olarak kullanırken, seçtiğiniz sürümü kullanmanın sonuçlarını anladığınızdan emin olun. Aynı sistemde nvm adlı farklı Node.js sürümlerini (ve sırayla npm sürümlerini) yönetmek için harika bir araç var.
package.json Dosyası
package.json
dosyası, her şeyi birbirine bağlayan en önemli unsurdur.
Npm kayıt defterine bir paket yayınlamak için bir gerekliliktir ve bağımlılıkların yönetim kısmının hayat bulduğu yerdir.
"Ad" ve "sürüm" olmak üzere iki zorunlu alanı vardır ve bu özellikler birlikte benzersiz bir tanımlayıcı olmalıdır.
Ad alanı, adlandırmayla ilgili npm belgelerinde tanımlandığı gibi belirli kurallara uymalıdır ve sürüm alanı semver spesifikasyonlarına tabidir.
Bunun ötesinde, bir mil uzunluğunda bir bağımlılıklar listesine sahip olabilir ve semver sürümlerini ve aralık operatörlerini kullanarak her biri için kullanılacak belirli bir sürüm tanımlayabilirsiniz. İşte diğer dikkate değer özelliklerin bir listesi.
"ana"
"main", uygulamanızın giriş noktasını tanımlar ve varsayılan olarak index.js
olur. Sözleşmeye veya çerçevenize bağlı olarak, app.js
veya main.js
olabilir. Elbette, istediğiniz her şeyi yapabilirsiniz.
"Kodlar"
Bu, değeri bilinmeyen bir özelliktir.
İlk olarak, yayın öncesi şeyler yapmak için kullanılabilir.
İkincisi, oluşturma görevlerinden (yutma veya homurdanma ile tanımlanır), diğer bağımlılıkların kurulumunu tetiklemeye (bower gibi bir şeyle), web paketi ile bir geliştirme sunucusu başlatmaya veya bir dizi bash komutu çalıştırıyor.
"bağımlılıklar"
Bu özellik, uyumlu semver numarasıyla birlikte uygulamanızın ihtiyaç duyduğu paketlerin bir listesidir. Yerel paketleri kurduğunuzda terminalden değiştirilebildiği için dikkate değer bir özelliktir.
Bu, npm install
komutunun sonuna --save
(veya steno -S
) eklenerek yapılır.
Bunu yaptığınızda, yeni kurulan paket(ler) package.json
dosyanızdaki bağımlılıklar listesine eklenir.
Benzer şekilde, npm uninstall
komutu çalıştırılırken --save
eklenerek bir bağımlılık da kaldırılabilir.
Bağımlılıkların her birinin semver sürüm oluşturma kalıplarının ve ne anlama geldiklerinin farkında olmak önemlidir.
Semver kuralı çok katıysa, yeni özellikleri ve iyileştirmeleri kaybedersiniz, oysa semver kuralı çok gevşekse, hatta bir paketin bozulan bir sürümü kurulabilir.
Bozuk bir paket kurulumunun çözülmesi, özellikle paketin küçültülmüş versiyonu kullanıldığında oldukça zor olabilir.
"devBağımlılıkları"
Bağımlılıklar özelliğinden ayrı olarak, "devDependencies" özelliği, yalnızca geliştirme aşamasında kullanılan ve üretim oluşturma için gerekli olmayan (ESLint, grunt-contrib paketleri ve İletki gibi) bağımlılıkları tanımlamanıza olanak tanır. Bağımlılıklarda olduğu gibi, bu özellik npm install
komutunun veya npm uninstall
komutunun sonuna --save-dev
(veya steno -D
) eklenerek terminalden değiştirilebilir. Aynı dikkat, bağımlılıklar altında belirtildiği gibi sürüm oluşturma için de geçerlidir.
"çöp Kutusu"
Paketinizin yürütülebilir dosya(lar)ını, örneğin bir CLI yardımcı programının yolu gibi belirtebileceğiniz yer burasıdır. Bu özellik, paketiniz kurulduğunda npm'ye yürütülebilir dosyalarınıza yerel veya global sembolik bağlantılar oluşturmasını söyler.
"yapılandırma"
Daha önce tartışıldığı gibi, bu, package.json
dosyanız aracılığıyla yapılandırma ayarlarını tanımladığınız yerdir.
"özel"
true olarak ayarlandığında, npm paketi yayınlamayı reddeder.
Bu, erişim yapılandırma ayarıyla karıştırılmamalıdır.
Bu, package.json
ile birlikte npm kullanan bir projeniz olduğunda kullanışlı bir ayardır, ancak kapsamlı veya genel npm kayıt defterinde yayınlanması amaçlanmamıştır.
Niyetiniz değişirse, ayarı yanlış olarak değiştirin ve paketinizi yayınlayabileceksiniz.
Özel Özellikler
package.json
dosyası, ad önceden tanımlanmadığı veya ayrılmadığı sürece özel özellikleri de kabul eder.
Kendi npm Paketinizi Geliştirmek
Npm ekosistemi, dünya çapında binlerce farklı geliştirici tarafından yazılmış paketlerle doludur. Her biri bir tür sorunu çözer, bir soyutlama sağlar veya bir şeyin uygulamasını sunar.
Muhtemelen, bir noktada siz de paylaşmak için kendi paketinizi geliştirmek isteyeceksiniz.
İlk olarak, gerekli minimum "name" ve "version" özelliklerine sahip bir package.json
dosyası ve ardından giriş noktasını belirtmek için "main" özelliği, örneğin index.js yazmanız gerekir.
Kodunuzu o index.js dosyasına yazın, npm kullanıcı hesabınızla oturum açın veya terminalden yeni bir kullanıcı oluşturun ve onu npm kayıt defterine yayınlamaya hazırsınız.
Paketler genel veya özel olabilir.
Herkese açık paketleri yayınlamak ücretsizdir ve herkesin kullanımına açıktır.
Kapsamlı paketler olarak adlandırılan özel paketler, yalnızca özel modüller kullanıcısına ödeme yaptıysanız yayınlanabilir ve paket adının başına eklenen farklı @username/
ile tanımlanabilirler.
Kapsamlı paketler ayrıca, publish
komutu --access=public
ile çağrılarak genel olarak yayınlanabilir.
Ayrıca, paketinizin kod tabanını genişletmek ve geliştirmek için biraz daha zaman harcarsanız ve yeni bir sürümün yayınlanma zamanı geldiyse, paketin package.json
sürümünü (semver kurallarına ve konvansiyonuna göre) değiştirmeniz yeterlidir. dosya ve yazın npm publish
.
Ayrıca komut satırı arayüzünü kullanabilir ve npm version <update_type>
, burada update_type semver tarafından açıklandığı gibi patch
, minor
veya major
dır ve bu daha sonra package.json
dosyasındaki sürüm numarasını otomatik olarak artırır.
npm Organizasyonları
Yine, bunun için npm belgeleri mükemmeldir ve sözlerini tekrarlamak boşuna olacaktır.
Npm bağlamında organizasyonlar hakkında söylenebilecek şey, son derece ince taneli olduğu ve doğru bir şekilde yönetildiğinde, tek bir isim altında kapsamlı veya genel paketler üzerinde çalışan büyük ekipler ve bireyler çok iyi yönetilip kısıtlanabileceğidir.
Ustalaşması karmaşık olsa da, çok ödüllendirici.
npm'nin Gücü
Sonuç olarak, npm'nin sağladığı belgeler kapsamlıdır ve ayrıntılar için danışılmalıdır, ancak bu makale hem temel hem de daha gelişmiş, ilgili işlevsellik hakkında yararlı bir genel bakış sağlar ve npm'nin harikalığını aktarır.
Her şeyde olduğu gibi, güçlü görüşler vardır ve birçok kusur bulunabilir. Ancak npm'yi (veya bu konuda düğümü) hiç denemediyseniz, dalın ve kendiniz keşfedin. Şansınız, düşündüğünüzden daha fazla zevk alacaksınız.
npm ile ilgili daha ilginç makaleler için Scala.js'yi npm ve Browserify ile Kullanmayı okuyun.