buntu 12.04 LTSを再インストールしたばかりで、何よりも先にこれらの手順を実行しました:
次のスクリプトを使用して、パッケージマネージャー経由でNodeをインストールしました
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
Yeoman、express、n、yeomanのジェネレーターをグローバルにインストールしようとしましたが、それらはすべて同じエラーを返しました
npm ERR!エラー:EACCES、シンボリックリンク '../lib/node_modules/n/bin/n'
npm ERR! {[エラー:EACCES、シンボリックリンク '../lib/node_modules/n/bin/n'] errno:3、コード: 'EACCES'、パス: '../lib/node_modules/n/bin/n'}
npm ERR!
npm ERR!このコマンドをroot/Administratorとして再度実行してください。
npm ERR!システムLinux 3.8.0-29-generic
npm ERR!コマンド "/ usr/bin/node" "/ usr/bin/npm" "install" "-g" "-d" "n"
npm ERR! cwd/home/heberlz
npm ERR! node -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ではない
次のフォルダの所有権を再帰的に回収〜/ .npm、/ usr/lib/node、/ usr/lib/node_modules、および次のシンボリックリンク/ usr/bin/node、/ usr/bin/nodejs 絶対に成功しない
後で問題にならないように、sudoなしでyeomanとそのジェネレーターをインストールする必要があります:(
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"
https://stackoverflow.com/a/18277225 from @passyを参照
パスに$HOME/bin
が既にある場合、より簡単な解決策は...
npm config set prefix ~
$HOME/bin
ディレクトリにインストールされます。この説明はSudo
を実行することのセキュリティリスクを減らすことに関するものなので、どのノードアプリも、インストールしようとしている登録済みノードパッケージ名と一致しないアプリ名をインストールする可能性があることに注意する必要があります。したがって、npm install
が既存のシステムコマンドまたは$HOME/bin
にすでにあるシステムコマンドを置き換えるというセキュリティリスクがあります。心配な場合は、最初にインストールするアプリの package.json
ファイルの bin
および scripts
プロパティを確認してください。
一般的に、次のことが最も安全です。
$HOME/bin
を配置します。$PATH
の相対パスを使用して、誤って現在のディレクトリにあるコマンドを実行しないようにします。参照:
2014年10月の場合:
Node.jsは、NodeSource DebianおよびUbuntuバイナリディストリビューション repository から入手できます。
curl -sL https://deb.nodesource.com/setup | Sudo bash -
Sudo apt-get install -y nodejs
それでおしまい。
古い回答:
Sudoを使用しない最速の方法は、説明されているようなものです ここではisaac
Sudoでパッケージ管理をしないことを強くお勧めします!パッケージは任意のスクリプトを実行できます。これにより、チェーンソーのヘアカットと同じくらい安全なパッケージマネージャーコマンドをsudoingできます。確かに、それは速く、間違いなくどんな障害物も通り抜けようとしますが、実際にその障害物をそこにとどめて欲しいかもしれません。
代わりにこれを一度行うことをお勧めします:
Sudo chown -R $USER /usr/local
編集:
/ usr/localの所有権を現在のユーザーに変更することに関して、特定のセキュリティ上の懸念と機能制限があります。
そうは言っても、Sudoを使用せずにグローバルモジュールをインストールする場合、(実用的な観点から)言及されたものよりも優れたソリューションはありません。セキュリティと使いやすさは非常に幅広いトピックであり、それに対する簡単な答えはありません-それは単にあなたの要件に依存します。
問題はSudoを使用してノードをインストールしました、npmモジュールをグローバルにインストールする際のエラーを回避するために、Sudoを使用してノードをインストールしないでください。
私の解決策は、reinstall node it this way:
Nodejs.orgから最新の安定したノードソースをダウンロードします#私の場合、node-v0.10.20.tar.gz
tar -zxf node-v0.10.20.tar.gz #uncompress sources
cd node-v0.10.20#非圧縮フォルダーを入力
Sudo chown -R $ USER/usr/local
./configure --prefix =/usr/local && make && make install
注意すべきことの1つは、ノードのインストール自体がSudoで作成されているため、/ usr/localフォルダの所有権を取得するだけでは機能しないことです
Yeomanをインストールするための最後のステップ:#yeoman.ioで「npm install -g yo」を実行すると、すでにbowerとgruntがインストールされると言われますが、失敗するgruntのサブモジュールがいくつかあるため、それを単独でインストールすることで修正しました
npm install -g bower
npm install -g grunt
npm install -g yo
npm install -g generator-angular
環境変数とシェルエイリアスでこの問題を解決しました。
export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"
私にとって、npmは.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
ディレクトリの所有権の問題があるようです。
その1つの答えと同様に、試してください:
Sudo chown -R `whoami` ~/.npm
実際には、rootが所有するユーザーフォルダーのアクセス許可を変更しました。
Sudo chown -R $USER ~/.config/configstore
その後、Sudoなしで「npm install」と「bower install」を実行できました。うまくいきました!
開発中のマシンを使用している場合は、 nvm の使用を検討した方がよい場合があります。
そうでない場合は、お気に入りのパッケージマネージャーを使用してインストールするだけです。
どんな場合でも、私は stackoverflowでこの答えを確認する をお勧めします
同じ問題が原因で発生するこの問題およびその他の問題は、ユーザースペースに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
同じコマンドを起動して、Nodeを最新バージョンに更新することもできます。
環境を編集することを忘れないでください。一度だけ
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をインストールする の方法については、この記事を参照してください。
このトピックに関するより一般的なソリューション(つまり、ソフトウェアをローカルにインストールする)については、 dotsoftware を参照してください。