获取最近更新的包
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
...
基本上,我需要一个带有版本日期的项目依赖项列表。是否可以使用 npm
或 npm-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
用例:
假设有以下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
...
基本上,我需要一个带有版本日期的项目依赖项列表。是否可以使用 npm
或 npm-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