우분투에서 노드 패키지 관리자를 사용하여 패키지를 설치할 수 없습니다


500

Ubuntu의 NodeJS 인터프리터 이름 ( node) nodejs이 다른 패키지와 이름이 충돌하여 이름 이 바뀌 었습니다 . 읽어보기는 다음과 같습니다. 데비안의 말 :

명령 통역사 Node.js를위한 상류 이름은 "노드"입니다. 데비안에서는 인터프리터 명령이 "nodejs"로 변경되었습니다.

네임 스페이스 충돌을 방지하기 위해 수행되었습니다. 다른 명령은 "노드"패키지의 ax25-node와 같이 업스트림에서 동일한 이름을 사용합니다.

Node.js를 쉘 명령으로 호출하는 스크립트는 "nodejs"명령을 대신 사용하도록 변경해야합니다.

그러나 nodejs를 사용하면을 사용하여 패키지를 설치하지 않아도됩니다 npm. 다음 오류로 패키지 설치가 실패합니다.

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian

어떻게 nodejs가 이미 시스템에 설치되어 있는지 이해 NPM하게하지만 인터프리터 이름은 다른합니까?


29
ln -s nodejs node에서 시도 할 수 있습니다 /usr/bin. 그래도 해킹입니다.
vbo

1
@vbo 당신은 대답으로 그것을 추가 할 수 있습니다-그것은 문제를 해결합니다!
Himel Nag Rana

2
@HimelNagRana ​​또 다른 (더 나은, 받아 들여진) 대답이 있습니다. 내 초기 의견도 대답으로 변환되었습니다 ( stackoverflow.com/a/21168305/539686 ).
vbo

4
NVM을 사용하여 Node.js 버전 ( github.com/creationix/nvm) 을 설치하고 관리 하면 쉽고 편리합니다!
Unitech

2
언제든지이 솔루션을 사용하는 것이 좋습니다. stackoverflow.com/a/38325376/3197383 언제 어디서나 노드 및 npm 버전을 제어 할 수 있습니다.
Rémi Becheras

답변:


1094

TL; DR :

sudo apt-get install nodejs-legacy

우선 상황을 좀 더 명확하게 설명하겠습니다. 2012 년 여름 데비안 관리자는 다른 패키지와 네임 스페이스 충돌이 발생하지 않도록 Node.js 실행 파일의 이름을 변경하기로 결정했습니다. 이전 버전과의 호환성을 깨뜨리기 때문에 데비안 기술위원회는 매우 어려운 결정이었습니다.

다음은 데비안 메일 링리스트에 게재 된위원회 결의안 초안입니다 .

  1. nodejs 패키지는 / usr / bin / node가 아닌 / usr / bin / nodejs를 제공하도록 변경되어야합니다. 패키지는 / usr / bin / node를 참조하는 데비안 패키지와 Breaks : 관계를 선언해야합니다.

  2. nodejs 소스 패키지는 Priority : / usr / bin / nodejs에 대한 심볼릭 링크로 / usr / bin / node를 포함하는 nodejs-legacy 바이너리 패키지도 제공해야합니다. 아카이브의 패키지는 업스트림
    호환성을 위해서만 제공되는 nodejs-legacy 패키지에 의존하거나 권장 할 수 없습니다 . 이 패키지는 노드 패키지와의 충돌 : 관계도 선언해야합니다.

<...>

단락 2는 OP 문제에 대한 실제 솔루션입니다. OP는 symlink를 직접 수행하는 대신이 패키지를 설치해야합니다. 다음은 데비안 패키지 색인 웹 사이트 에서이 패키지에 대한 링크 입니다.

를 사용하여 설치할 수 있습니다 sudo apt-get install nodejs-legacy.

NPM 개발자가 전체를 채택하는 것에 대한 정보를 찾지 못했지만 npm패키지가 어느 시점에서 수정 nodejs-legacy되어 실제로 레거시 가 될 것이라고 생각 합니다 .


106
요약 :sudo apt-get install nodejs-legacy
Alf Eaton

58
나는 맹목적으로 처형하라는 명령을 내리기보다는 상황을 철저히 설명하는 답변을 좋아합니다. 그런 다음 해당 정보를 환경 설정 스크립트의 주석에 복사하여 작동하지 않을 때 1 년 후 무슨 일이 일어나고 있는지 알 수 있습니다.
Mnebuerquo

29
사람으로서 나는 노드가 노드가 아니라 데비안에서만 nodejs라는 것이 매우 불편하다는 것을 알았습니다. 이와 같은 파편 개발 도구에는 정말 놀랍도록 어리 석습니다. 기본적으로이 결정은 모든 노드 패키지에서 데비안에 예외적 인 상황을 만들었습니다! 내가 어떤 동정심이 부족 그래서 나는, "노드가"그렇지 않으면 무엇을 들어 본 적이없는 (
Lodewijk

4
내가 빠진 것이 아니라면 이것은 이름이 아니었다 스페이스 충돌 . 이름 공간 이 없으며 단순한 이름 충돌이었습니다. 네임 스페이스를 사용하면 서로 다른 네임 스페이스에 존재하는 한 동일한 이름을 두 번 이상 사용할 수 있습니다 . Linux 또는 Unix의 실행 파일 이름에는 이러한 "공백"이 없습니다. 가장 가까운 것은 $ PATH 변수에 여러 디렉토리를 가질 수 있으며 이름이 일치하는 실행 파일이있는 가장 빠른 디렉토리가 사용된다는 것입니다. (그러나 그것은 네임 스페이스와는 매우 다릅니다.)
iconoclast

7
이름이 충돌했기 때문에 이것은 훨씬 성가시다. "아마추어 패킷 라디오" .
Suzana 2019

113

nodejs에 노드를 연결하십시오. 먼저 nodejs가 어디에 있는지 확인하십시오

whereis nodejs

그런 다음 nodejs에 대한 소프트 링크 노드

ln -s [the path of nodejs] /usr/bin/node 

/ usr / bin이 실행 경로에 있다고 가정합니다. 그런 다음 명령 행에 node 또는 npm을 입력하여 테스트하면 모든 것이 작동합니다.


3
-s는 하드 링크가 아닌 기호 링크 (주로 선호되는 선택)를 작성합니다.
hyde

20
이것은 작동하지만 패키지 설치에 대한 vbo의 대답nodejs-legacy 이 더 쉽습니다.
돈 커크비

2
나는 돈 커크비의 의견과 vbo의 대답에 이어 두 번째입니다. vbo의 답변이 선택된 답변이어야한다고 생각합니다.
modulitos 2016 년

3
같은 소프트웨어를 두 번 설치하는 대신 심볼릭 링크를 만드는 것이 훨씬 더 편리하다는 것을 알았습니다.
Frankies

7
하지 퇴비와 함께 할 /usr/bin당신이하지 않으면 dpkg. 적절한 해결책 (이 수동 symlinking 접근 방식을 선호하는 경우)은 로컬 설치 및 재정의 용으로 지정된 symlink/usr/local/bin작성하는 것 입니다. 수동으로 수행하는 모든 작업 /usr/bin은 패키지 관리자가 덮어 쓰거나 혼동 할 수 있습니다.
tripleee

44

NVM 또는 Nodejs 버전 관리자를 사용하여 Nodejs를 설치할 수도 있습니다 . 버전 관리자를 사용하면 많은 이점 이 있습니다. 그들 중 하나는이 문제에 대해 걱정할 필요가 없다는 것입니다.


명령:


sudo apt-get update
sudo apt-get install build-essential libssl-dev

사전 설치 소프트웨어 패키지가 설치되면 프로젝트의 GitHub 페이지에서 nvm 설치 스크립트를 풀다운 할 수 있습니다. 버전 번호는 다를 수 있지만 일반적으로 다음 구문으로 다운로드하여 설치할 수 있습니다.

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

스크립트가 다운로드되어 실행됩니다. 의 홈 디렉토리 하위 디렉토리에 소프트웨어를 설치합니다 ~/.nvm. 또한 필요한 줄을~/.profile 파일을 사용하는 파일에 합니다.

nvm 기능에 액세스하려면 로그 아웃했다가 다시 로그인하거나 ~ / .profile 파일을 소싱하여 현재 세션에서 변경 사항을 알 수 있도록합니다.

source ~/.profile

이제 nvm을 설치 했으므로 격리 된 Node.js 버전을 설치할 수 있습니다.

설치 가능한 Node.js의 버전을 찾으려면 다음을 입력하십시오.

nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

보다시피,이 글을 쓰는 시점의 최신 버전은 v0.11.14입니다. 다음을 입력하여 설치할 수 있습니다.

nvm install 0.11.14

일반적으로 nvm은 가장 최근에 설치된 버전을 사용하도록 전환합니다. 다음을 입력하여 방금 다운로드 한 버전을 사용하도록 nvm에 명시 적으로 지정할 수 있습니다.

nvm use 0.11.14

nvm을 사용하여 Node.js를 설치할 때 실행 파일을 node라고합니다. 다음을 입력하여 쉘에서 현재 사용중인 버전을 확인할 수 있습니다.

node -v

완전한 튜토리얼은 여기 에서 찾을 수 있습니다


3
이것은 또한 위의 오류를 수정했습니다. nodejs 개발자에게는 훨씬 낫습니다 (제 생각에 전체 개발자는 nodejs에서 일하는 사람이 아닙니다). 나는 그것을 사용했다.
Ajeeb.KP

1
nvm 노드를에 소프트 링크해야했습니다 usr/bin/node. 이렇게 뛰었습니다sudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
Jason Kim

2
나는 이것을 몇 시간 동안 알아 내려고 노력하고 있습니다. 이것이 내가 찾은 유일한 해결책입니다. 감사합니다.
w3bMak3r

'혜택'은 이제 죽은 링크입니다
jaunt

20
  1. 다음을 nvm사용하여 먼저 설치하십시오 .

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  2. 명령을 실행

    source ~/.profile
  3. 이제 이것을 실행하면 설치된 모든 패키지 또는 다른 버전의 패키지가 표시됩니다.

    nvm ls-remote
  4. 설치된 패키지는 녹색입니다. 원하는 버전을 설치하십시오.

    nvm install 6.0.0
  5. 설치되지 않은 위치를 확인하십시오.

    which node
  6. 현재 버전 확인 :

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    sudo cp -r $n/{bin,lib,share} /usr/local

2
이 솔루션을 사용하여 언제 어디서나 노드 및 npm 버전을 제어 할 것을 적극 권장합니다.
Rémi Becheras

14
sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy
source ~/.profile

source ~/.profile접힌 주석과 이전에 일부 정리 명령에서 허용 된 답변을 결합했습니다 . 대부분 sudo apt-get install npm후에도 필요할 것 입니다.


12

나를 위해 문제가 해결되었습니다.

sudo apt-get remove node
sudo apt-get remove nodejs
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo ln -s /usr/bin/nodejs /usr/bin/node
alias node=nodejs
rm -r /usr/local/lib/python2.7/dist-packages/localstack/node_modules
npm install -g npm@latest || sudo npm install -g npm@latest

10

n을 좋아하기 때문에 내가 사용하는 또 다른 접근법이 있습니다. 은 노드 버전 사이를 쉽게 전환하기 위해 을 입니다.

새로운 Ubuntu 시스템에서 먼저 'system'노드를 설치하십시오.

curl -sL https://deb.nodesource.com/setup | sudo bash -

그런 다음 n 모듈을 전체적으로 설치하십시오 .

npm install -g n

시스템 노드가 먼저 설치되었으므로 대체 시스템을 사용하여 n에서 제공 한 노드를 명확하게 가리킬 수 있습니다 . 먼저 대체 시스템이 노드에 대해 아무것도 없는지 확인하십시오.

update-alternatives --remove-all node

그런 다음 n이 제공 한 노드를 추가하십시오 .

update-alternatives --install /usr/bin/node node /usr/local/bin/node 1

다음으로 시스템에서 제공 한 노드 (cur와 함께 설치된 노드)를 추가하십시오.

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2

이제 대화식 메뉴를 사용하여 n이 제공 한 노드를 선택하십시오 ( /usr/local/bin/node다음 명령으로 표시된 메뉴에서 선택 ).

update-alternatives --config node

마지막으로 /usr/local/bin대체로 PATH에서 우선 순위가 PATH보다 우선 /usr/bin하므로 대체 시스템 노드가 효과적 일 경우 다음 별명을 작성해야합니다 (.bashrc 또는 .zshrc에 입력). 그렇지 않으면 / usr / local / bin에 n 으로 설치된 노드 가 항상 우선합니다.

alias node='/usr/bin/node'

이제로 노드 버전을 쉽게 전환 할 수 있습니다 n <desired node version number>.


9

Linux Mint 17에서 두 가지 솔루션을 모두 시도했습니다 (symlink 생성 또는 nodejs-legacy 성공하지 않고 패키지 사용)을 .

마침내 나를 위해 일한 유일한 것은 Chris Lea의 PPA를 사용하는 것입니다.

sudo apt-get purge node-*
sudo apt-get autoremove 
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

이 노드 버전 10.37 및 npm 1.4.28을 설치했습니다. 그 후 전 세계적으로 패키지를 설치할 수있었습니다.


9

다른 사람들이 이미 언급했듯이 노드 또는 개발 라이브러리를 설치하는 데 "sudo apt-get"을 사용하지 않는 것이 좋습니다. https://nodejs.org/dist/v6.9.2/ 에서 필요한 버전을 다운로드 하고 자신의 환경을 설정할 수 있습니다.

노드 버전을 관리하기 위해 nvmn 과 같은 도구를 권장합니다 . 이러한 모듈을 전환하고 작업하는 것이 매우 편리합니다. https://github.com/creationix/nvm https://github.com/tj/n

또는 기본 bash를 작성하여 zip / tar를 다운로드하고 이동 폴더를 추출하고 소프트 링크를 만드십시오. 업데이트가 필요할 때마다 기존 소프트 링크를 새로 다운로드 한 버전으로 지정하십시오. 내 자신을 위해 만든 것처럼 https://github.com/deepakshrma/NodeJs-4.0-Reference-Guide/blob/master/nodejs-installer.sh를 참조하십시오.

#Go to home
cd ~
#run command
#New Script
wget https://raw.githubusercontent.com/deepakshrma/NodeJs-4.0-Reference-Guide/master/nodejs-installer.sh 
bash nodejs-installer.sh -v lts
#here -v or --version can be sepecific to 0.10.37 or it could be latest/lts 
#Examples
bash nodejs-installer.sh -v lts
bash nodejs-installer.sh -v latest
bash nodejs-installer.sh -v 4.4.2

6

여기 에서 간단한 솔루션

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash --
sudo apt-get install nodejs

setup_x.x 값을 변경하여 버전을 지정할 수 있습니다 (예 : setup_5.x).


5

시스템이 경로 노드 js 이진을 감지 할 수 없습니다.

1. 어느 노드

그런 다음 nodejs에 대한 소프트 링크 노드

ln -s [the path of nodejs] /usr/bin/node 

/ usr / bin이 실행 경로에 있다고 가정합니다. 그런 다음 명령 행에 node 또는 npm을 입력하여 테스트하면 모든 것이 작동합니다.


4

가지고있는 노드 버전을 모두 제거하십시오.

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

nvm (노드 버전 관리자) 설치 https://github.com/creationix/nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

이제 원하는 버전의 노드를 설치하고 버전간에 전환 할 수 있습니다.


참고로-위의 방법을 사용하는 사람 nvm은 nodejs-legacy 패키지가 v0.10.25입니다. (또는 적어도 시도했을 때 본 것입니다.)
JaredH

2

/ usr / sbin / node (ax25-node 패키지에 링크 됨) 연결을 해제 한 다음 명령 줄에서 이것을 사용하여 nodejs에 대한 링크를 만들었습니다.

sudo ln -s /usr/bin/nodejs /usr/bin/node

karma와 같은 패키지는 nodejs 이름으로 작동하지 않지만 karma 스크립트의 첫 번째 줄을 node에서 nodejs로 변경하지만이 문제를 한 번에 해결하는 것이 좋습니다.


1

나를 위해 수정은 node * 패키지와 npm 패키지를 제거하는 것이 었습니다.

그런 다음 다음과 같이 새로 설치하십시오.

sudo apt-get install autoclean
sudo apt-get install nodejs-legacy
npm install

sudo apt-get autocleansudo apt-get install autoclean
m3nda

1

설치 프로그램에 문제가 없습니다.
nodejs를 노드로 바꾸거나 경로를 / usr / bin / nodejs에서 / usr / bin / node로 변경하십시오.



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