npmがリンクされているノードモジュールをリストする簡単な方法は?


123

npm linkローカルコピーに追加したグローバルモジュールの名前とローカルパスを一覧表示するコマンドを探しています。

実際、グローバルにインストールされたすべてのモジュールのリストはさらに良くなり、npm link'd'はなんとかフラグが立てられます。


1
npm -g lsすべてのグローバルモジュールをリストする必要がありますが、リンクされたモジュールをリストするかどうかはわかりません
Ferdi265

アプリケーションの「package.json」ファイルを維持する
CM

1
@CeeAim私はたくさんのpackage.jsonsを備えた多くのアプリケーションを持っています。また、CLIのような他の目的のためのかなりの数のグローバルモジュールも持っていますnpm link。追跡する方法が必要です。
カラム14

回答:


64

node_modulesディレクトリの内容(例:)を一覧表示してみましたls -l node_modules | grep ^lか?それらは通常のシンボリックリンクです。

すべてのシンボリックリンクを見つける必要がある場合は、のようなものを試すことができますfind / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l


16
ローカルにリンクされた名前空間モジュール(@ namespace / moduleName)では機能しません。残忍な解決策は次のようになります( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
アンドレアカラーロ

2
このソリューションはWindowsでは機能しません(他のソリューションでも機能しません)。
Micah Zoltu 2017年

2
@MicahZoltu Git bashターミナルを使用している場合、Windowsで動作します
グレッグM.

1
:@scopedパッケージの場合、ちょうどLSはコマンドに-Rを追加ls -l -R ./node_modules | grep ^l
Romasato

私は私のために仕事に以下の答えを見つけたstackoverflow.com/a/48593067/7491536
ジャック・ハワード

193

グローバルにリンクされたすべてのモジュールを一覧表示するには、これが機能します(ドキュメントhttps://docs.npmjs.com/cli/ls):

npm ls -g --depth=0 --link=true

ただし、最初に自分のマシンのnpmのバージョンを更新する必要がありました。

npm install npm@latest -g

15
最もシンプルなソリューションであり、Windowsで動作することに賛成。これを2回以上賛成できるといいのですが。
Artif3x

1つ目は動作しません--link=true。私の環境:Win10、NVM = 1.1.7、現在のノード= 8.14.0
Jeb50、19年

1
リストされているものを削除するには:npm unlink <package> -g
zamnuts

リンクされたパッケージがグローバルにインストールされるため、これは理にかなっています。
kas

20

構文解析に代わるより良い方法lsは、findようです:

find . -type l

使用できます -maxdepth 1して、最初のディレクトリレベルのみを処理ます。

find . -maxdepth 1 -type l

-ls追加情報に使用できます。

たとえば、npmでリンクされているノードモジュールを見つけるには:

find node_modules -maxdepth 1 -type l -ls

ここだ記事パース理由は、ls最高のアイデアではありません


これは私にとって便利でした。ありがとう:) Gist:gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve

13

からの素敵な色の出力がnpm list必要な場合は、次のようにすることができます。

\ls -F node_modules | sed -n 's/@$//p' | xargs npm ls -g --depth 0

私の現在の遊び場ディレクトリにそれを与えます:

+-- color@0.11.1 
+-- grunt@0.4.5
+-- http-server@0.8.5 
+-- jsdom@8.0.2 
+-- jsonfile@2.2.3 
+-- underscore@1.8.3 
+-- xmlserializer@0.3.3 
`-- zombie@4.2.1 

これはいくつかの仮定を行いますが、ほとんどの場合に機能するか、または以下の説明に合わせて簡単に調整できるはずです。

  • コマンドで\ls可能なエイリアスをバイパスするために使用しますls
  • この-Fオプションは、リンクに「@」標識を追加します
  • sedコマンドは、これらのリンクを選択し、インジケータを削除します
  • xargs一部は引数として以前の出力を渡しますnpm ...
  • npm で呼び出されます
    • listまたはlsバージョン付きのモジュールを一覧表示する
      • llリストされた各モジュールの詳細を取得するには、に置き換えます。
    • -g グローバルモジュールと
    • --depth 0 浅いリストの場合(オプション)
    • --long false (デフォルトは「list」)。

問題:なんらかの理由で、npmは現時点で無関係なエントリを表示します(色なし)。それらは、私が " npm unlink "したものになります

現在のnpmパスにある「グローバルにインストールされたすべてのモジュールのリスト」については、次のようにします

npm list -g

さらなるニーズについては、あなたが見てみたいかもしれません

npm help folders

ファイルシステム全体をスキャンしない限り、シンボリックリンクを逆方向にたどることはできません(それはnpm固有の質問ではありません)。

ファイルとディレクトリを名前ですばやく見つけるために、私はlocate通常1日に1回再構築されたインデックスで機能するを使用します。

locate '*/node_modules'

そこから作業を開始し--regexpます(オプションで検索を絞り込むことができます。


私は使用せず-gに、ローカル/最も近い一時的な依存関係リンクを取得しています。ありがとう!
kross

4

私自身のツールも作成した後で、この質問を見つけました。ここでは、完全性のためです。npm-list-linked

階層内のすべてのリンクされたパッケージも再帰的に追跡します。私の作業では、npm link2から3レベルの深さになる場合があります。これにより、ローカルなものとそうでないものを正確に確認でき、驚きを回避できます。

$ npm-list-linked
Linked packages in /home/user/projects/some-project/
    @prefix/package 0.2.7
        other-package 0.1.2

2

で作成されたfsシンボリックリンクを確認するために使用するNode.jsモジュールを作成しましたnpm link

https://www.npmjs.com/package/symlinked

var symlinked = require("symlinked")

console.log(symlinked.names())

2
特にmedium.com/@maybekatz/…を考慮して、このためのCLI実行可能ファイルを追加すると、本当に便利でしょう。シンボリックリンクされたパッケージを見つける必要があるほとんどのユースケースはCLIからです。
チェンバレン2017

何らかの理由でリンクを検出できませんでした:(
JacopKane

@cchamberlainに、APIをモデル化するための優れたCLIツールを教えてもらえますか?または、github.com / ryanve / symlinkedに cliコマンドを投稿してもかまいません :)
ryanve

@JacopKaneあなたは上の問題を投稿することができていますgithub.com/ryanve/symlinked/issues/new詳細は?
ライアンブ2017年

1
@ryanve-github.com/ryanve/symlinked/ pull /1を完了 -機能しなかったため、スコープパッケージのサポートも追加しました。シンプルな構造で高評価!:)
チェンバレン

1

私自身や他の人が同じ質問をしているのをよく見ます。私はlink-statusこの情報を表示するために自分用に小さなCLIを作成しましたが、他の人にも役立つかもしれません!こちらでチェックしてください!


0
find `npm root -g` -maxdepth 2 -type l

名前空間付きパッケージを含むグローバルリンクを表示します。

@andrewの答えは時々うまくいきます:

npm ls -g --depth=0 --link=true

しかし、場合によっては、ピアdepエラーが発生しました。それが誰かを助けることを願っています!

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