我认为在当前项目中有一个显示当前链接包(使用yarn link [package]
)的命令会很有用。
类似于global
东西怎么样?
Usage: yarn link [add|ls|remove] [flags]
纱线链接 [add|ls|remove] [flags]
是的,我认为这将是非常明确和好的。
关于这一点的任何运动或解决方法?
我找到了这个解决方法: ls -l node_modules | grep ^l
@tnrich不错的解决方案,是否有更通用的支持命名空间的解决方案? 例如node_modules/@myCompany
@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 .bin
和find ~/.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
)
快速修复是将递归标志R
到ls
命令。 由于我在相对较小的依赖项列表中进行了测试,因此无法说明性能:
ls -lR node_modules | grep ^l
这是我在项目中列出当前链接的包的操作:
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 :
听起来好像没有人反对将这个功能添加到纱线中,它只需要有人来完成。 要求:
能够列出已链接到 CURRENT 项目的包。 换句话说,递归检查node_modules
文件夹中是否有指向外部(本地)包的符号链接。
能够取消链接到当前项目的所有包。
能力已在全球链接注册目录登记表包( $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。 我对纱线内部结构一点也不熟悉,但如果成功,我会在提交时链接回这个问题。
最有用的评论
类似于
global
东西怎么样?Usage: yarn link [add|ls|remove] [flags]