Tüm kullanılmayan (bildirilmemiş) bağımlılıkları bir Node.js projesinden (artık benim tanımlanmamış olanlar) kaldırmanın bir yolu var mı? package.json
Uygulamamı güncellediğimde referanssız paketlerin otomatik olarak kaldırılmasını istiyorum.
Tüm kullanılmayan (bildirilmemiş) bağımlılıkları bir Node.js projesinden (artık benim tanımlanmamış olanlar) kaldırmanın bir yolu var mı? package.json
Uygulamamı güncellediğimde referanssız paketlerin otomatik olarak kaldırılmasını istiyorum.
Yanıtlar:
Not : npm
Paket kilitleri etkinleştirildiğinde son sürümler bunu otomatik olarak yapar, bu nedenle işaretli geliştirme paketlerini kaldırmak dışında gerekli değildir --production
.
npm prune
Listesinde olmayan modülleri kaldırmak için çalıştırın package.json
.
Gönderen npm help prune
:
Bu komut "gereksiz" paketleri kaldırır. Bir paket adı verilirse, yalnızca verilen adlardan biriyle eşleşen paketler kaldırılır.
Harici paketler, üst paketin bağımlılıklar listesinde listelenmeyen paketlerdir.
Eğer
--production
bayrak belirtilmişse, bu komutu devDependencies belirtilen paketleri kaldıracaktır.
package.json
. Bu doğru mu? Bu nedenle, bir sonraki güncelleme veya kurulumun bunları yeniden yüklemesi gerekir.
node_modules
dizininde saklanır , bu nedenle modülle birlikte kaldırılır.
package.json
, ama bower'ı bırakıyorum. Çalıştığımda , bağımlılıklarını içeren npm prune
kendi node_modules
klasörü de dahil olmak üzere tüm karmaların kaldırılmasını bekliyorum. Bower'ın bağımlılıkları hakkında (bower-json, bower-logger, chmodr, fstream, glob, vd.). Teknik olarak, bunlar benim projemde listelenmiyor package.json
. Bunlar kaldırıldı mı değil mi?
node_modules
, içeride node_modules/bower/node_modules
, tarafından "korunuyor" olduğunu unutmayın node_modules/bower/package.json
. Paketinizin ve paketinizin bağımlılıklarının bağımlılıkları karışık değildir .
Bunu yapmak için birkaç dakika zaman hakkında endişeli değilseniz, bir çözüm olacaktır rm -rf node_modules
ve npm install
yerel modüllerini yeniden inşa etmek için tekrar basın.
node_modules
ayrıca package.json
dosyanın tekrarlanabilir bir bağımlılık grafiğini tanımladığını doğrular . Kaldırma ve yeniden yükleme node_modules
temel olarak bir dağıtım testidir.
npm prune
bir iota yardım etmedi, ama bu işe yaradı. Benim sorunum kırık bir sembolikti.
npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
Bu komut "gereksiz" paketleri kaldırır. Bir paket adı verilirse, yalnızca verilen adlardan biriyle eşleşen paketler kaldırılır.
Harici paketler, üst paketin bağımlılıklar listesinde listelenmeyen paketlerdir.
Eğer --Üretim bayrağı belirtilmişse veya NODE_ENV ortam değişkeni ayarlandığında üretim , bu komutu belirtilen paketleri kaldıracaktır devDependencies . -No -üretim ayarı , NODE_ENV'nin üretime ayarlanmasını reddeder .
Eğer --dry işletilen bayrağı daha sonra kullanılan hiçbir değişiklik aslında yapılacaktır.
Eğer --json bayrağı kullanılırsa o değişikliği NPM kuru erik yapılan (veya yapmış olur --dry-run ) JSON nesnesi olarak basılır.
Paket kilitleri etkin durumdayken, harici modüller, modüller takıldığında otomatik olarak budanır ve yalnızca --production bayrağıyla bu komuta ihtiyacınız olur .
Paket kilitlerini devre dışı bıraktıysanız, harici modüller kaldırılmaz ve bunları kaldırmak için zaman zaman npm budama yapmak size kalmıştır .
npm dedupe
npm ddp
Yerel paket ağacını arar ve bağımlılıkları ağaç üzerinde daha fazla hareket ettirerek genel yapıyı basitleştirmeye çalışır; burada birden çok bağımlı paket tarafından daha etkin bir şekilde paylaşılabilirler.
Örneğin, bu bağımlılık grafiğini düşünün:
a
+-- b <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10
Bu durumda, npm-dedupe ağacı:
a
+-- b
+-- d
`-- c@1.0.10
Düğümün modül aramasının hiyerarşik doğası nedeniyle, b ve d'nin her ikisinin de bağımlılıkları ağacın kök düzeyinde tek bir c paketi tarafından karşılanır.
Veri tekilleştirme algoritması ağaç üzerinde yürür ve yinelenmeler bulunmasa bile her bağımlılığı ağaçta mümkün olduğunca yukarı taşır. Bu hem düz hem de tekilleştirilmiş bir ağaçla sonuçlanacaktır.
node_modules
kaldırıldıkları andan kaldırmak mı istiyorsunuzpackage.json
?