Npx ve npm arasındaki fark nedir?


517

React öğrenmeye yeni başladım ve Facebook, aşağıdaki hazır projeyi sağlayarak ilk kurulumun basitleştirilmesine yardımcı oluyor .

İskelet projesini kurmam gerekirse npx create-react-app my-app, komut satırına yazmam gerekiyor.

Neden Github Facebook gelmiş yapar merak npx create-react-app my-appziyade npm create-react-app my-app?


23
create-react-appbir jeneratördür. internetenpx gider , paketi geçici olarak indirir, böylece onu yürütebilir ( np x ). Aldığınız (ve istediğiniz), yerel olarak kaydedilen ve komutu çalıştırdığınız çıktıdır.
vsync

Yanıtlar:


644

NPX Tanıtımı: Npm Paket Koşucusu

NPM- Paketleri yönetir, ancak hayatı yürütmeyi kolaylaştırmaz .
NPX- Düğüm paketlerini yürütmek için bir araç .

NPXNPMsürümle birlikte geliyor5.2+

NPMtek başına herhangi bir paket çalıştırmaz. aslında herhangi bir paket çalıştırmaz. NPM kullanarak bir paket çalıştırmak istiyorsanız, o paketi package.jsondosyanızda belirtmelisiniz .

Yürütülebilir dosyalar NPM paketleri aracılığıyla yüklendiğinde, NPM bunlara bağlanır:

  1. yerel kurulumlar ./node_modules/.bin/dizinde "linkler" oluşturuyor .
  2. global yüklemelerin Linux veya Windows üzerindeki global bin/dizinden (ör. /usr/local/bin) oluşturulmuş "bağlantıları" vardır %AppData%/npm.

Okumanız Gereken Belgeler


NPM:

Belirli bir projeye yerel olarak bir paket yüklenebilir:

npm install some-package

Şimdi NodeJS'nin bu paketi komut satırından yürütmesini istediğinizi varsayalım:

$ some-package

Yukarıdakiler başarısız olacaktır . Yalnızca genel olarak yüklenmiş paketler yalnızca adları yazarak yürütülebilir .

Bunu düzeltmek ve çalışması için yerel yolu yazmanız gerekir:

$ ./node_modules/.bin/some-package

Yerel olarak yüklenmiş bir paketi, packages.jsondosyanızı düzenleyip bu paketi scriptsbölüme ekleyerek teknik olarak çalıştırabilirsiniz :

{
  "name": "whatever",
  "version": "1.0.0",
  "scripts": {
    "some-package": "some-package"
  }
}

Ardından, komut dosyasını npm run-script(veya npm run) kullanarak çalıştırın :

npm run some-package

NPX:

npxolmadığını kontrol edecektir <command>var $PATHya da yerel proje çiftlerde, ve çalıştırmak. Yukarıdaki örnek için, yerel olarak yüklenen paketi yürütmek some-packageistiyorsanız tek yapmanız gereken şunu yazın:

npx some-package

Bir başka büyük avantajınpx daha önce yüklenmemiş bir paketi yürütme yeteneğidir:

$ npx create-react-app my-app

Yukarıdaki örnek, içinde bir reactuygulama ortak plakası oluşturacaktır , komutun çalıştığı yol ve her kullanışınızda yükseltme yapmak zorunda kalmadan bir jeneratörün veya oluşturma aracının en son sürümünü her zaman kullanmanızı sağlar.


İlgili sorular:

  1. Düğüm_modüllerine yerel olarak kurulan paket nasıl kullanılır?
  2. NPM: ./node_modules/.bin klasörü nasıl kaynaklanır?
  3. Npm komut dosyalarını kullanarak bir js dosyasını nasıl çalıştırırsınız?

2
Yani tepki kullanmıyor node.js, değil mi? Neden 'npm' (düğüm paketi yöneticisi) aracılığıyla kullanılabilir?
winklerrr

3
Birkaç yıl önce, ön uç paket yönetimi için Bower vardı , ancak kullanımı npm lehine büyük ölçüde düştü. Bazı nedenlerden ötürü, javascript ile ilgili her şey için tek bir paket yöneticisi kullanabilir ve ön uç projeleri geliştirmek için ortak kararlar kullanabilirsiniz. Daha fazla ayrıntı için bu yanıtı kontrol edebilirsiniz . Tepki ile ilgili olarak: hayır, düğümde de kullanabilmenize rağmen, doğrudan düğümü kullanmaz! (örn: sunucu tarafı oluşturma)
RecuencoJones

1
@RecuencoJones - yerine OP'nin benim cevaba yorumladı
vsync

1
Evet, @winklerrr'den bahsetmeyi unuttum, yorumuna değindim
RecuencoJones

1
Bence en kullanışlı özellik henüz kurulmadığında paketi kurmak NPX. Aksi takdirde ./node_modules/.bin$ PATH'inize ekleyin ve NPX gerekmez.
Ron E

78

npx bir npm paket çalıştırıcısıdır (x muhtemelen eXecute anlamına gelir). Tipik kullanım, bir paketi geçici olarak veya denemeler için indirip çalıştırmaktır.

oluşturmak-tepki-Uygulama reakt , bir projenin yaşam döngüsünde yalnızca bir kez çalıştırılması beklenen bir npm paketidir. Bu nedenle, tek bir adımda kurmak ve çalıştırmak için npx kullanılması tercih edilir.

Https://www.npmjs.com/package/npx kılavuz sayfasında belirtildiği gibi , npx varsayılan olarak PATH veya node_modules / .bin komutlarını çalıştırabilir.

Not: Bazı kazmalarda, create-reakt-uygulamasının düğüm ortamında yürütülen bir Javascript dosyasına (muhtemelen /usr/lib/node_modules/create-react-app/index.js) işaret ettiğini görebiliriz . Bu sadece bazı kontroller yapan global bir araçtır. Gerçek kurulum, en son sürümü projeye yüklenmiş olan tepki komut dosyaları tarafından yapılır. Daha fazla bilgi için https://github.com/facebook/create-react-app adresine bakın .


2
Tipik kullanım, bir paketi indirmek ve çalıştırmak için olduğu gibi yerel veya küresel olarak zaten yüklü olan sürümü çalıştırmaktır.

69

NPM bir paket yöneticisidir, NPM kullanarak node.js paketlerini yükleyebilirsiniz

NPX, node.js paketlerini yürütmek için bir araçtır.

Bu paketi global olarak mı yoksa yerel olarak mı kurmanız önemli değil. NPX geçici olarak kuracak ve çalıştıracaktır. NPM ayrıca bir package.json dosyasını yapılandırır ve komut dosyası bölümüne eklerseniz paketleri çalıştırabilir.

Yerel olarak veya global olarak NPX kullanmadan bir düğüm paketini hızlı bir şekilde kontrol etmek / çalıştırmak istiyorsanız bunu unutmayın.

np M - Yönetici

np X - Yürüt - hatırlanması kolay


Kısa ve net açıklama
Barış Serkan AKIN

Yaşadığım uzun bloglardan çok daha iyi.
Mohan Gundlapalli

"Geçici" olarak biraz ayrıntı verebilir misiniz? Komutu yürüttükten sonra ikili dosyaları atılır ve npx'i her seferinde ikili dosyaları yeniden indirmeye zorlar mı demek istediniz ?
Jim Aho

49

NPX:

Gönderen https://www.futurehosting.com/blog/npx-makes-life-easier-for-node-developers-plus-node-vulnerability-news/ :

Web geliştiricileri, geliştirme makinelerinde onlarca projeye sahip olabilir ve her projenin kendine özgü npm-yüklü bağımlılıkları vardır. Birkaç yıl önce, Grunt veya Gulp gibi CLI uygulamalarıyla uğraşmak için olağan tavsiyeler, bunları her projeye yerel olarak ve aynı zamanda global olarak komut satırından kolayca çalıştırılabilecek şekilde kurmaktı.

Ancak küresel olarak yüklemek, çözdüğü kadar çok soruna neden oldu. Projeler, komut satırı araçlarının farklı sürümlerine bağlı olabilir ve işletim sistemini geliştirmeye özgü birçok CLI aracıyla kirletmek de harika değildir. Bugün, çoğu geliştirici araçları yerel olarak kurmayı ve bırakmayı tercih ediyor.

Yerel araç sürümleri, geliştiricilerin global olarak kurulu araç sürümleriyle uyumsuzluklardan endişe etmeden GitHub'dan projeler almasına olanak tanır. NPM sadece yerel sürümleri kurabilir ve hazırsınız. Ancak projeye özgü kurulumlar sorunsuz değildir: projedeki tam konumunu belirtmeden veya takma adlarla oynamadan aracın doğru sürümünü nasıl çalıştırırsınız?

Npx'in çözdüğü sorun bu. NPM 5.2'de bulunan yeni bir araç olan npx, bir projeden çağrıldığında doğru uygulamayı çalıştıracak kadar akıllı küçük bir yardımcı programdır.

Örneğin, mocha'nın proje-yerel sürümünü çalıştırmak istiyorsanız, proje içinde npx mocha çalıştırabilirsiniz ve beklediğinizi yapacak.

Npx'in yararlı bir yan yararı, henüz kurulu olmayan npm paketlerini otomatik olarak kurmasıdır. Böylece, aracın yaratıcısı Kat Marchán'ın belirttiği gibi, global çevreyi kirleten Benny Hill ile uğraşmak zorunda kalmadan npx benny-hill'i çalıştırabilirsiniz.

Bir spin için npx almak istiyorsanız, npm'in en son sürümüne güncelleyin.


Eğer nvm-windows kullanıyorsanız, muhtemelen npm ile npx almazsınız, ancak manuel olarak yüklemeniz gerekir! npm i -g npx
Neil

1
NPM can just install local versions- doğru değil. npmglobal kurabilir ve bu yaygın bir uygulamadır.
vsync

1
NPX'e harika bir giriş burada bulunabilir: medium.com/@maybekatz/… , Kat Marchán.
Jeff Hu

1
@vsync Bunun "NPM yalnızca yerel sürümleri yükleyebilir ve gitmekte fayda var" şeklinde yorumlanması gerektiğine inanıyorum . bir sınırlama getirmektense.
YipYip

37

npx bir paketin komutunu açıkça yüklemeden çalıştırır.

Kullanım örnekleri:

  • Paketleri ne küresel ne de yerel olarak yüklemek istemezsiniz.
  • Global olarak yükleme izniniz yok.
  • Sadece bazı komutları test etmek istiyorum.

Sözdizimi:

npx [options] [-p|--package <package>] <command> [command-arg]...

Paket isteğe bağlıdır:

npx   -p uglify-js         uglifyjs --output app.min.js app.js common.js
      +----------------+   +--------------------------------------------+
      package (optional)   command, followed by arguments

Örneğin:

Start a HTTP Server      : npx http-server
Lint code                : npx eslint ./src
                         # Run uglifyjs command in the package uglify-js
Minify JS                : npx -p uglify-js uglifyjs -o app.min.js app.js common.js
Minify CSS               : npx clean-css-cli -o style.min.css css/bootstrap.css style.css
Minify HTML              : npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace
Scan for open ports      : npx evilscan 192.168.1.10 --port=10-9999
Cast video to Chromecast : npx castnow http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

Hakkında daha fazla bilgi command:


18

Basit Tanım:

npm - Javascript paket yöneticisi

npx - npm paket ikili dosyalarını çalıştır


7

İşte NPX'in bir örneği: npx cowsay merhaba

Bunu bash terminalinize yazarsanız sonucu görürsünüz. Bunun yararı, npx'in geçici olarak cowsay yüklemesidir. Cowsay kalıcı olarak kurulmadığından paket kirliliği yoktur. Bu, paket kirliliğinden kaçınmak istediğiniz tek seferlik paketler için mükemmeldir.

Diğer yanıtlarda belirtildiği gibi, npx, paketin (npm ile) kurulması ve çalıştırılmadan önce yapılandırılması gereken durumlarda da çok kullanışlıdır. Örneğin, json.package dosyasını kurmak ve yapılandırmak için npm kullanmak yerine yapılandırılmış çalıştırma komutunu çağırmak yerine npx kullanın. Gerçek bir örnek: npx create-tepki-uygulama benim-app


3
Nereye yükler ve komut bittikten sonra kaldırır mı yoksa bir süre önbelleğe alır mı veya her zaman paketin en son sürümüne sahip olup olmadığınızı kontrol eder mi?
Ekim

@ redOctober13 bazı önbellekleme var, ancak npx ayrıca npm kayıt defterini her zaman en yeni sürüm için soruyor, bu nedenle önbellekleme çok fazla yardımcı olmuyor. Ve her seferinde bağımlılıkları genişletir ve temizler.
Simon B.
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.