我知道
npm outdated
存在,它列出了过时的依赖项,但仅限于发布新版本的情况。
但在某些情况下(例如废弃的项目),可能没有发布新版本,并且包可能仍被认为是过时。
有没有办法找到在较长时间内未更改(没有新版本)的依赖项 - 具体来说,找到所有在 2 年内没有发布新版本的软件包?
背后的原因是,非常旧的依赖项可能已经过时并且与最新的 Node.js/TypeScript 或其他链接依赖项不完全兼容,因此存在很高的风险。这些依赖项仍然需要手动审查,但拥有此列表会很有帮助。
搜索主要与
npm
包管理器兼容的解决方案。但如果它也能与yarn
一起使用那就太好了。
一个有趣的黑客可能是检查每个依赖项的已解析 URL 的
last-modified
标头。
试试这个
for dep in $(npm ls --json | jq -r '.dependencies | .[].resolved'); do
when="$(curl -sI $dep | grep -i last-modified: | sed 's/[^:]*..//' | tr -d '\r')";
echo "$(date --date="$when" -I): $dep"
done
它可能会打印类似的内容
2022-08-04: https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz
2022-09-04: https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz
2021-10-18: https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz
2022-06-14: https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz
2022-11-01: https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.3.tgz
2022-04-12: https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz
2022-06-14: https://registry.npmjs.org/react/-/react-18.2.0.tgz
2022-01-21: https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz
如果您也对依赖项的依赖项感兴趣,您可以将上面示例中的
npm ls --json
替换为 cat package-lock.json
。