列出我已链接npm的节点模块的简单方法?


123

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

实际上,所有全局安装的模块的列表将更好,用某种方式标记npm link “ d” 。


1
npm -g ls应该列出所有全局模块,但我不知道它是否列出链接的模块
Ferdi265

为您的应用程序维护一个“ package.json”文件
CM

1
@CeeAim我有很多带有package.jsons的应用程序,还有很多用于CLI等其他用途的全局模块,并且很多都是分叉npm link的。我需要一种跟踪方式。
卡勒姆,2014年

Answers:


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
Andrea Carraro

2
此解决方案在Windows上不起作用(其他任何解决方案也不行)。
Micah Zoltu

2
@MicahZoltu如果您使用Git bash终端
Greg M

1
对于@scoped软件包,只需在-s命令中添加-R:ls -l -R ./node_modules | grep ^l
Romasato


194

要列出所有全局链接的模块,此方法有效(文档https://docs.npmjs.com/cli/ls):

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

不过,我必须先在计算机上更新npm的版本:

npm install npm@latest -g

15
因是最简单的解决方案并在Windows中工作而受到赞誉。希望我能多次投票赞成。
Artif3x

第一个没有作品--link=true。我的环境:Win10,NVM = 1.1.7,当前节点= 8.14.0
Jeb50

1
并删除其中列出的一个:npm unlink <package> -g
zamnuts,

@ Jeb50很有意义,因为链接的软件包是全局安装的。
卡斯

20

解析的一个更好的替代方法lsfind像这样使用:

find . -type l

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

find . -maxdepth 1 -type l

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

例如,要查找链接到npm的节点模块:

find node_modules -maxdepth 1 -type l -ls

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


这对我很有用,谢谢:)要点: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 被调用
    • listls列出带有版本的模块
      • 替换为ll以获取有关每个列出的模块的详细信息。
    • -g 用于全局模块和
    • --depth 0 浅表(可选)
    • --long false (默认为“列表”)。

问题:出于某种原因,npm目前为我提供了无关的条目(无颜色)。他们就是我“ npm unlink ”版本。

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

npm list -g

对于进一步的需求,您可能需要看看

npm help folders

除非您扫描整个文件系统并且(然后这不是npm特定的问题),否则您不能向后跟随符号链接。

为了快速按名称查找文件和目录,我locate通常在每天一次的索引重建中使用它。

locate '*/node_modules'

并从那里开始工作(您可能希望使用--regexp选项优化搜索。


我使用no -g来获取我的本地/最近瞬态依赖项链接。谢谢!
克罗斯,

4

在我也写了自己的工具后,我发现了这个问题,这里是为了完整性:npm-list-linked

它也会递归地跟踪层次结构中所有链接的程序包,在我的工作中,有时我们可能会npm link深入2-3个级别,这样您就可以准确看到哪些是本地的,哪些不是,避免了意外。

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

2

我制作了一个Node.js模块,用于fs检查由npm link或以其他方式建立的符号链接。

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

var symlinked = require("symlinked")

console.log(symlinked.names())

2
如果您为此添加了一个CLI可执行文件,那将非常好,尤其是考虑到medium.com/@maybekatz/…。需要查找符号链接包的大多数用例来自CLI。
cchamberlain

由于某些原因无法检测到任何链接:(
JacopKane

@cchamberlain您能否指向我以后用来建模API的CLI工具?或者绝对可以向github.com/ryanve/symlinked :) 贡献cli命令
ryanve

@JacopKane您可以在github.com/ryanve/symlinked/issues/new上发布问题并提供详细信息吗?
ryanve '17

1
@ryanve-完成了github.com/ryanve/symlinked/pull/1-我还添加了作用域软件包支持,因为它不起作用。关于简单结构的荣誉!:)
cchamberlain

1

我发现自己和其他人也经常遇到同样的问题。我为自己编写了一个小的CLI,link-status以显示此信息,它也可能对其他人有所帮助!检查它在这里!


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

显示全局链接,包括命名空间包。

@andrew的答案有时会起作用:

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

但在某些情况下对我来说是同级Dep错误。希望能对某人有所帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.