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


10

NixOS에서는 yarn을 실행하여 평소와 같이 패키지 를 설치했습니다 $ 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.

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

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

나는 그것이 webpack-dev-servernpm 패키지 라는 것을 읽었으며 ,이 경우 그것의 관련성과 관련하여 몇 가지 질문이 확실하지 않습니다.

  1. Nix에서 nix와 다른 패키지 관리자 인 npm을 사용하는 것이 합리적입니까?
  2. (1)에 대한 대답이 예라면 NixOS에 npm을 설치하는 방법은 무엇입니까? 를 통해 검색 할 때 npm이 사용 가능한 nix-env것으로 $ nix-env -qa npm보이지 않으며 파생도 없습니다.

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


편집하다

주석webpack-dev-server달린 링크 를 따라 설치를 시도했지만 설치할 수 node2nix있었지만 readme에 나열된 2 단계를 수행 할 수는 없습니다.

2 단계에서 참조한 파일 /nix/store

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

해당 파일을 열어 나열된 npm 패키지를 볼 수는 있지만 권한은 읽기 전용이며 sudo로 실행 되더라도 권한을 편집하여 변경해야합니다.

/nix/store파일을 직접 편집 해서는 안되며 대신 nix를 통해 간접적으로 조작해야합니다. 이 파일을 직접 편집해서는 안된다는 것이 맞습니까? 그렇다면 nix 또는 추가 webpack-dev-server할 단계를 사용하여 2 단계를 완료 하려면 어떻게해야합니까?



@EmmanuelRosa는 링크 주셔서 감사합니다; 나는 거기의 지침을 따르려고 시도하고 그 시도의 결과에 따라이 질문을 업데이트했습니다.
mherzl

/nix/store읽기 전용입니다. git repo를 복제하고 명령에 사용해야 -I nixpkgs=/path/to/repo합니다nix-*
wizzup

답변:


15

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

개인 프로젝트의 nix-shell경우 쉘에서 npm 스크립트 를 사용 하여 npm 전역 패키지가 필요하지 않도록합니다 (걸프와 같이). 이 과정은 다음과 같습니다 (원사와 매우 유사 할 수 있음).

$ 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

내 패키지 중 어느 것도 바이너리 종속성이 없기 때문에 이것은 잘 작동합니다. 글은 프로젝트를위한 default.nix 생성에 대해 설명하므로 nix-shell을 호출 할 때마다 의존성을 지정할 필요는 없지만 선택 사항입니다.

또 다른 방법은 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 프로파일에 노드 패키지를 설치하려고하면 (nix-env 또는 nox를 통해) "글로벌"네임 스페이스를 오염시켜 nix의 목적을 상실하기 때문에 nix-shell에 익숙해지는 것이 좋습니다.


당신은 예를 들어 binding.gyp를 사용하여 패키지에 관련하여이를 확장 할 수 : github.com/mateogianolio/nblas
CMCDragonkai

1
이진 패키지에 대해 수행하는 방법을 찾았습니다. nodePackages_6_x.node-gyp, 및와 같은 다른 라이브러리 가 필요하면 blas모두 함께 있으면 npm install ....node-gyp를 사용 하는 패키지를 사용할 수 있습니다 .
CMCDragonkai

1
첫 번째 방법과 관련하여 npm scripts솔루션 의 대안으로 글로벌 npm 패키지를 nix-shell효과에 추가하는 것을 발견했습니다 nix-shell -p nodejs-8_x nodePackages.grunt-cli. (경고 : nixos 및 node noob here)
Ryne Everett

첫 번째 방법에 대해 이해하지 못하는 한 가지 사실은 실제로 패키지 자체를 설치하는 방법입니다. 즉, 프로젝트의 package.json에 대한 이진 파일은 어디에 bin있습니까?
Ryne Everett

@ ryne-everett을 실행 npm install하면 실행 파일이에 연결됩니다 node_modules/.bin. 여기를 참조 하십시오 .
Luke Adams

8

내가 알지 못하는 이유로 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

원하는 패키지가없고 직접 만들 수없는 경우 NixOS github 에서 요청하십시오 .


1
저는 단지 nix 패키지 관리자를 사용하고 있으며 다음과 같이 작동 할 수있었습니다.nix-env -f '<nixpkgs>' -qaPA nodePackages | grep tern
zaynetro

일반적인 검색 속도가 느려질 수 있으므로 대부분 루트 네임 스페이스에 없습니다. Haskell 패키지와 동일합니다. 네임 스페이스가 너무 큽니다.
user239558

3

대안으로, Nixpkgs 문제 # 3393에 대한 CMCDragonkai의 의견 도 발견 했습니다 .

방금 NPM의 접두사 디렉토리를 변경할 수 있다는 것을 알았습니다. 다음과 같은 것 :

npm config set prefix '~/mutable_node_modules.

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

따라서 출력을 Nix가 관리하지 않는 곳으로 리디렉션하여 순수한 기능 모델을 해결할 수 있습니다. 그러나 Nix 사용의 목적을 상실한다고 생각합니다. 모든 소프트웨어가 이러한 유형의 구성 변경을 지원하지는 않습니다.

여전히 nix-env 일반적인 전역 노드 패키지와 npm을 개발 패키지로 사용 하는 것 사이를 전환 해야하는 것은 매우 성가신 느낌 입니다. 이것이 "npm2nix"와 같은 포팅 레이어가 모두있는 이유입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.