Yarn: 添加命令以显示链接的包

创建于 2016-11-07  ·  50评论  ·  资料来源: yarnpkg/yarn

我认为在当前项目中有一个显示当前链接包(使用yarn link [package] )的命令会很有用。

cat-feature

最有用的评论

类似于global东西怎么样?

Usage: yarn link [add|ls|remove] [flags]

所有50条评论

类似于global东西怎么样?

Usage: yarn link [add|ls|remove] [flags]

纱线链接 [add|ls|remove] [flags]

是的,我认为这将是非常明确和好的。

关于这一点的任何运动或解决方法?

我找到了这个解决方法: ls -l node_modules | grep ^l

@tnrich不错的解决方案,是否有更通用的支持命名空间的解决方案? 例如node_modules/@myCompany

@bingzheyuan你可以试试

( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l

(从这个SO问题复制)

@jlegrone 已检查,效果很好,非常感谢

这个功能还在考虑中吗? @小猫

+1。 将此作为内置脚本会很好,但现在我有一个独立的脚本供我使用:

find node_modules node_modules/\@* -depth 1 -type l -print | while read MODULE ; do
    echo "Linked module in use: $MODULE"
done

这在 Windows 上特别有用,因为您确实希望 yarn 在该平台上调试符号链接时告诉您它认为链接到的内容。

刚刚搜索了一下,看看是否存在...

比这里的评论提供解决方法的情况(至少对我而言)更重要的是能够知道哪些纱线链接是 _available_ —— 也就是说,我在哪些目录中运行了yarn link ,等等包名和包含这些包的目录之间存在关联。

有人可能认为~/.yarn-config/link目录将包含相关信息——但它是空的。

@MikeTaylor我认为您正在寻找~/.config/yarn/link

我曾是_! 非常感谢!

(这确实让我想知道为什么我的主目录中有.yarn.yarn-cache.yarn-config.yarnrc _and_ .config/yarn ,但是让它过去。)

找不到那个配置

PS C:\Users\me> ls ~/.config


    Directory: C:\Users\me\.config


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018-03-29   5:59 PM                configstore

PS C:\Users\me> ls ~/.yarn-config
ls : Cannot find path 'C:\Users\me\.yarn-config' because it does not exist.

我找到的唯一文件是 ~/.yarnrc

@retog如果您使用的是 Windows,它看起来您要查找的目录是: C:\Users\<userName>\AppData\Local\Yarn\config\link

谢谢@TomGault ,链接在那里。

希望可以在全球和本地拥有这个哈哈

这将极大地帮助进行跨仓库集成时的调试!
(我目前发现自己的情况)

使用像yarn link ls这样的命令来查看所有链接确实会很好,尤其是当您不记得链接是从哪里创建的,因此您可以将其删除。

同时,对于 macOS/Linux,这应该有效:

ls -la ~/.config/yarn/link/

我为此做了一个愚蠢的方法,可以显示当前项目链接列表

https://www.npmjs.com/package/yarn-list-link

$ npx yarn-list-link
@node-novel\pattern-split
cjk-conv
lazy-cacache
regexp-cjk
uni-string

在我运行 Windows 10 的 PC 上,纱线链接在这里:
~\AppData\Local\Yarn\Data\link\

任何更新 ?

find node_modules -type l | grep -v .binfind ~/.config/yarn/link -type l分别有助于查找链接和可链接模块。

为了补充@hubgit帖子,我相信以下内容适用于使用 PowerShell 的 Windows:
Get-ChildItem '.\node_modules\.bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

如果提供,这将非常有帮助。 是否有任何进展?

+1

+1

或者,实施#710。

如果我正在运行yarn link并且已经有一个以相同名称注册的包,为什么 yarn 不能打印出已经链接的包的路径? 此外,通过取消链接另一个包并链接当前包(可能带有-f标志),yarn 可以更智能。

+1

+1

在 Windows 上, dir %LOCALAPPDATA%\yarn\data\link无需知道您的用户名或其他内容即可工作。

+1

# yarn link list
yll () {
    current=$PWD
    for link in $(find $HOME/.config/yarn/link -type l)
    do
        cd $link"/../"$(readlink $link)
        echo $link $'\n==>' $PWD
    done
    cd $current
}

# yarn unlink [package]
yul () {
    current=$PWD
  link=$(find $HOME/.config/yarn/link -type l | grep $1$)
    cd $link"/../"$(readlink $link)
    yarn unlink
    cd $current
}

@torifat自从这个问题被打开并被标记为新功能(猫功能?)2 年半以来,我们没有收到纱线团队的消息。 这有什么动静吗? :)

这帮助我在我的项目中找到了链接的包:

ls -l node_modules | grep ^l

https://stackoverflow.com/questions/24933955/easy-way-to-list-node-modules-i-have-npm-linked

ls -l node_modules | grep ^l的问题在于它不会显示链接的 _scoped_ 包(@ 目录下的子目录,如@types
快速修复是将递归标志Rls命令。 由于我在相对较小的依赖项列表中进行了测试,因此无法说明性能:

ls -lR node_modules | grep ^l

这是我在项目中列出当前链接的包的操作:

编辑:不兼容 OSX

yllc() {
  find -L node_modules -maxdepth 3 -type d -xtype l | xargs -I{} sh -c "echo {} '->' $(realpath {})"
}

结果是:

node_modules/@somname/somepkg -> /home/user/repos/somename-somepkg

这是我查找可以链接的包的方法,其中包括作用域包:

yll () {
  linkDir=~/.config/yarn/link
  find $linkDir -maxdepth 2 -type l | xargs realpath -s --relative-to $linkDir
}

结果是:

@somename/foo
@othername/bar
somepkg
otherpkg

然后我可以像这样使用fzf

yarn link $(yll | fzf -m)

我经常使用这些,我把它们变成了 bash 别名:

alias yarn-linked="find . -type l | grep -v .bin | sed 's/^\.\/node_modules\///'"
alias yarn-unlink-all="yarn-linked | xargs yarn unlink && yarn install --check-files"

由于我们正在发布解决方案,而且它们在这里看起来都很复杂,让我帮助大家:

alias yarn-linked="find node_modules -type l -maxdepth 3 | grep -v .bin | cut -f2 -d/"

十分简单。
编辑:虽然看起来我真的很喜欢@Bkucera解决方案! :拍:
编辑:我的解决方案也很复杂! 该死的,巨魔失败了!
编辑: @Bkucera ,您的解决方案与 MacOS 不兼容 :cry:

纱线或 npm 的人可以调查一下吗? 显然有很大的需求,请<3

+1

yll () {
  linkDir=~/.config/yarn/link
  find $linkDir -maxdepth 2 -type l | xargs realpath -s --relative-to $linkDir
}

这就像一个魅力。 感谢分享!

对我有用的解决方案是:

  • 转到~/.config/yarn/link文件夹
  • 删除要取消链接的模块

我认为一个好的解决方法是将这些说明添加到消息中

在项目中使用yarn 1.x ,最终添加了几个别名:

$ alias | grep yarn
yarn-linked='find -L $(find node_modules -type l) -type d -prune'
yarn-links='(cd $HOME/.config/yarn/link && find . -type l | cut -c 3-)'

它对我不起作用。 我没有文件夹~/.config/yarn/link ,我只有一个空的全局文件夹。
我使用 Manjaro linux,如果有帮助的话..

这还考虑吗?

我最终制作了一个 Yarn 包装器,它添加了这个功能,并在 TypeScript 项目中自动安装了@types包: https :

听起来好像没有人反对将这个功能添加到纱线中,它只需要有人来完成。 要求:

  1. 能够列出已链接到 CURRENT 项目的包。 换句话说,递归检查node_modules文件夹中是否有指向外部(本地)包的符号链接。

  2. 能够取消链接到当前项目的所有包。

  3. 能力已在全球链接注册目录登记表包( $HOME/.config/yarn/link * nix上, %LOCALAPPDATA%\yarn\data\link在Windows上)

由于yarn link [add|ls|remove] (较早的建议之一)并非严格向后兼容,我建议: yarn link --list 。 这个标志应该创建一个包含 (1) 和 (3) 的列表。

此外,我建议将yarn unlink --all作为完成 (2) 的一种方式。

我正在做 PR。 我对纱线内部结构一点也不熟悉,但如果成功,我会在提交时链接回这个问题。

此页面是否有帮助?
0 / 5 - 0 等级