web-dev-qa-db-fra.com

Comment installer des packages NPM dans Nixos?

Dans Nixos, j'ai installé le paquet yarn comme d'habitude en exécutant $ nix-env -i yarn. Maintenant, je tente de courir yarn via $ yarn start. Mais cela me conduit à l'erreur suivante.

$ 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.

Quand j'essaie d'installer webpack-dev-server Dans ma façon habituelle Nixos, je reçois une erreur de "match sans dérivations".

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

Je lis ça webpack-dev-server est un forfait NPM et je suis incertain de quelques questions concernant la pertinence de celle dans ce cas.

  1. Est-il logique d'utiliser NPM, un gestionnaire de paquets différent de Nix, sous Nix?
  2. Si la réponse à (1) est oui, comment installer NPM sur Nixos? Je ne vois pas NPM disponible lors de la recherche via nix-env, comme $ nix-env -qa npm correspond également à aucune dérivation.

Quelle est la bonne façon d'installer webpack-dev-server sur Nixos?


ÉDITER

J'ai tenté d'installer webpack-dev-server Suite au Lien commenté et a été capable d'installer node2nix, mais je ne suis pas capable de suivre à l'étape 2 énumérés dans le ReadMe là-bas.

J'ai localisé le fichier référencé à l'étape 2 de /nix/store à

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

Je peux ouvrir ce fichier pour afficher les packages NPM répertoriés, mais les autorisations sont en lecture seule, même en cours d'exécution avec sudo - il faudrait donc modifier ses autorisations afin de le modifier.

Il semble que je ne devrais pas éditer ceci /nix/store Dossier directement et devrait plutôt le manipuler indirectement via Nix. suis-je correct que je ne devrais pas éditer ce fichier directement? Si oui, Comment puis-je compléter l'étape 2 en utilisant Nix ou quelque chose à ajouter webpack-dev-server à cela?

10
mherzl

Il existe plusieurs façons d'utiliser des packages NPM via Nix:

Pour mes projets personnels, j'utilise nix-Shell Ensuite, dans la coque, j'utilise scripts NPM pour empêcher la nécessité des forfaits globaux de NPM (comme avec gulp). Le processus ressemble à ceci (et est probablement très similaire pour le fil):

$ 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

Cela fonctionne bien pour moi, car aucun de mes packages n'a de dépendances binaires. this POST décrit la création d'une valeur par défaut.nix pour votre projet afin que vous n'ayez pas à spécifier des dépendances pour chaque invocation de Nix-Shell, mais c'est facultatif.

Une autre manière utilise NPM2nix:

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

Qui causera Nix gérant tous les packages NPM dans le projet.

C'est peut-être une bonne idée de se familiariser avec Nix-Shell, car essayez d'installer des packages de noeuds/toute dépendance dans votre profil NIX (via Nix-env ou NOx) défait le but de Nix en polluant l'espace de noms "global".

15
Luke Adams

Pour une raison quelconque, je ne sais pas, onepackages n'est pas dans l'espace de noms root et ne peut pas être trouvé à l'aide de nix-env -qa

utilisation nix-env -qaPA 'nixos.nodePackages' Pour lister les forfaits disponibles.

$ 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

S'il n'y a pas de packages que vous voulez et que vous ne pouvez pas faire la vôtre, essayez de la demander sur Nixos GitHub .

8
wizzup

Comme alternative, j'ai également trouvé commentaire de CMCdragonkai sur le numéro Nixpkgs # 339 :

Je viens de découvrir que vous pouvez modifier le répertoire de préfixe de NPM. Quelque chose comme:

npm config set prefix '~/mutable_node_modules.

Cela vous permet d'utiliser l'installation globale de NPM.

Il est donc possible de contourner le modèle purement fonctionnel, en redirectant ses sorties à quelque part qui n'est pas gérée par Nix. Mais je suppose que cela défait le but d'utiliser Nix. Et tous les logiciels ne prennent pas en charge ces types de modifications de configuration.

Je pense toujours que c'est très maladroit qui doit basculer entre utiliser nix-env Pour Normal Global Node Packages et NPM pour les packages de développement. Je suppose que c'est pourquoi il y a toutes ces couches de portage tels que "NPM2nix".

3
toraritte