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.
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?
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".
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 .
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".