描述

中英双语

与其对应的 git diff 类似,此命令将打印发布到 npm 注册表的包的文件差异补丁。

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

    使用它们的注册表说明符比较两个包版本,例如:npm diff --diff=pkg@1.0.0 --diff=pkg@^2.0.0。也可以跨任何包的分叉进行比较,例如:npm diff --diff=pkg@1.0.0 --diff=pkg-fork@1.0.0

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

    这是一个比较注册表中名为 abbrev 的包的两个不同版本的示例:

    npm diff --diff=abbrev@1.1.0 --diff=abbrev@1.1.1
    

    成功后,输出如下所示:

    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 <i@izs.me>",
       "main": "abbrev.js",
    

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

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

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

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

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

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

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

    当使用单个包名(没有版本或标签说明符)作为参数时,npm diff 将以与 npm-outdated 类似的方式工作,并到达注册表以确定名为 <pkg-name> 的包的当前发布版本将满足其依赖声明的 semver -范围。一旦知道该特定版本,npm diff 将打印差异补丁,将在本地文件系统中找到的 <pkg-name> 的当前版本与注册表返回的特定版本进行比较。

    给定当前安装的名为 abbrev 的包:

    npm diff --diff=abbrev
    

    这将向注册表请求其最新版本,如果版本号不同,将打印一个比较当前安装的版本与新版本的差异输出。

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

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

    示例:假设 pkg@1.0.0 安装在当前 node_modules 文件夹中,运行:

    npm diff --diff=pkg@2.0.0
    

    它实际上是 npm diff --diff=pkg@1.0.0 --diff=pkg@2.0.0 的别名。

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

    使用 npm diff 和 semver-valid 版本号是比较当前包的不同版本的简写。

    它需要从一个包目录运行,这样对于一个名为 pkg 的包来说,运行 npm diff --diff=1.0.0 --diff=1.0.1 与运行 npm diff --diff=pkg@1.0.0 --diff=pkg@1.0.1 是一样的。

    如果只提供了一个参数 <version-a>,那么当前本地文件系统将与该版本进行比较。

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

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

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