【问题标题】:Getting recently updated packages获取最近更新的包
【发布时间】:2015-04-28 06:03:45
【问题描述】:

用例:

假设有以下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
...

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


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


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

【问题讨论】:

    标签: javascript node.js npm packages


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      npm 中当前不存在此功能。您可以在npm 问题跟踪器https://github.com/npm/npm/issues 提出功能请求

      一种近似的方法是在每次成功的每日构建后执行npm ls,并将其检查到您的源代码管理中。然后,在每日构建失败时,您可以报告当前 npm ls 和 last-known-good 之间的差异。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 这其实是个好主意,谢谢! (而且绝对不值得投反对票)。
        • 是的,奇怪的是,我们两个都没有得到标记为已接受的答案。需要研究的东西。
        • 是的,尽管在我将答案标记为正确并授予赏金之前应用了反对票。无论如何,发生这种情况,我感谢您的时间和精力。再次感谢!
        • 它发生了。人们总是错误地使用downvotes。感谢您的评论。
        猜你喜欢
        • 1970-01-01
        • 2018-08-02
        • 2012-09-04
        • 1970-01-01
        • 1970-01-01
        • 2020-08-04
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多