获取最近更新的包

Getting recently updated packages

用例:

假设有以下package.json:

{
  "version": "0.0.1",
  "private": true,
  "name": "my-app",
  "devDependencies": {
    "connect-modrewrite": "*",
    "csslint": "~0.10.0",
    "eslint": "*",
    ...
}

eslint 维护人员发布了一个新的软件包更新,我的日常构建任务已通过 npm install 安装了其他软件包。突然构建任务失败了。

现在,在研究构建失败的原因时,我想知道是否有依赖包更新可能是每日构建失败的罪魁祸首。

想要result/output:

eslint             0.15.0 02/15/2015
connect-modrewrite 0.2.0  01/15/2015
...

基本上,我需要一个带有版本日期的项目依赖项列表。是否可以使用 npmnpm-check 等第三方工具获取此类元信息?


有一个 Recently updated packages 页面正是我要找的,但是在我的 package.json 依赖项列表的上下文中。


我知道 "avoid surprises" 最佳实践建议为每个依赖项列出准确的版本号并谨慎按需升级包。

npm 目前不存在此功能。您可以在 npm 问题跟踪器 https://github.com/npm/npm/issues

提出功能请求

一种近似的方法是在每次成功的每日构建后执行 npm ls 并将其签入您的源代码管理。然后在失败的日常构建中,您可以报告当前 npm ls 和最后已知良好的差异。

运行 npm outdated CLI 命令 到您的日常更新。这将记录安装前的过期内容。

我将输出通过管道传输到我的存储库中的一个文件并使用 git diff。 我将之前的更新文件和 运行 再次提交到输出文件。任何良好的源代码控制都将以相同的方式工作。

这也有助于跟踪更新提交时的包版本。

您可以使用 view npm command 查询 npm 注册表以获取有关包的信息。您甚至可以传入您感兴趣的 json 字段(看起来 time.modified 会对您的情况有所帮助)。

将它与一些 shell 管道和实用程序结合起来,例如 jq,您将获得所需的东西。

$ npm view --json eslint | jq ".name, .version, .time.modified" | paste -s
"eslint"    "0.17.1"    "2015-03-18T00:31:26.357Z"

像这样的东西会给你每个依赖项的结果(你可能猜想我对 bash 不是很好):

#!/bin/bash

function trimQuotes {
  echo $@ | cut -c 2- | rev | cut -c 2- | rev
}

function deps {
  trimQuotes `cat package.json | jq '.dependencies | keys | join(" ")'`
}

function info {
  npm view --json  | jq '.name, .version, .time.modified' | paste -s
}

function printInfo {
  for word in $@; do
    echo -en "$(trimQuotes $word)\t"
  done;

  echo
}

function main {
  for pkg in $(deps); do
    echo "$(info $pkg)" | while read line; do
      printInfo $line
    done;
  done;
}

main