使用案例
想象一下,有以下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
依赖列表的上下文中。
我知道"避免意外"最佳实践建议为每个依赖项列出确切的版本号,并谨慎地按需升级包。
答案 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命令之前运行到每日更新。这将保留安装前过时的记录。
我将输出管道传输到我的存储库中的文件并使用git diff
。
我提交了更新前的文件并再次运行到输出文件。任何好的源代码控制都会以同样的方式工作。
这也有助于跟踪更新提交的软件包版本。