Pregunta:
En NixOS, instalé el paquete yarn
como de costumbre ejecutando $ nix-env -i yarn
. Ahora estoy intentando ejecutar yarn
través de $ yarn start
. Pero esto me lleva al siguiente error.
$ 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.
Cuando intento instalar webpack-dev-server
en mi forma habitual de NixOS, aparece un error de "coincidencias sin derivaciones".
$ nix-env -i webpack-dev-server
error: selector ‘webpack-dev-server’ matches no derivations
Leí que webpack-dev-server
es un paquete npm y no estoy seguro de un par de preguntas sobre la relevancia de eso en este caso.
- ¿Tiene sentido usar npm, un administrador de paquetes diferente a nix, bajo Nix?
- Si la respuesta a (1) es sí, ¿cómo instalar npm en NixOS? No veo npm disponible cuando busco a través de
nix-env
, ya que$ nix-env -qa npm
tampoco coincide con derivaciones.
¿Cuál es la forma correcta de instalar webpack-dev-server
en NixOS?
EDITAR
webpack-dev-server
instalar webpack-dev-server
siguiendo el enlace comentado y pude instalar node2nix
, pero no puedo seguir el paso 2 enumerado en el archivo Léame allí.
Ubiqué el archivo al que se hace referencia en el paso 2 en /nix/store
en
/nix/store/sgk7sxgqxrv2axkxjwc3y15apcqbrv1z-nixos-17.03.1482.1b57bf274a/nixos/pkgs/development/node-packages/node-packages.json
Puedo abrir ese archivo para ver los paquetes npm enumerados, pero los permisos son de solo lectura, incluso se ejecutan con sudo, por lo que necesitaría editar sus permisos para modificarlos.
Parece que no debería editar este archivo /nix/store
directamente y, en su lugar, debería manipularlo indirectamente a través de nix. ¿Estoy en lo cierto en cuanto a que no debería editar este archivo directamente? Si es así, ¿de qué otra manera puedo completar el paso 2 usando nix o algo para agregarle webpack-dev-server
?
Respuesta:
Hay varias formas de usar paquetes npm a través de nix:
Para mis proyectos personales, uso nix-shell
luego dentro del shell utilizo scripts npm para evitar la necesidad de paquetes globales npm (como con gulp). El proceso se parece a esto (y probablemente sea muy similar para el hilo):
$ 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
Esto funciona bien para mí ya que ninguno de mis paquetes tiene dependencias binarias. Esta publicación describe la creación de un archivo default.nix para su proyecto, por lo que no tendrá que especificar dependencias para cada invocación de nix-shell, pero es opcional.
Otra forma es usar npm2nix:
node2nix -i node-packages.json # creates ./default.nix
nix-shell # nix-shell will look for a default.nix, which above will have generated
Lo que hará que Nix administre todos los paquetes npm en el proyecto.
Puede ser una buena idea familiarizarse con nix-shell, ya que intentar instalar paquetes de nodo / cualquier dependencia en su perfil nix (a través de nix-env o nox) frustra el propósito de nix al contaminar el espacio de nombres "global".