获取最近更新的包

时间:2015-02-26 00:57:55

标签: javascript node.js npm packages

使用案例

想象一下,有以下package.json

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

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

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

期望的结果/输出:

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

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


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


我知道"避免意外"最佳实践建议为每个依赖项列出确切的版本号,并谨慎地按需升级包。

3 个答案:

答案 0 :(得分:2)

您可以使用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 $1 | 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

答案 1 :(得分:1)

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

上发出功能请求

一种近似此方法的方法是在每次成功的每日构建后执行npm ls并将其检入源控件。然后,在每日失败的构建中,您可以报告当前npm ls和最后已知良好之间的差异。

答案 2 :(得分:1)

npm outdated CLI命令之前运行到每日更新。这将保留安装前过时的记录。

enter image description here

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

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