2016-04-14 1 views
1

NPMの問題が発生しました。既存のファイル&と同じ名前のシンボリックリンクとの競合を検出しているようです。 プロジェクトのルートフォルダからls -lを実行すると、シンボリックリンクが表示されません。 NPM &で何が起こっているのか把握するにはどうすればこの矛盾を解決できますか?このnpmのインストールの競合を既存のファイルとシンボリックリンクの間でどうやって解決しますか?

連続統合ビルドサーバーは、実行中です。Node.js 4.4.3 =最新のLTSビルド。

私のlocalhostノード5.xボックスは、この警告のためにphantomjs-prebuiltを使用するように切り替わります...ノードサーバのバージョンを4.4.3 - > 5.10.1から更新することは問題ではなく、正しい修正もありません:

npm WARN deprecated [email protected]: Package renamed to phantomjs-prebuilt. Please update 'phantomjs' package references to 'phantomjs-prebuilt' 

私は私の* .jsファイルのコードのいずれかでこれらのいずれかを持っていないので、私は、これはも理由から必要とされている場所がわからない。このために検索

require("phantomjs") 
require("phantomjs-prebuilt") 

Google & SOのフレーズは、私の問題を解決するために、TS:

npm uninstall -g phantomjs 
npm WARN not installed in /.../.nvm/versions/node/v4/lib/node_modules: "phantomjs" 

rm -rf node_modules // to delete that folder 
npm install 

npm ERR! EEXIST: file already exists, symlink '../phantomjs-prebuilt/bin/phantomjs' -> '/.../node_modules/.bin/phantomjs' 
File exists: ../phantomjs-prebuilt/bin/phantomjs 
Move it away, and try again. 

このエラーはGoogleのを使用してウェブ上で発見されたどのように見えるかのスクリーンショット:

"npm ERR! EEXIST: file already exists, symlink" 

ここでは、私はすでに実行しようとしたものです。 CI server's code exampleの下にスクロールします。 (注:これは他の誰かのスクリーンショットですが、それは私に似ています)

npm listまたはnpm lsを使用するとphantomjsを示しがインストールされています:npm ls -gを使用して

├── [email protected] 

は空白のリストが表示されます。私は、グローバルエリアにパッケージやシンボリックリンクがインストールされていないことを意味します。

私が使用してphantomjsをアンインストールしようとした

npm uninstall -g phantomjs 
npm WARN not installed in /.../.nvm/versions/node/v4/lib/node_modules: "phantomjs" 

私もこのHomebrew - repeated “linking” bug. What is the underlying issue here?質問で彼の答えからwilmoreのアイデア使ってみた:

brew link --overwrite phantomjs 
Warning: Already linked: /usr/local/homebrew/Cellar/phantomjs/2.1.1 
To relink: brew unlink phantomjs && brew link phantomjs 

選ぶために私を導きましたその最後の行から1番目のオプション:

brew unlink phantomjs 
Unlinking /usr/local/homebrew/Cellar/phantomjs/2.1.1... 2 symlinks removed 

私は、実行:

npm install 

をそれはまだ、このエラーの上にトリップ:

npm ERR! EEXIST: file already exists, symlink '../phantomjs-prebuilt/bin/phantomjs' -> '/.../node_modules/.bin/phantomjs' 
File exists: ../phantomjs-prebuilt/bin/phantomjs 
Move it away, and try again. 

どのように私は、既存のファイル&シンボリックリンクの間のこのnpm install紛争を解決&さらにシンボリックリンクをデバッグするのですか?

答えて

3

私はこの質問を書いた後で、この問題を再現しようと試みたので、他の人がそれをデバッグできるようにしました。ですから、誰かが将来この問題に遭遇した場合のために、このエッジケースエラーを修正する方法があります。

私は単にpackage.jsonファイル&からこれらの両方を削除し、その後npm installを再実行して何が起こるかを確認しました。その後、それらをCIサーバーにチェックインして、何をしているのか分かりました。私は最初の "phantomjs"行を追加してCIサーバーにテストを渡さなければなりませんでした。それは取り除かれなければならなかった "ファントムズ・プレビルド"のラインでした。 &がテストに合格することができCIサーバを固定するものだ

"phantomjs": "^2.1.3", // Leave this in for Node 4.x LTS, remove it with 5.x+ 
"phantomjs-prebuilt": "^2.1.7", // Removed this with 4.x LTS, but use it with 5.x+ 

コメントは4.xのNode.jsのの& 5.xバージョンで使用されるべき説明します! :)

元々、Node 5.6.0(2016年2月導入)を使用していました&は、既存のノード4.4.3 LTS CIサーバーで動作するいくつかのGulpタスクを更新しようとしています。

がぶ飲みは5.6.0を使用している場合phantomJS文句まま、私は問題を引き起こして停止するようにそれを得るために--save-devとの両方phantomjs & phantomjs-prebuiltをインストールしていました。次に、ノード5.6.0から4.4.3 LTSにダウングレードしてCIサーバをデバッグすると、上記の私の質問に記載されているシンボリックリンクエラーが発生します。

今後誰かがこのnpm ERR! EEXIST:の問題に遭遇した場合は、package.jsonファイルからnpmモジュールへの参照をすべて削除してみてください。 CIサーバーで必要な場合は、1を1ずつ追加してください。

シンボリックリンクは、/ node_modules /フォルダに埋め込まれています。 My/node_modules /フォルダには885個のサブフォルダがあります。シンボリックリンクで何が間違っていたかを理解しようとするために、私がそれらのすべてに入っていく方法はありませんでした。

しかし、誰かがシンボリックリンクのデバッグ方法に関するヒントを持っていれば、それらについてもっと知りたいと思います。 ls -l symlinksのような使いやすいものは存在しないので、私は良い答えをアップvoteします。

関連する問題