Npm paketleri NixOS'a nasıl kurulur?


10

NixOS'ta paketi yarnher zamanki gibi çalıştırarak kurdum $ nix-env -i yarn. Şimdi çalıştırmak çalışılıyor yarnaracılığıyla $ yarn start. Ama bu beni aşağıdaki hataya götürüyor.

$ yarn start
    yarn start v0.20.3
    $ webpack-dev-server --env dev 
    sh: webpack-dev-server: command not found
    error Command failed with exit code 127.

Her webpack-dev-serverzamanki NixOS yolumu yüklemeye çalıştığımda bir 'türev yok' hatası alıyorum.

$ nix-env -i webpack-dev-server
error: selector ‘webpack-dev-server’ matches no derivations

webpack-dev-serverBir npm paketi olduğunu okudum ve bu durumda bununla ilgili birkaç soru emin değilim.

  1. Nix altında nix'ten farklı bir paket yöneticisi olan npm'yi kullanmak mantıklı mı?
  2. (1) 'e verilen cevap evet ise nix'i NixOS'a nasıl kurabilirim? Hiçbir türev eşleşmediği nix-envgibi, arama yaparken kullanılabilir npm görmüyorum $ nix-env -qa npm.

webpack-dev-serverNixOS'a kurulmanın doğru yolu nedir?


DÜZENLE

Yorumlanan bağlantıyıwebpack-dev-server izleyerek yüklemeye çalıştım ve yükleyebildim , ancak benioku dosyasında listelenen 2. adımı takip edemiyorum.node2nix

Adım 2'de atıfta bulunulan dosyayı şurada buldum /nix/store:

/nix/store/sgk7sxgqxrv2axkxjwc3y15apcqbrv1z-nixos-17.03.1482.1b57bf274a/nixos/pkgs/development/node-packages/node-packages.json

Listelenen npm paketlerini görüntülemek için bu dosyayı açabiliyorum, ancak izinler sudo ile bile çalışıyor, salt okunur - bu yüzden değiştirmek için izinlerini düzenlemeniz gerekir.

Görünüşe göre bu /nix/storedosyayı doğrudan düzenlememeliyim ve bunun yerine nix yoluyla dolaylı olarak manipüle etmeliyim. Bu dosyayı doğrudan düzenlememem gerektiğini düzeltir miyim? Öyleyse, nix veya başka bir şey eklemek webpack-dev-serveriçin 2. adımı nasıl tamamlayabilirim ?



@EmmanuelRosa bağlantı için teşekkür ederim; Buradaki talimatları izlemeye çalıştım ve bu soruyu bu girişimin sonuçlarına göre güncelledim.
mherzl

/nix/storesalt okunurdur. Sen klon git repo ve kullanımına ihtiyaç -I nixpkgs=/path/to/repoiçin nix-*komuta
wizzup

Yanıtlar:


15

Nix aracılığıyla npm paketlerini kullanmanın birden çok yolu vardır:

Kişisel projelerim için, nix-shello zaman kabuğun içinde npm global paketlerine (yudum gibi) ihtiyacı önlemek için npm komut dosyaları kullanıyorum . Süreç böyle bir şeye benziyor (ve muhtemelen iplik için çok benzer):

$ nix-shell -p nodejs-8_x
[nix-shell:yourproject]$ npm install # installs npm deps to project-local node_modules
[nix-shell:yourproject]$ npm exec (...) # using scripts configured in package.json

Paketlerimin hiçbirinin ikili bağımlılıkları olmadığından bu benim için iyi çalışıyor. Bu yazı, projeniz için bir default.nix dosyasının oluşturulmasını açıklar, böylece nix-shell'in her çağrılması için bağımlılıklar belirtmeniz gerekmez, ancak isteğe bağlıdır.

Başka bir yol npm2nix kullanmaktır:

node2nix -i node-packages.json # creates ./default.nix
nix-shell # nix-shell will look for a default.nix, which above will have generated

Bu da Nix'in projedeki tüm npm paketlerini yönetmesine neden olacak.

Düğüm paketleri / nix profilinize herhangi bir bağımlılık (nix-env veya nox aracılığıyla) yüklemeye çalışmak, "global" ad alanını kirleterek nix'in amacını bozduğundan, nix-shell'e aşina olmak iyi bir fikir olabilir.


Örneğin binding.gyp kullanarak paketleri konusunda bu genişletmek Could: github.com/mateogianolio/nblas
CMCDragonkai

1
İkili paketler için nasıl yapılacağını öğrendim. Buna nodePackages_6_x.node-gypve diğer kütüphanelere ihtiyacınız var blas, o zaman hepsi bir arada, npm install ....düğüm-gyp kullanan paketleri kullanabilirsiniz.
CMCDragonkai

1
İlk yönteme ilişkin olarak, npm scriptsçözüme bir alternatif olarak, nix-shelletkili olana global npm paketleri ekleyerek , örneğin nix-shell -p nodejs-8_x nodePackages.grunt-cli. (Uyarı: nixos ve düğüm noob burada.)
Ryne Everett

İlk yöntem hakkında anlamadığım tek şey, aslında paketin kendisinin nasıl kurulacağıdır, yani projenin paketi.json için ikili dosya nerede bulunur bin?
Ryne Everett

@ ryne-everett Çalıştırırsanız npm install, yürütülebilir dosyalar birbirine bağlanır node_modules/.bin. Buraya bakın .
Luke Adams

8

Nedense bilmiyorum, nodePackages kök ad alanında değil ve kullanarak bulunamıyor nix-env -qa

kullanılabilir nix-env -qaPA 'nixos.nodePackages'paketleri listelemek için kullanın .

$ nix-env -qaPA 'nixos.nodePackages' | grep -i web
nixos.nodePackages.webdrvr                     node-webdrvr-2.43.0-1
nixos.nodePackages.webpack                     node-webpack-2.6.1

Orada istediğiniz hiçbir paketler ise ve NixOS kendi, deneyin isteği bunu yapamıyorsa github .


1
Sadece nix paket yöneticisini kullanıyorum ve bununla çalışmayı nix-env -f '<nixpkgs>' -qaPA nodePackages | grep tern
başardım

Bunların çoğu, normal aramayı yavaşlatacağından kök ad alanında değildir. Haskell paketleri için de aynı şey geçerli. Ad alanları çok büyük.
user239558

3

Alternatif olarak, CMCDragonkai'nin Nixpkgs sorunu # 3393 hakkındaki yorumunu da buldum :

Az önce NPM'nin önek dizinini değiştirebileceğinizi öğrendim. Gibi bir şey:

npm config set prefix '~/mutable_node_modules.

Bu, NPM'nin global kurulumunu kullanmanızı sağlar.

Bu nedenle, çıktılarını Nix tarafından yönetilmeyen bir yere yönlendirerek tamamen işlevsel modelin etrafında çalışmak mümkündür. Ama sanırım Nix'i kullanma amacını bozuyor. Ve her bir yazılım bu tür yapılandırma değişikliklerini desteklemez.

Yine de nix-env , normal global Düğüm paketleri için kullanım ve geliştirme paketleri için npm arasında geçiş yapmak zorunda kaldığımı çok zor hissediyorum . Sanýrým bu yüzden "npm2nix" gibi bütün bu katmanlar var.

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.