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

cal*_*lum 104 node.js npm

我正在寻找一个命令,列出我有npm link本地副本的全局模块的名称,还列出了本地路径.

实际上,所有全局安装模块的列表会更好,其中npm link'd'会以某种方式标记.

And*_*rew 140

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

npm ls -g --depth=0 --link=true
Run Code Online (Sandbox Code Playgroud)

我必须先在我的机器上更新npm的版本,但是:

npm install npm@latest -g
Run Code Online (Sandbox Code Playgroud)

  • 倾向于成为最简单的解决方案并在Windows中工作.希望我能不止一次地赞成这一点. (11认同)
  • 这应该取代接受的答案,IMO. (7认同)
  • 对于较新的 npm 版本,您可以将其缩短为“npm ls -g --link” (6认同)
  • 并删除列出的一个:`npm unlink <package> -g` (2认同)

msc*_*dex 58

您是否尝试仅列出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.

  • 不适用于本地链接的命名空间模块(@ namespace/moduleName).一个残酷的解决方案可能是:`(ls -l node_modules; ls -l node_modules/@*)| grep ^ l` (15认同)
  • @MicahZoltu 如果您使用 Git bash 终端,它将在 Windows 上运行 (3认同)
  • 此解决方案在Windows上不起作用(也没有任何其他解决方案). (2认同)
  • 对于@scoped 包,只需将 -R 添加到 ls 命令:`ls -l -R ./node_modules | grep^l` (2认同)

Nic*_*rdy 40

从 npm 7 开始,此命令更简单:

npm ls --link --global
Run Code Online (Sandbox Code Playgroud)

感谢安德鲁找到了--link旗帜


Kon*_*zov 20

解析的更好的替代方法ls是使用find如下:

find . -type l
Run Code Online (Sandbox Code Playgroud)

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

find . -maxdepth 1 -type l
Run Code Online (Sandbox Code Playgroud)

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

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

find node_modules -maxdepth 1 -type l -ls
Run Code Online (Sandbox Code Playgroud)

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


Roc*_*oad 11

如果你想要一个漂亮的彩色输出npm list,你可能会喜欢:

\ls -F node_modules | sed -n 's/@$//p' | xargs npm ls -g --depth 0
Run Code Online (Sandbox Code Playgroud)

在我当前的游乐场目录中给出:

+-- 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 
Run Code Online (Sandbox Code Playgroud)

它做了一些假设,但它应该适用于大多数情况,或者很容易适应下面的解释.

  • 用于\ls绕过ls命令的可能别名
  • -F选项为链接添加"@"指示符
  • sed命令选择这些链接并删除指标
  • xargs部分将前一个输出作为参数传递给npm ...
  • npm 被调用
    • listls列出带有版本的模块
      • 替换ll为获取有关每个列出的模块的详细信息.
    • -g 对于全球模块和
    • --depth 0 浅层列表(可选)
    • --long false (默认为'list').

问题:由于某种原因,npm目前为我提供了无关的条目(非彩色).他们将是那些我有" npm unlink "ed的人.

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

npm list -g
Run Code Online (Sandbox Code Playgroud)

如有其他需求,您可以查看

npm help folders
Run Code Online (Sandbox Code Playgroud)

除非您扫描整个文件系统并且(那不是特定于npm的问题),否则您无法向后追踪符号链接.

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

locate '*/node_modules'
Run Code Online (Sandbox Code Playgroud)

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


Bar*_*fen 5

使用

find `npm root -g` -maxdepth 2 -type l
Run Code Online (Sandbox Code Playgroud)

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

安德鲁的回答有时有效:

npm ls -g --depth=0 --link=true
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,它会因对等依赖错误而爆炸。