web-dev-qa-db-ja.com

npm / yeomanは、sudoなしでgenerator-angularをインストールします

私はYo( YoemanをSudoなしで使用してgenerator-angularjsをインストールしようとしました:

npm install -g generator-angular

私は得る:

Error: EACCES, mkdir '/usr/lib/node_modules/generator-angular'

Sudo yoと入力すると、yoはSudo(これは完全に理解できる)を使用してはならないことを教えてくれます。

~/node_modulesディレクトリがあります-パッケージをインストールしないのはなぜですか?

71
Karan

ジェネレーターはグローバルにインストールされるように設計されています。それ以外の場合は、各プロジェクトで使用しようとしているジェネレーターを常にインストールする必要があり、これは不必要に苦痛です。また、使用可能なすべてのジェネレーターをリストする素敵なyoメニューが表示されません(もちろん、それらをローカルにインストールする場合はall)。

yo

グローバルインストール用のnpmのセットアップ

では、npmを使用してパッケージをグローバルにインストールする方法を教えてください。正しく言ったように、yoをSudoで実行しないでください。この問題には 多くの異なる解決策 があり、賛否両論について宗教的に議論するのに何時間も費やすことができます。

個人的にユーザーパッケージをグローバル/usr/フォルダーにインストールすることは嫌いです。 /usr/は、コンピューター上のすべてのユーザーで共有されるソフトウェア用です。マシンのみを使用している場合でも、Unixファイルシステム階層の設計方法を尊重する正当な理由があります。たとえば、ある時点でノード全体のインストールを消去することにした場合。

npmを有効にしてパッケージをグローバルにインストールする$HOMEから抜けずに有効にする私の好ましい方法は、 ローカルノードプレフィックスを設定する です。これは実行するのと同じくらい簡単です

echo 'prefix = ~/.node' >> ~/.npmrc

ローカルシェルで。その後、お気に入りのシェルの設定を調整して、グローバルノードの実行可能ファイルの新しいインストール先を指すように、$ PATHを調整します。例えば。追加することにより

export PATH="$PATH:$HOME/.node/bin"

~/.bashrcに。その後、npm install -g generator-angularをSudoなしで、権限の競合に陥ることなく喜んで実行できます。何かが完全に壊れていて、最初からやり直したい場合は、~/.nodeディレクトリを削除するだけです。

169
passy

@passyのおかげで、ついに次のようにして、ubuntu 13.04でこれをうまく動作させることができました(誰かが同様の設定問題を抱えている場合)。

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

実行しようとしています:

npm install -g yo

をもたらしました

Error: EACCES, mkdir '/usr/lib/node_modules/yo'

次を使用して修正:

echo prefix = ~/.node >> ~/.npmrc
echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc 
. ~/.bashrc

ランニング:

yo webapp

をもたらしました:

Error: EACCES, permission denied '/home/username/.config/configstore/update-notifier-yo.yml'

次を使用して修正:

Sudo chown yourusername:yourusername /home/yourusername/.config/configstore/update-notifier-yo.yml
27
pagetribe

私はyeomanボックスでvagrantを再生しようとしていますが、これはnpmをオンにせずにSudoパッケージをグローバルにインストールするためにやらなければならなかったことですubuntu

1.グローバルパッケージを格納するディレクトリを作成します

$ mkdir "${HOME}/.npm-packages"

2.パッケージをグローバルにインストールする場所をnpmに指示します

このスニペットを~/.npmrcファイルに挿入します。

prefix=${HOME}/.npm-packages

3. npmがインストール済みbinariesなどを見つけることができることを確認します

このスニペットを.bashrc/.zshrcに挿入します:

NPM_PACKAGES="${HOME}/.npm-packages"

PATH="$NPM_PACKAGES/bin:$PATH"

// `unset` `manpath` to allow inheritance from `/etc/manpath` with
// the `manpath` command
unset MANPATH // remove this line if you have previously modified `manpath`
export MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

4.次を実行するか、ターミナルを再起動します

$ source ~/.bashrc

これが同じような状況にいる人を助けることを願っています。

0
datatype_void

私の場合(ubuntu 12.04)、〜/ .npmrcのプレフィックスの追加は何も変更しませんでした。

その場合は、自分でノードパッケージをビルドし、/ opt/nodeまたは/home/user/.nodeにインストールします。

0

yoeman開始ページ からコマンドが表示されます:

yo doctor

私の場合、$ NODE_PATH(私の場合はUbuntu 14.04は/etc/profile.dで定義されています)はnpm rootと同じではありません。 $ NODE_PATHにnpmルートを追加すると、問題が解決します。

0
molavec

以前にインストールしたプロジェクトのルートディレクトリにある不正な.yo-rc.jsonファイルに関連するほぼ同一のエラーが発生しました。 Yeomanは、インストールの途中でインストールディレクトリからルートディレクトリにcwdを切り替えましたが、インストールディレクトリが/であるという詳細なしでEACCESS許可エラーのみを出力していました。これがなぜなのかを理解するのに何年もかかり、Yeomanソースを介したデバッグが必要でしたが、最終的にYeomanは.yo-rc.jsonを見つけるまでディレクトリツリーを検索し、chdirを呼び出してそこにコードを生成することを知りました新しい場所。

Yeomanは、ユーザーがディレクトリに対する書き込み権限を持っていることを確認する必要があります。または、出力でcwdが変更されたことを示すか、.yo-rc.jsonがcwdと異なる場合はインストールディレクトリの名前を出力します。

不正な.yo-rc.jsonファイルを見つけるためのコマンド

Sudo find / -name .yo-rc.json

0
Sean