npm-diff

注册表 diff 命令

选择 CLI 版本

概述

npm diff [...<paths>]

描述

类似于它的 git diff 对应部分,此命令将打印发布到 npm 注册表的包的文件的 diff 修补程序。

  • npm diff --diff=<spec-a> --diff=<spec-b>

    使用它们的注册表说明符比较两个包版本,例如:npm diff [email protected] --diff=pkg@^2.0.0。还可以跨任何包的分支进行比较,例如:npm diff [email protected] [email protected]

    可以使用任何有效的规范,因此也可以比较目录或 git 存储库,例如:npm diff --diff=pkg@latest --diff=./packages/pkg

    以下是一个比较名为 abbrev 的包的两个不同版本的示例,这些版本来自注册表

    npm diff --diff=[email protected] --diff=[email protected]

    成功后,输出将如下所示

    diff --git a/package.json b/package.json
    index v1.1.0..v1.1.1 100644
    --- a/package.json
    +++ b/package.json
    @@ -1,6 +1,6 @@
    {
    "name": "abbrev",
    - "version": "1.1.0",
    + "version": "1.1.1",
    "description": "Like ruby's abbrev module, but in js",
    "author": "Isaac Z. Schlueter <[email protected]>",
    "main": "abbrev.js",

    鉴于 npm 规范的灵活性质,您还可以像使用 npm install 一样,定位本地目录或 git 仓库

    npm diff --diff=https://github.com/npm/libnpmdiff --diff=./local-path

    在上面的示例中,我们可以比较从 github.com/npm/libnpmdiff 处的 git 仓库安装的包的内容,以及包含有效包的 ./local-path 的内容,例如原始包的修改副本。

  • npm diff (在包目录中,无参数)

    如果该包发布到注册表,npm diff 将获取标记为 latest 的 tarball 版本(此值可以使用 tag 选项配置),并继续比较该 tarball 中存在的文件内容与您本地文件系统中的当前文件。

    此工作流程为包作者提供了一种方便的方式,让他们可以查看与该包的最新发布版本相比,哪些包跟踪文件已更改。

  • npm diff --diff=<pkg-name> (在包目录中)

    当使用单个包名称(无版本或标签说明符)作为参数时,npm diff 将以类似于 npm-outdated 的方式工作,并访问注册表以确定名为 <pkg-name> 的包的当前发布版本将满足其声明的依赖关系的 semver 范围。一旦确定了该特定版本,npm diff 将打印 diff 修补程序,比较本地文件系统中找到的 <pkg-name> 的当前版本与注册表返回的该特定版本。

    假设有一个名为 abbrev 的包当前已安装

    npm diff --diff=abbrev

    这将从注册表请求其最新版本,如果版本号不同,则将打印比较当前安装版本与该更新版本的 diff 输出。

  • npm diff --diff=<spec-a> (在包目录中)

    与仅使用单个包名称类似,如果您希望将已安装包的本地版本与 <spec-a> 中提供的特定版本/标签/semver 范围进行比较,也可以声明完整的注册表说明符版本。

    示例:假设 [email protected] 安装在当前的 node_modules 文件夹中,运行

    npm diff --diff=[email protected]

    它实际上将是 npm diff [email protected] [email protected] 的别名。

  • npm diff --diff=<semver-a> [--diff=<semver-b>] (在包目录中)

    npm diff 与 semver 有效版本号一起使用,是比较当前包的不同版本的简写方法。

    它需要从包目录中运行,这样对于名为 pkg 的包,运行 npm diff --diff=1.0.0 --diff=1.0.1 等效于运行 npm diff [email protected] [email protected]

    如果仅提供单个参数 <version-a>,则当前本地文件系统将与该版本进行比较。

    以下是一个比较当前项目目录的两个特定版本(发布到已配置的注册表)的示例

    npm diff --diff=1.0.0 --diff=1.1.0

请注意,标签名称不是有效的 --diff 参数值,如果您希望与已发布的标签进行比较,则必须使用 pkg@tagname 语法。

过滤文件

还可以使用文件名或 glob 模式匹配指定位置参数,以便将 diff 修补程序的结果限制为给定包中的一组文件,例如

npm diff --diff=pkg@2 ./lib/ CHANGELOG.md

在上面的示例中,diff 输出将只打印位于 ./lib/ 文件夹中的文件内容,以及 CHANGELOG.md 文件中更改的代码行。

配置

diff

  • 默认
  • 类型:字符串(可以设置多次)

npm diff 中定义要比较的参数。

diff-name-only

  • 默认值:false
  • 类型:布尔值

使用 npm diff 时仅打印文件名。

diff-unified

  • 默认值:3
  • 类型:数字

npm diff 中打印的上下文行数。

diff-ignore-all-space

  • 默认值:false
  • 类型:布尔值

npm diff 中比较行时忽略空白。

diff-no-prefix

  • 默认值:false
  • 类型:布尔值

npm diff 输出中不显示任何源或目标前缀。

注意:这会导致 npm diff 忽略 --diff-src-prefix--diff-dst-prefix 配置。

diff-src-prefix

  • 默认值:"a/"
  • 类型:字符串

npm diff 输出中使用的源前缀。

diff-dst-prefix

  • 默认值:"b/"
  • 类型:字符串

npm diff 输出中使用的目标前缀。

diff-text

  • 默认值:false
  • 类型:布尔值

npm diff 中将所有文件视为文本。

global

  • 默认值:false
  • 类型:布尔值

在“全局”模式下运行,因此包将安装到 prefix 文件夹而不是当前工作目录。有关行为差异的更多信息,请参阅 文件夹

  • 包安装到 {prefix}/lib/node_modules 文件夹中,而不是当前工作目录。
  • bin 文件链接到 {prefix}/bin
  • 手册页链接到 {prefix}/share/man

tag

  • 默认值:"latest"
  • 类型:字符串

如果您要求 npm 安装包并且没有告诉它特定版本,那么它将安装指定的标签。

也是由 npm tag 命令指定的 package@version 添加的标签,如果未给出显式标签。

当由 npm diff 命令使用时,这是用于获取默认情况下将与本地文件比较的 tarball 的标签。

workspace

  • 默认
  • 类型:字符串(可以设置多次)

启用在当前项目的配置工作空间的上下文中运行命令,同时通过仅运行此配置选项定义的工作空间进行筛选。

对于 workspace 配置的有效值为

  • 工作空间名称
  • 工作空间目录的路径
  • 父工作空间目录的路径(将导致选择该文件夹中的所有工作空间)

当为 npm init 命令设置时,这可以设置为尚未存在的工作空间的文件夹,以创建文件夹并将其设置为项目中的全新工作空间。

此值不会导出到子进程的环境中。

workspaces

  • 默认值:null
  • 类型:null 或布尔值

设置为 true 以在 **所有** 配置工作空间的上下文中运行命令。

显式将其设置为 false 将导致诸如 install 之类的命令完全忽略工作空间。当未显式设置时

  • node_modules 树(install、update 等)进行操作的命令将链接工作空间到 node_modules 文件夹中。- 执行其他操作(test、exec、publish 等)的命令将对根项目进行操作,除非workspace 配置中指定了一个或多个工作空间。

此值不会导出到子进程的环境中。

include-workspace-root

  • 默认值:false
  • 类型:布尔值

当为命令启用工作空间时,包括工作空间根目录。

当为 false 时,通过 workspace 配置指定单个工作空间,或通过 workspaces 标志指定所有工作空间,将导致 npm 仅对指定的工作空间进行操作,而不是对根项目进行操作。

此值不会导出到子进程的环境中。

参见