NPMは依存関係をインストールできません-ロックされていないもののロックを解除しようとしました


192

package.jsonファイルでnpmインストールを実行しようとしていますが、多くの問題が発生しています。私のすべての依存関係で、「エラー:ロックされていないXXXのロックを解除しようとしました」と言い続けます。以下がその1つです。

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
        at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
        at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
        at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
        at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
        at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
        at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
        at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
        at Object.oncomplete (fs.js:107:15)

私がそれをsudoとして実行しようとすると、それはさらに進んでいくつかのパッケージのインストールを開始するようですが、代わりにいくつかの新しいエラーがポップアップします:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

node.js:811
    var cwd = process.cwd();
                      ^
Error: EACCES, permission denied
    at Function.startup.resolveArgv0 (node.js:811:23)
    at startup (node.js:58:13)
    at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

最近、ノードとnpmのインストールを更新しました。多分それはそれと関係があるのか​​もしれません。また、私の開発のほとんどはオフィスで行われており、今日はVPNを介して作業しているので、それも多分それと関係があります。

何か案は?


これがpackage.jsonファイルです、それが助けになるなら...(ため息)、nvm、私はそれを貼り付けることができないようです..文字が多すぎます。
TJキルヒナー

どのOSを実行していますか
ウェイン

回答:


421

photusenigmaによる:https : //github.com/npm/npm/issues/4815

ターミナルウィンドウでこれらのコマンドを実行します(注-$ USERの部分は置き換えないでください...これは、ユーザーを取得するLinuxコマンドです)。

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

...そして...あなたがMacを使っていて(私と同じように)、これらのコマンドを実行してもエラーが表示される場合は、最後のコマンドを実行すれば問題ありません。(これを実行する前にテストすることをお勧めします。本当に必要な場合を除いて、ENTIRE / usr / localディレクトリのアクセス権を変更したくありません!)

sudo chown -R $USER /usr/local

7
おかげで私のために働いた!私のnode_modulesフォルダーは別の場所にありましたが、おそらくこれは他の誰かを助けるでしょうsudo chown -R `whoami` /usr/lib/node_modules/
Justen

4
不思議なことに、再帰chown~/.npm/_locks私のために権限を変更しませんでした。私は走って私の仕事をしましたsudo chown -R myname ~/.npm/_locks
Sitati 2014年

7
このソリューションは、マルチユーザープラットフォームには適さないことに注意してください。最初のコマンドは問題ありません、2番目のコマンドはシステムファイルの標準ユーザー所有者を作成します。/ usr / local / lib / node_modulesは、--globalオプションを指定したnpmでのみ使用されます。つまり、sudoも使用します。残念ながら、npmを使用する一部のインストールスクリプトは、グローバルコマンドと非グローバルnpmコマンドの両方を組み合わせています...この混乱を作成しています。
Fafaman 2014

5
同意し、必要なのは最初のコマンドだけです。他のユーザーは、ユーザーが実際に所有するべきではないため、避けてください。
ピロスペード、

2
2行目の「効果」を逆にする方法はありsudo chown -R $USER /usr/local/lib/node_modulesますか?私は...それは良い考えではありませんことを読む前にそれを実行しました
shaneparsons

153

今日の午後、私は同僚と協力して、何が問題なのかを理解しました。ホームディレクトリの「.npm」フォルダは、自分ではなくrootユーザーが所有していました。何が起こったのかよくわかりません。たぶん、ある時点でroot管理者としてnodeまたはnpmをインストールしました。とにかく実行したところsudo chown -R [username] .npm、ようやくnpm install自分のプロジェクトからコマンドを実行できるようになりました!


11
同じコマンドを実行する場合~/tmp/や、ノードが一時的な場所として使用する場所でも役立ちます
Jason

1
お返事ありがとうございます!エラーメッセージが悪いので、私はいくつかの頭痛を保存しました。しかし、私が言うには、npmはデフォルトでこれを実行している必要があります。ルートの下に自分でインストールしなかったのは確かだからです。また、完全を期すために、-R <username> .npm
crowmagnumbを

私が助けてくれてうれしい:)そして、良いキャッチ!私はそれを言うように私の応答を変更します。
TJキルヒナー

ライフセーバー!ありがとう
Matthew Cullum

21

私の場合、問題はHOMEディレクトリを持たないユーザーでnpmを呼び出していたため、たとえば次のコマンドは失敗します。

sudo -u someUser npm install

解決策は、someUser書き込みアクセス権を持つHOMEディレクトリを提供することです。

sudo -u someUser HOME=/some/directory npm install

これは実際に私には有効だったので賛成です。私は本番環境にデプロイしていますが、ユーザーには.npmディレクトリさえありません(とにかく見つけることができました)
Stuart Watt

「クロノス」ユーザーを使用してChromeOSで動作します。
Kyle Coberly、2015年

sudo -u someUser -i新しいログインシェルを開始するを指定することで、これを回避することができました。私はこれをもう少し調べました、そしてnpmのキャッシングコードはnpm.cache変数を使用します、それは私がデフォルトに推測していると思い$HOME/.npm/ます。sudoは、構成とコマンドラインオプションの有無に応じて、HOME変数が何に設定されるかによって異なる動作をすることもあります。
jgibson 2015年

11

同じ問題があり、受け入れられた回答に従って権限を変更することで修正しました:

sudo chown -R $USER ~/.npm

ただし、2番目のコマンドはシステムリソース(sudo chown -R $USER /usr/local/lib/node_modules)の権限をダウングレードするため、使用を避けてください。良い考えではありません。

記録のために: "usr"はUnixシステムリソースを/usr/local表します


1
これはおそらく、新しい回答として投稿されるのではなく、受け入れられた回答に対するコメントであるべきです。
Kmeixner、2015

その回答の作成者はこれを知っていますが、彼の回答を更新していません。そのため、別の回答がはるかに正当化されます。
GuiPrá2015年

4

これはどれも私にとってはうまくいきませんでした。次のようにして、文字通りrootとして実行する必要がありました。

sudo su -
sudo npm install forever -g

次に、パッケージはLinux Ubuntu 14.04にインストールされます。


rootとしてnpmを実行しないでください!
アントワーヌ「ハッシャー」ムッソ2018


1

私の解決策:

sudo chown -R $USER /usr/local/lib/node_modules/NAMEOFMODULE

私の場合は:

sudo chown -R $USER /usr/local/lib/node_modules/appium/

しかし、私は同じ問題を抱えていました、最後に

npm cache clean

出来た !


0

私は同じ問題を抱えていて、npm関連のファイルとディレクトリの権限/所有権を何時間も修正しようとしましたが、それでもうまくいきませんでした。

突然、存在しないディレクトリを指すエントリを持つ~/.npmrcファイルが見つかりましたcachecacheデフォルトのキャッシュの場所を使用するためにそのプロパティを削除し、解決されました。


0

免責事項

私はウィンドウズですユーザーです。しかし、私のチームと私はnpmインストールエラーに関する多くの問題に遭遇しました。

問題

以下は、学んだ教訓と、常に私たちを救ってきた考えられる根本的な解決策のリストです。

  1. node_modulesnpmローカルインストールディレクトリは、255より長いパスを処理できないなどのOSの欠点による変更から保護されます文字を。
  2. コマンドラインツールを使用してフォルダーを消去しても、エクスプローラーにフォルダーが存在するかのように表示され、アクセスしようとすると、いくつかのアクセス許可エラーが発生します。
  3. アンチウイルスやローカルポリシーマネージャーによっては、node_modulesフォルダーを作成し、後でそのフォルダーへのアクセスまたはアクセス許可を委任して、多数のインストールエラーが発生する可能性があります。
  4. npmログを有効にして、次の問題の可能性についてさらに洞察を得ます。

    npm install --loglevel verbose

ラジカル

rimrafをグローバルにインストールする

 npm install rimraf -g

node_modulesでrimrafを実行します。

rimraf yourDir/node_modules

次に実行してみてください:

npm install

警告!

またはそこに欠けています。コマンドに続くものに非常に注意してくださいrimraf。警告やプロンプトはなく、何もありません。地球が完全に存在しないかのように、地球のフェーズからディレクトリを消去するだけです。自己責任でお試しください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.