programing

Sudo가 없으면 NPM 모듈이 전체적으로 설치되지 않습니다.

linuxpc 2023. 8. 4. 22:42
반응형

Sudo가 없으면 NPM 모듈이 전체적으로 설치되지 않습니다.

방금 Ubuntu 12.04 LTS를 다시 설치했으며, 무엇보다 먼저 다음 단계를 수행했습니다.

  1. 다음 스크립트를 사용하여 패키지 관리자를 통해 노드 설치

    sudo apt-get update
    
    sudo apt-get install python-software-properties python g++ make
    
    sudo add-apt-repository ppa:chris-lea/node.js
    
    sudo apt-get update
    
    sudo apt-get install nodejs
    
  2. yoman, express, n, yoman의 생성기를 전역에 설치하려고 시도했지만 모두 동일한 오류를 반환했습니다.

    npm ERR!오류: EACCES, 심볼 링크 '.../lib/node_modules/n/bin/n'

    npm ERR! {[오류: EACCES, symlink '..lib/node_modules/n/bin/n'] 오류: 3, 코드: 'EACCES', 경로: '../lib/n/n'}

    npm ERR!

    npm ERR!루트/관리자로 이 명령을 다시 실행하십시오.

    npm ERR!System Linux 3.8.0-29-generic

    npm ERR! 명령 "/usr/bin/node" "/usr/bin/npm" "설치" "-g" "-d" "n"

    npm ERR! cwd /home/heberlz

    npm ERR! 노드 - v v0.10.20

    npm ERR! npm -v 1.3.11

    npm ERR! 경로 .../lib/node_modules/n/bin/n

    npm ERR! 코드 EACCES

    npm ERR! errno 3

    npm ERR! 스택 오류: EACCES, 심볼 링크 '.../lib/node_modules/n/bin/n'

    npm ERR!

    npm ERR!추가 로깅 세부 정보는 다음에서 확인할 수 있습니다.

    npm ERR! /home/heberlz/npm-debug.log

    npm ERR! ok 코드 0이 아닙니다.

  3. 재귀적으로 ~/.npm, /usr/lib/node, /usr/lib/node_modules 및 다음 심볼 링크 /usr/bin/node, /usr/bin/nodejs소유권을 재확보했지만 성공하지 못했습니다.

나중에 문제가 되지 않도록 sud 없이 yoman과 그 발전기를 설치해야 합니다 :(

Ubuntu 12.04 및 Chris Lea의 PPA를 사용한 설치 작업은 다음과 같습니다.

npm config set prefix '~/.npm-packages'

가를 합니다.$HOME/.npm-packages/bin$PATH

에 추가.bashrc

export PATH="$PATH:$HOME/.npm-packages/bin"

자세한 내용은 @passy의 이 답변을 참조하십시오.

계신 은.$HOME/bin더 간단한 해결책은 ...입니다.

npm config set prefix ~
  • 새 이 제이 명이설다에 됩니다.$HOME/bin디렉토리입니다.
  • 경로를 변경할 필요가 없습니다!

을 줄이는 에 관한 것이기 에, 이논는때것관기입문이니다한것에줄는이위을험보안의실영운제의로▁since▁risks다니▁security▁running때▁about▁discuss▁of▁the입문▁this▁ision▁really▁reducing.sudo또한 노드 앱은 잠재적으로 사용자가 설치하고 있다고 생각하는 등록된 노드 패키지 이름과 일치하지 않는 앱 이름을 설치할 수 있습니다..npm install는 기존 이나 이미 있는 합니다.$HOME/bin걱정되는 경우 먼저 설치할 앱의 파일에서 및 속성을 확인합니다.

일반적으로 다음을 수행하는 것이 가장 안전합니다.

  • $HOME/bin시스템 명령이 대체되지 않도록 경로에서 마지막으로 표시됩니다.
  • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .$PATH따라서 현재 디렉터리에 있는 명령을 실수로 실행하지 않습니다.

참조:

2014년 10월 기준:

Node.js는 NodeSource Debian 및 Ubuntu 이진 배포 저장소에서 사용할 수 있습니다.

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

바로 그겁니다.

오래된 답변:

스도를 사용하지 않는 가장 빠른 방법은 아이작이 여기에 설명한 것과 같습니다.

나는 당신이 sudo와 함께 패키지 관리를 하지 않기를 강력히 권장합니다!패키지는 임의 스크립트를 실행할 수 있으므로 패키지 관리자 명령을 사용하는 것이 체인톱 이발만큼 안전합니다.물론, 그것은 빠르고 확실히 어떤 장애물도 뚫을 수 있지만, 여러분은 실제로 그 장애물이 그곳에 머무르기를 원할 수도 있습니다.

대신 이 작업을 한 번 수행하는 것이 좋습니다.

sudo chown -R $USER /usr/local

편집:

/usr/local의 소유권을 현재 사용자로 변경하는 것과 관련하여 특정 보안 문제와 기능 제한이 있습니다.

그렇긴 하지만, sudo를 사용하지 않고 글로벌 모듈을 설치하고 싶다면, 언급된 것보다 더 좋은 솔루션은 (실용적인 관점에서) 보이지 않습니다.보안과 사용 편의성은 매우 광범위한 주제이며, 이에 대한 쉬운 답은 없습니다. 단지 사용자의 요구 사항에 따라 다릅니다.

문제는 npm 모듈을 전체적으로 설치할 때 오류를 방지하기 위해 sudo를 사용하여 노드를 설치하는 것이었습니다.

제 해결책은 다음과 같은 방법으로 노드를 다시 설치하는 것이었습니다.

nodejs.org #에서 최신 안정적인 노드 소스를 다운로드합니다. 이 경우 node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #transpress 소스

cd node-v0.10.20 #압축되지 않은 폴더 입력

sudochown -R $USER /usr/local

./configure --syslog=/usr/local & & make & make 설치

한 가지 주의할 점은 노드 설치 자체가 sudo로 이루어졌기 때문에 /usr/local 폴더의 소유권만 가져오는 것은 제 경우에는 작동하지 않는다는 것입니다.

yoman을 설치하기 위한 마지막 단계: #yeoman.io 에서 "npm install -gyo"를 수행하면 이미 bower와 grunt가 설치된다고 하지만, 실패한 grunt의 하위 모듈이 있기 때문에 직접 설치하여 수정했습니다.

npm 설치 - g bower

npm 설치 - g 그룬트

npm 설치 -gyo

npm 설치 -g generator -sys

환경 변수와 셸 별칭을 사용하여 이 문제를 해결했습니다.

export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"

menpm은 .npmrc의 "prefix" 구성 설정을 준수하지 않았습니다.

npm의 디렉터리 경로를 찾습니다.

npm config get prefix

대부분의 시스템에서는 /usr/local이 됩니다.

npm 디렉터리의 소유자를 현재 사용자의 이름(사용자 이름!)으로 변경합니다.

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

그러면 npm 및 일부 다른 도구(lib/node_modules, bin 및 share)에서 사용하는 하위 폴더의 사용 권한이 변경됩니다.

자세한 내용은 다음 링크를 참조하십시오.

https://docs.npmjs.com/getting-started/fixing-npm-permissions

이 유사한 SO 게시물에 따르면: npm은 sudo 없이 오류를 던집니다.

소유권에 문제가 있는 것 같습니다.~/.npm디렉토리입니다.

이 질문의 답과 마찬가지로 다음을 시도합니다.

sudo chown -R `whoami` ~/.npm

개발 중인 시스템에서는 nvm을 사용하는 것이 좋습니다.

그렇지 않으면 원하는 패키지 관리자를 사용하여 설치하기만 하면 됩니다.

어떤 경우든 스택 오버플로 시 이 답변을 확인하는 것이 좋습니다.

사실, 루트가 소유한 사용자 폴더의 권한을 방금 변경했습니다.

sudo chown -R $USER ~/.config/configstore

그러면 나는 스도 없이 "npm 설치"와 "타워 설치"를 할 수 있었습니다!잘 했어요!

lubuntu 14.04.3을 사용하여 .npm과 npm 접두사의 소유권을 변경하려고 시도했고, 경로를 업데이트했으며, npm이 설치된 모듈을 sudo 없이 홈 디렉토리로 업데이트했지만 경로가 잘못되어 member와 같은 모듈을 찾을 수 없었습니다. 문제를 해결한 Linux, 노드/npm에 대한 빠른 설정 가이드.

사용자 공간에 Node를 설치하면 이 문제와 동일한 이유로 인한 기타 문제를 해결할 수 있습니다.

단말기에 복사해서 붙여넣기만 하면 됩니다.

NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs}
cd /tmp
wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz
NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1)
mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT
cd $NODEJS_CURRENT
./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install
cd $NODEJS_ROOT
rm current 2> /dev/null # Removes current symbolic link, if any
ln -s $NODEJS_CURRENT current

동일한 명령을 실행하여 노드를 최신 버전으로 업데이트할 수도 있습니다.

환경을 편집하는 것을 잊지 마십시오.단 한번만.

echo "export NODEJS_ROOT=$NODEJS_ROOT"            >> $HOME/.bash_profile
echo 'export PATH=$NODEJS_ROOT/current/bin:$PATH' >> $HOME/.bash_profile
source $HOME/.bash_profile # reload your env, so you can use node right now

sudo 없이 Node.js를 설치하는 방법에 대한 이 문서를 확인하십시오.

이 항목에 대한 보다 일반적인 해결 방법(예: 로컬로 소프트웨어 설치)은 도트 소프트웨어를 참조하십시오.

nvm을 사용하면 다른 노드 버전 간에 동적으로 전환할 수 있으며 사용자를 위해 로컬로 설치됩니다.sudo는 필요 없습니다.이전 노드를 완전히 정리했는지 확인하십시오.

https://github.com/nvm-sh/nvm

sudo를 사용하지 않고 Node.js 및 npm을 로컬로 설치하려면 터미널을 열고 다음을 입력합니다.

 echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
    . ~/.bashrc
    mkdir ~/local
    mkdir ~/node-latest-install
    cd ~/node-latest-install
    wget -c http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
    ./configure --prefix=~/local
    make install 
    wget -c https://www.npmjs.org/install.sh | sh 

NVM 사용

저도 같은 "권한 거부" 문제가 있었습니다.https://nodejs.org/en/ 에서 설치한 NodeJS를 수정하려고 시도하는 대신, 다음 사용자가 소유한 폴더에 설치합니다.root$USERNVM. 노드 버전 관리자를 사용했습니다.

  • 를 실행합니다.curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  • 을 설치합니다. run 노버 설치 : 실nvm install 16
  • 사용:
    • nvm use 16
    • npm install -g yarn

NVM에서 설치한 노드를 사용했을 때 모든 것이 정상적으로 작동했습니다.

이 문제는 npm 폴더의 다른 소유자로 인해 발생합니다. 아래 명령을 실행하여 이 권한 문제를 해결하는 가장 좋은 방법은 다음과 같습니다.

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

npm에서 사용하는 하위 폴더의 권한이 변경됩니다.

제가 찾은 가장 좋은 해결책은 tar 패키지의 Node.js를 사용자 홈 디렉토리에 설치하고 lib 폴더 위치를 연결하는 것이었습니다.다음은 당신이 해야 할 일입니다.

기본 /usr/local/ 대신 ~/.local/ 아래에 Nodejs를 설치합니다.

Add this to your ~/.npmrc (create the file if it doesn't exist already):

root =    /home/YOUR-USERNAME/.local/lib/node_modules
binroot = /home/YOUR-USERNAME/.local/bin
manroot = /home/YOUR-USERNAME/.local/share/man
Download the Nodejs source code from nodejs.org and install it under your ~/.local tree:

tar xf node......
cd node........
./configure --prefix=~/.local
make
make install

Create ~/.node_modules symlink. (This directory will be automatically searched when you load modules using require "module" in scripts. I'm not sure why Node doesn't search ~/.local/lib/node_modules by default.)

cd
ln -s .local/lib/node_modules .node_modules
Is ~/.local/bin in your path? Type

which npm
If it says ~/.local/bin/npm, you're done.

Otherwise, do this...

export PATH=$HOME/.local/bin:$PATH
...and add that line to your ~/.profile file, so it'll run every time you log in.

패키지를 설치하는 동안 소유권 또는 사용 권한 오류가 계속 발생하는 경우 를 실행하여 ~/.local/dir의 소유권을 변경합니다.

chown -R user:user ~/.local/

이제 'npm'을 통해 패키지를 설치하는 것이 좋습니다.

참고: 위의 모든 명령은 사용자가 실행해야 합니다.SUDO 또는 루트 로그인 사용 안 함

'/USR/LIB/'에서 폴더의 사용 권한을 절대 변경하지 마십시오.불안정한 OS로 이어질 수 있음

저는 파웰 그리벡의 설명이 매우 설득력이 있다고 생각합니다.sudo 명령어는 3개의 간단한 sudo 명령어로 요약되며, 글로벌 npm 설치에 sudo를 다시 사용할 필요가 없습니다.

sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/share

언급URL : https://stackoverflow.com/questions/19352976/npm-modules-wont-install-globally-without-sudo

반응형