npm-publish

发布包

选择 CLI 版本

概要

npm publish <package-spec>

描述

将包发布到注册表,以便可以通过名称安装。

默认情况下,npm 会发布到公共注册表。可以通过指定不同的默认注册表或在名称中使用 scope(结合已配置范围的注册表,参见 package.json)来覆盖此行为。

package 的解释方式与其他命令(如 npm install)相同,可以是:

  • a) 包含由 package.json 文件描述的程序的文件夹
  • b) 包含 (a) 的压缩 tar 包
  • c) 解析为 (b) 的 URL
  • d) 发布到注册表(参见 registry)的 <name>@<version>,具有 (c)
  • e) 指向 (d) 的 <name>@<tag>(参见 npm dist-tag
  • f) 具有满足 (e) 的 "latest" 标签的 <name>
  • g) 解析为 (a) 的 <git remote url>

如果包名称和版本组合已存在于指定的注册表中,则发布将失败。

一旦包以给定的名称和版本发布,该特定名称和版本组合将永远无法再次使用,即使使用 npm unpublish 移除它也是如此。

npm@5 开始,在发布期间,sha1sum 和具有 tar 包 sha512sum 的完整性字段都将提交到注册表。后续安装将使用支持的最强算法来验证下载内容。

类似于 --dry-run,参见 npm pack,它会找出要包含的文件并将其打包成 tar 包,以便上传到注册表。

包中包含的文件

要查看包中将包含的内容,请运行 npm pack --dry-run。默认情况下,所有文件都会被包含,以下情况除外:

  • 与包安装和分发相关的某些文件始终会被包含。例如,package.jsonREADME.mdLICENSE 等。

  • 如果 package.json 中存在 "files" 列表,则仅包含指定的文件。(如果指定了目录,则会递归遍历它们并包含其内容,但需遵守相同的忽略规则。)

  • 如果存在 .gitignore.npmignore 文件,则该文件及其所有子目录中的忽略文件将被排除在包之外。如果两个文件都存在,则会忽略 .gitignore,仅使用 .npmignore

    .npmignore 文件遵循与 .gitignore 文件相同的模式规则

  • 如果文件与某些模式匹配,则该文件永远不会被包含,除非显式添加到 package.json 中的 "files" 列表中,或者使用 .npmignore.gitignore 文件中的 ! 规则取消忽略。

  • 符号链接永远不会包含在 npm 包中。

参见 developers,了解有关发布的包中包含的内容的详细信息,以及有关包构建方式的详细信息。

配置

tag

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

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

如果未指定显式标签,则还将添加由 npm tag 命令指定的包@版本标签。

npm diff 命令使用此标签来获取 tar 包,默认情况下,tar 包将与本地文件进行比较。

access

  • 默认值:对于新包为 'public',对于现有包,它不会更改当前级别
  • 类型:null、"restricted" 或 "public"

如果你不希望你的作用域包公开可见(且可安装),请设置 --access=restricted

无作用域的包无法设置为 restricted

注意:这默认情况下不会更改现有包的当前访问级别。在发布时指定 restrictedpublic 值将更改现有包的访问权限,方式与 npm access set status 相同。

dry-run

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

指示您不希望 npm 进行任何更改,并且它应该只报告它原本会执行的操作。这可以传递给任何修改您本地安装的命令,例如,installupdatededupeuninstall,以及 packpublish

注意:其他网络相关命令(例如 dist-tagsowner 等)不会遵守此设置。

otp

  • 默认值:null
  • 类型:null 或字符串

这是来自双重身份验证的一次性密码。在使用 npm access 发布或更改包权限时需要此密码。

如果未设置此密码,并且注册表响应因一次性密码挑战而失败,npm 将在命令行中提示输入一次性密码。

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 仅对指定的工作区进行操作,而不对根项目进行操作。

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

provenance

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

从支持的云 CI/CD 系统发布时,软件包将公开链接到构建和发布它的位置。

此配置不能与:provenance-file 一起使用。

provenance-file

  • 默认值:null
  • 类型:路径

发布时,将使用给定路径处的来源包。

此配置不能与:provenance 一起使用。

参见