如何列出我链接到 npm 的所有 Node.js 模块

我正在寻找一个命令,将列出全局模块的名称,我有 npm link到本地副本,也列出本地路径。

事实上,全球安装的 所有模块列表会更好,npm link被标记了模块会更好。

91462 次浏览

你有没有试过列出 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的东西。

如果你想从 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
    • 使用 listls列出具有版本的模块
    • 替换为 ll,以获得关于每个列出的模块的详细信息。
    • 全局模块和
    • 用于浅表的 --depth 0(可选)
    • --long false(默认为‘ list’)。

问题: 由于某种原因,Npm目前为我提供了多余的条目(未着色)。他们就是那些我已经“ 解除 npm 链接”了。

对于当前 npm 路径中的“ 所有全局安装模块的列表”,只需执行

npm list -g

如果有进一步的需要,你可能想看看

npm help folders

除非扫描整个文件系统,否则不能向后跟踪符号链接(那就不是 npm 特定的问题)。

为了根据名称快速查找文件和目录,我使用 locate,它对通常每天重建一次的索引起作用。

locate '*/node_modules'

然后从那里开始工作(您可能希望使用 --regexp选项改进搜索)。

解析 ls的一个更好的替代方法是像下面这样使用 find:

find . -type l

可以使用 -maxdepth 1仅处理第一个目录级别:

find . -maxdepth 1 -type l

您可以使用 -ls获得其他信息。

例如,查找 npm 链接的 Node.js 模块:

find node_modules -maxdepth 1 -type l -ls

下面是 一篇文章为什么解析 ls不是最好的主意。

我看到自己和其他人经常有同样的问题。我为自己写了一个小的 CLI 称为 link-status来显示这个信息,它可以帮助其他人了!看看 这里!

我制作了一个 Node.js 模块 一个 href = “ https://www.npmjs.com/package/symlink”rel = “ nofollow norefrer”> symlink ,它使用 fs检查由 npm link或其他方式创建的符号链接。

var symlinked = require("symlinked")


console.log(symlinked.names())

我发现这个问题后,我也写了我自己的工具,这里是完整性: Npm-链表链接

它还将递归地跟踪层次结构中的所有链接包。在我的工作,我们有时可能有 npm link2-3水平深,这样你就可以准确地看到哪些是局部的,哪些不是。这样可以避免意外。

npm-list-linked

产出:

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

要列出所有全局链接的模块,可以这样做(文档 https://docs.npmjs.com/cli/ls) :

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

不过,我必须首先在自己的机器上更新 npm 的版本:

npm install npm@latest -g

在 Windows 上,你只需查看下面的目录:

C:\Users\[username]\AppData\Roaming\npm\node_modules

您应该会看到那里列出的任何符号链接库,以及任何全局库安装。

这些命令在 npm 7中更加简单:

  • 全球模块: npm ls --link --global
  • 本地模块: npm ls --link

找到 --link标志的功劳归于 安德鲁