NixOS에 npm 패키지를 설치하는 방법은 무엇입니까?

NixOS에 npm 패키지를 설치하는 방법은 무엇입니까?

yarnNixOS에서는 $ nix-env -i yarn. 이제 나는 yarn. $ yarn start하지만 이로 인해 다음과 같은 오류가 발생합니다.

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

일반적인 NixOS 방식으로 설치하려고 하면 webpack-dev-server"일치하지 않는 포크" 오류가 발생합니다.

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

나는 이것이 webpack-dev-servernpm 패키지라는 것을 읽었으며 이 사례와 관련된 몇 가지 문제가 확실하지 않습니다.

  1. Nix에서 npm(nix와 다른 패키지 관리자)을 사용하는 것이 합리적입니까?
  2. (1)에 대한 대답이 '예'라면 NixOS에 npm을 설치하는 방법은 무엇입니까? 검색할 때 일치하는 포크가 없기 nix-env때문에 사용 가능한 npm이 표시되지 않습니다 .$ nix-env -qa npm

webpack-dev-serverNixOS에 설치하는 올바른 방법은 무엇입니까?


편집하다

webpack-dev-server나는 다음과 같이 설치 하려고댓글 링크을(를) 설치할 수 있었지만 node2nixReadme에 나열된 2단계를 수행할 수 없었습니다.

/nix/store2단계에서 참조된 파일을 다음 위치에서 찾았습니다.

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

파일을 열어 나열된 npm 패키지를 볼 수 있지만 sudo로 실행하는 경우에도 권한은 읽기 전용이므로 변경하려면 권한을 편집해야 합니다.

/nix/store이 파일을 직접 편집하기보다는 nix를 통해 간접적으로 조작하면 될 것 같습니다 .이 파일을 직접 편집하면 안 되겠죠?만일이 경우라면,nix를 사용하거나 다른 것을 추가하여 2단계를 수행하려면 어떻게 해야 합니까 webpack-dev-server?

답변1

nix를 통해 npm 패키지를 사용하는 방법에는 여러 가지가 있습니다.

내 개인 프로젝트의 경우 nix-shell내가 사용하는 셸에서 사용합니다.npm 스크립트npm 글로벌 패키지(예: gulp)가 필요하지 않도록 합니다. 프로세스는 다음과 같습니다(아마도 원사의 경우 매우 유사할 것입니다).

$ 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

내 패키지에는 바이너리 종속성이 없기 때문에 이것은 나에게 잘 작동합니다.이것게시물에서는 nix-shell을 호출할 때마다 종속성을 지정할 필요가 없도록 프로젝트에 대해 default.nix를 생성하는 방법을 설명하지만 이는 선택 사항입니다.

또 다른 방법은 npm2nix를 사용하는 것입니다.

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

그러면 Nix가 프로젝트의 모든 npm 패키지를 관리하게 됩니다.

nix-env 또는 nox를 통해 nix 프로필에 노드 패키지/종속성을 설치하려고 시도하면 "전역" 네임스페이스가 오염되어 nix의 목적이 무산되기 때문에 nix-shell에 익숙해지는 것이 아마도 좋은 생각일 것입니다.

답변2

어떤 이유로 nodePackages는 루트 네임스페이스에 없으며 다음을 사용하여 찾을 수 없습니다.nix-env -qa

사용 가능한 패키지를 나열하는 데 사용됩니다 nix-env -qaPA nixos.nodePackages.

$ 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

원하시는 패키지가 존재하지 않고, Nix 패키지 작성 방법을 모르시는 경우, NixOS에서 패키징 요청을 해주세요.깃허브.

답변3

대안으로 나는 또한 발견했다Nixpkgs 문제 #3393에 대한 CMCDragonkai의 의견:

방금 NPM의 접두사 디렉터리를 변경할 수 있다는 것을 발견했습니다. 그것은 다음과 같습니다:

npm config set prefix '~/mutable_node_modules'

이를 통해 NPM의 전역 설치를 사용할 수 있습니다.

따라서 순전히 기능적인 모델은 출력을 Nix에서 관리하지 않는 위치로 리디렉션하여 해결할 수 있습니다. 그러나 나는 이것이 Nix를 사용하는 목적에 어긋나는 것이라고 생각합니다. 모든 소프트웨어가 이러한 유형의 구성 변경을 지원하는 것은 아닙니다.

nix-env 나는 여전히 일반적인 전역 Node 패키지 사용과 npm 개발 패키지 사용 사이를 전환하는 것이 매우 어색하다고 생각합니다. 그래서 "npm2nix"와 같은 포팅 레이어가 모두 있는 것 같아요.

관련 정보