我如何知道哪个包阻止了另一个包的更新?

How can I tell which package is preventing another package from being updated?

$ meteor list
foo 0.9*
...
$ meteor update foo
Your packages are at their latest compatible versions.

如何判断哪个包具有阻止 foo 更新的依赖项?

一个小脚本无所不能:

meteor list | grep ^[a-z] | tr -s ' ' | cut -d ' ' -f1,2 | tr -d '\*\+' | tr ':' '_' \
| while read X Y; do \
     cat ~/.meteor/packages/$X/$Y/web.browser.json \
     | xargs -0 node -e "X = JSON.parse(process.argv[1]); \
           X.uses.forEach(function(d) { \
               console.log(\"$X\", \"$Y\", d.package, d.constraint); \
           })"; \
  done | sort

这将查找您使用的所有包及其版本,然后进入包存储以检查依赖项。在这种形式中,它只是列出了他们按依赖排序,所以例如你可能会看到:

ryw_blog 0.5.7 iron:router 0.9.1

这意味着您正在使用 ryw_blog 版本 0.5.7,它需要 iron:router 版本 0.9.1。

如果您真的只想检查 foo,只需在排序后添加一个 | grep foo

当然,这是假设您没有使用 windows。我在 osx 上对此进行了测试,但 linux 也应该有效。

PS:这似乎很有用,所以我从中创建了一个要点:https://gist.github.com/chfritz/63dbf792d22563e5d0c0