如何确定旧 npm 包版本的依赖关系

How to determine the dependencies of older npm package versions

在我看来,npm 站点上的依赖关系链接仅适用于 current/latest 版本。

除了下载并检查 package.json 文件之外,是否有一些我不知道的关于如何确定软件包具有哪个依赖版本的信息?

我觉得我正在浪费 HOURS 做一些我希望更容易做的事情。

"It appears to me that the dependency linkage on the npm site is only applicable to the current/latest version."

是的,没错,www.npmjs.com显示最新版本包的依赖项。

这里有几种方法可以以编程方式和非编程方式发现您想要的东西。

以编程方式:

  1. 使用具有以下语法的 npm view 命令;

    npm view <pkg_name> versions --json
    

    获取 npm 注册表中给定包的所有可用版本的列表。

    注意:上面的<pkg_name>部分需要用真实的包名代替。

    例如; 运行让我们说 eslint 包的以下命令:

    npm view eslint versions --json
    

    将以下内容打印到控制台:

    [
      "0.0.4",
      "0.0.5",
      "0.0.6",
      "0.0.7",
      "0.1.0-dev",
      "0.1.0",
      "0.1.1",
      "0.1.2",
      ...
    ]
    
  2. 现在我们知道有哪些版本可用,假设我们想要列出 eslint 版本 0.1.2 依赖项 我们可以运行 以下命令:

    npm show eslint@0.1.2 dependencies --json
    

    这将打印:

    {
      "optimist": "*",
      "estraverse": "~1.3.0",
      "esprima": "*",
      "escope": "1.0.0"
    }
    

    类似地,我们可以通过 运行 改为以下命令来发现 eslint 版本 0.1.2devDependencies

    npm show eslint@0.1.2 devDependencies --json
    

    这将产生如下结果:

    {
      "vows": "~0.7.0",
      "sinon": "*",
      "commonjs-everywhere": "~0.9.0",
      "mocha": "~1.13.0",
      "chai": "~1.8.1",
      "grunt": "~0.4.1",
      ...
    }
    
  3. 如果你事先知道某个包有特定的依赖关系。

    例如;在 运行 执行上述命令后回顾,我们现在知道 eslint 版本 0.1.2 已将 escope 列为依赖项。

    所以,如果我们想知道 eslint 版本 0.1.2 需要的 escope 版本,我们可以 运行 以下命令:

    npm show eslint@0.1.2 dependencies.escope
                                      ^
    

    注:包名后面有点(.),即.escope

    这将打印以下内容:

    1.0.0


非编程方式

当您有可用的 CLI 工具时,我想不出您为什么要执行以下非编程方式而不是上述编程方式的原因。但是,如果您更喜欢手动任务,那么这里是...

注意:YMMV 使用以下手动步骤,因为它取决于包裹的方式managed/maintained。

通常,npm 包的源代码将托管在 GitHub 上,因此您可以执行以下手动步骤。这将避免您必须下载软件包来检查 package.json 文件。

为此,我们将演示 eslint 包:

  1. 访问 npmjs.com 并在 "Search Packages" 输入字段中键入包的名称。我们将键入 eslint 并按下 return 键。

  2. 然后单击包列表中的 eslint,这将带您到 this page

  3. 单击通常出现在网页右侧的 github link,如下所示:

  4. 这会将您带到 eslint 存储库,即 this one

  5. 在 Github 页面上单击 "Branch" 按钮 - 它出现在源代码文件列表上方,看起来像这个:

  6. 在随后出现的弹出面板中点击"Tags"按钮,然后找到然后从列表中单击要发现其依赖项的版本标记。 (注意:这些标签名称通常对应 npm 的版本 released/published)

    这将在浏览器中加载特定 release/version.

  7. 的源代码文件
  8. 从文件列表中找到 package.json 文件并单击它。这将在浏览器中加载 package.json 的内容,您可以在浏览器上阅读它并确定其依赖关系。


可视化依赖树

我有时会使用此在线工具 https://npm.anvaka.com,它可以帮助您可视化给定包的完整依赖关系 tree/graph - 但它仅适用于最新版本的包。

Here 是最新版本的 eslint 的完整依赖项 tree/graph(许多级别深)。