查看npm软件包的确切发布日期

时间:2018-11-05 05:47:24

标签: npm

使用npm 6.x,当我使用npm view [package]命令时,可以看到相对于今天的发布日期,例如:

$ npm view express

express@4.16.4 | MIT | deps: 30 | versions: 261

[... other info about express package ]

published 3 weeks ago by dougwilson <doug@somethingdoug.com>

如何以YYYY-MM-DD HH:mm:ss这样的格式获取确切的发布日期时间?

1 个答案:

答案 0 :(得分:1)

tl; dr -使用下面的“解决方案” 部分中提供的解决方案。


使用npm view,您可以运行以下命令:

$ npm view express time --json

这会将类似以下内容的内容记录到控制台:

  
{
  "modified": "2018-10-31T23:01:06.660Z",
  "created": "2010-12-29T19:38:25.450Z",
  "0.14.0": "2010-12-29T19:38:25.450Z",
  "0.14.1": "2010-12-29T19:38:25.450Z",
  ...
  "4.16.3": "2018-03-12T17:50:14.119Z",
  "4.16.4": "2018-10-11T03:59:14.308Z",
  "5.0.0-alpha.7": "2018-10-27T03:12:11.060Z"
}

如您所见,命令(上方)返回一个包含属性的JSON对象; modifiedcreated,并且还具有每个版本的属性(例如"0.14.0""0.14.1"等)。每个属性的关联值是日期。


如何获取特定版本的发布日期?

npm-view的文档说明如下;

  

您可以通过用句点分隔子字段来查看它们。

因此,要获取modifiedcreated的值(即日期),您可以分别运行以下任一命令:

$ npm view express time.modified

# prints --> `2018-10-31T23:01:06.660Z`

$ npm view express time.created

# prints --> `2010-12-29T19:38:25.450Z`

但是,当获取特定版本属性/键(例如4.16.4)的值/日期时,您将需要使用其他方法,因为以下之类的命令不起作用

# This does not work...
$ npm view express time.4.16.4
# This also does not work...
$ npm view express time.'4.16.4'
# This does not work either...
$ npm view express time["4.16.4"]

解决方案:

以下命令演示了如何成功获取express软件包的版本4.16.4的发布日期:

$ npm view express time --json | node -e "process.stdin.on('data', function(data) {console.log(JSON.parse(data)['4.16.4'])});"

# prints: --> 2018-10-11T03:59:14.308Z

注意:您需要根据需要用适当的版本替换'4.16.4'部分

此解决方案:

  1. 运行npm view express time --json命令并将JSON传递到nodejs脚本。
  2. nodejs脚本利用内置的process.stdinstdin (fd 0)读取管道化的JSON。
  3. 然后我们使用JSON.parse来解析JSON字符串,并获取名为4.16.4的属性/键的值

注意

如果您想要最新版本的发布日期,则可以运行以下两个bash命令:

$ version=$(npm view express version)
$ npm view express time --json | node -e "process.stdin.on('data', function(data) {console.log(JSON.parse(data)['"$version"'])});"

# prints: --> 2018-10-11T03:59:14.308Z

在这里,我们首先运行npm view express version(以获取最新版本号),然后将返回的值分配给名为version的变量(即,我们使用Command Substitution)。然后,我们在节点脚本中引用version值。

您还可以使用&&运算符将两个命令链接起来,形成一个单行命令,如下所示:

$ version=$(npm view express version) && npm view express time --json | node -e "process.stdin.on('data', function(data) {console.log(JSON.parse(data)['"$version"'])});"

# prints: --> 2018-10-11T03:59:14.308Z