私は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
ディレクトリがあります-パッケージをインストールしないのはなぜですか?
ジェネレーターはグローバルにインストールされるように設計されています。それ以外の場合は、各プロジェクトで使用しようとしているジェネレーターを常にインストールする必要があり、これは不必要に苦痛です。また、使用可能なすべてのジェネレーターをリストする素敵なyo
メニューが表示されません(もちろん、それらをローカルにインストールする場合はall)。
では、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
ディレクトリを削除するだけです。
@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
私はyeoman
ボックスでvagrant
を再生しようとしていますが、これはnpm
をオンにせずにSudo
パッケージをグローバルにインストールするためにやらなければならなかったことですubuntu
:
$ mkdir "${HOME}/.npm-packages"
npm
に指示します~/.npmrc
ファイルに挿入します。prefix=${HOME}/.npm-packages
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)"
$ source ~/.bashrc
これが同じような状況にいる人を助けることを願っています。
私の場合(ubuntu 12.04)、〜/ .npmrcのプレフィックスの追加は何も変更しませんでした。
その場合は、自分でノードパッケージをビルドし、/ opt/nodeまたは/home/user/.nodeにインストールします。
yoeman開始ページ からコマンドが表示されます:
yo doctor
私の場合、$ NODE_PATH(私の場合はUbuntu 14.04は/etc/profile.dで定義されています)はnpm rootと同じではありません。 $ NODE_PATHにnpmルートを追加すると、問題が解決します。
以前にインストールしたプロジェクトのルートディレクトリにある不正な.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