# npm publish

发布包

# 概要

npm publish <package-spec>

# 描述

将包发布到注册中心,以便可以按名称安装它。

默认情况下,npm 将发布到公共注册中心。可以通过指定不同的注册中心配置或在名称中使用 scope,并结合作用域配置的注册中心(请参阅 package.json)来重写此设置。

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

  • a) 包含 package.json 文件描述的程序的文件夹
  • b) 一个 gzip 压缩包文件,包含 (a)
  • c) 解析为 (b) 的url
  • d) 在注册中心(详见 registry)上发布的 <name>@<version>,带有 (c)
  • e) 指向 (d) 的 <name>@<tag>(详见 npm dist-tag)
  • f) 有 "latest" 标签的 <name> 满足 (e)
  • g) 解析为 (a) 的 <git remote url>

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

一旦包以给定的名称和版本发布,就再也不能使用该特定名称和版本组合,即使它已通过 npm unpublish 删除。

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

类似于 --dry-run 参见 npm pack,它计算出要包含的文件,并将它们打包到一个 tarball 中,以便上传到注册中心。

# 包中包含的文件

要查看包中包含的内容,请运行 npx npm-packlist。默认情况下,所有文件都包括在内,但以下情况除外:

  • 总是包含与包安装和分发相关的某些文件。例如: package.jsonREADME.mdLICENSE 等。
  • 如果 package.json 中有一个 “文件” 列表,那么只会包含指定的文件。(如果指定了目录,那么它们将被递归遍历,并包含它们的内容,遵循相同的忽略规则。)
  • 如果存在 .gitignore.npmignore 文件,则忽略该文件中的文件和所有子目录将从包中排除。如果两个文件都存在,则 .gitignore 将被忽略,只使用 .npmignore
  • .npmignore 文件遵循与 .gitignore 文件相同的模式规则
  • 如果文件匹配某些模式,那么它将永远不会被包含,除非显式地添加到 package.json 中的 “files” 列表中,或者在 .npmignore.gitignore 文件中使用 ! 规则不被忽略。
  • npm 包中从不包含符号链接。

有关发布的包中包括什么内容的完整详细信息,以及如何构建包的详细信息,请参见 developers

# 配置

# tag

  • Default: "latest"
  • Type: String

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

如果没有给出明确的标记,还将添加到 npm tag 命令指定的 package@version 中的标记。

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

# access

  • Default: restricted 用于限定作用域的包, public 用于未限定作用域的包
  • Type: null | restricted | public

发布作用域包时,访问级别默认为 restricted。如果您希望您的作用域包是公开可见的(和可安装的)设置 --access=public。表示 access 的取值只有 publicrestricted。未限定作用域的包总是具有 public 的访问级别。

注意

npm publish 命令中使用 --access 标志只会在初始发布包时设置包访问级别。使用 --access 标志的任何后续 npm publish 命令都不会对访问级别产生影响。要在首次发布后更改访问级别,请使用 npm access

# dry-run

  • Default: false
  • Type: Boolean

表示您不希望 npm 进行任何更改,并且只报告它应该做的事情。这可以传递到任何修改本地安装的命令中,例如:install, update, dedupe, uninstall 以及 pack 和 publish。

注意

其他相关命令不支持此功能,例如 dist-tags, owner 等。

# otp

  • Default: null
  • Type: null or String

这是来自双因素验证器的一次性密码。使用发布或更改包权限时需要使用 npm access

如果没有设置,注册中心响应会失败,并要求输入一次性密码,npm 将在命令行提示输入密码。

# workspace

  • Default:
  • Type: String (可以设置多次)

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

workspace 配置的有效值如下:

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

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

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

# workspaces

  • Default: null
  • Type: null or Boolean

设置为 true 将在所有配置的工作区中运行该命令。

显式地将此设置为 false 将导致如下命令 install 完全忽略工作空间。当没有显式设置时:

  • node_modules 树上操作的命令 (install, update, etc.) 时,将把工作区链接到 node_modules 文件夹中。做其他事情的命令 (test, exec, publish, etc.) 将在根项目上操作,除非在 workspace 配置中指定了一个或多个工作空间。

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

# include-workspace-root

  • Default: false
  • Type: Boolean

当为某个命令启用工作区时,请包含工作区根目录。

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

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

Last Updated: 4/25/2023, 9:49:29 AM