npm-init

创建 package.json 文件

选择 CLI 版本

概要

npm init <package-spec> (same as `npx <package-spec>`)
npm init <@scope> (same as `npx <@scope>/create`)
aliases: create, innit

描述

npm init <initializer> 可用于设置新的或现有的 npm 包。

在本例中,initializer 是一个名为 create-<initializer> 的 npm 包,它将由 npm-exec 安装,然后执行其主 bin - 推测地创建或更新 package.json 并运行任何其他与初始化相关的操作。

init 命令将转换为相应的 npm exec 操作,如下所示

如果省略了初始化程序(只需调用 npm init),init 将回退到旧的 init 行为。它会问你一些问题,然后为你编写一个 package.json。它将尝试根据现有字段、依赖项和选择的选项做出合理的猜测。它是严格增量式的,因此它将保留已设置的任何字段和值。您也可以使用 -y/--yes 完全跳过问卷调查。如果您传递 --scope,它将创建一个作用域包。

注意:如果用户已经全局安装了 create-<initializer> 包,那么 npm init 将使用它。如果您希望 npm 使用最新版本或其他特定版本,您必须指定它

转发附加选项

任何其他选项将直接传递给命令,因此 npm init foo -- --hello 将映射到 npm exec -- create-foo --hello

为了更好地说明选项是如何转发的,这里有一个更进阶的示例,显示了传递给 **npm cli** 和创建包的选项,这两个命令都等效

  • npm init foo -y --registry=<url> -- --hello -a
  • npm exec -y --registry=<url> -- create-foo --hello -a

示例

使用 create-react-app 创建一个新的基于 React 的项目

$ npm init react-app ./my-react-app

使用 create-esm 创建一个新的与 esm 兼容的包

$ mkdir my-esm-lib && cd my-esm-lib
$ npm init esm --yes

使用旧的 init 生成一个普通的 package.json

$ mkdir my-npm-pkg && cd my-npm-pkg
$ git init
$ npm init

生成它,但不要让它提出任何问题

$ npm init -y

工作区支持

可以通过使用 workspace 配置选项在项目中创建一个新的工作区。当使用 npm init -w <dir> 时,cli 将创建预期中的文件夹和样板代码,同时还将在您的项目 package.json "workspaces": [] 属性中添加一个引用,以确保新生成的工作区正确设置为工作区。

假设有一个没有工作区的项目,例如

.
+-- package.json

您可以使用旧的 init 生成一个新的工作区

$ npm init -w packages/a

这将生成一个新的文件夹和 package.json 文件,同时还更新您的顶层 package.json 以添加对这个新工作区的引用

.
+-- package.json
`-- packages
`-- a
`-- package.json

工作区 init 也支持 npm init <initializer> -w <dir> 语法,遵循本页开头 **描述** 部分中解释的相同规则集。与之前使用 create-react-app 创建一个新的基于 React 的项目的示例类似,以下语法将确保将新的 react 应用程序创建为项目内的嵌套工作区,并将您的 package.json 配置为识别它。

npm init -w packages/my-react-app react-app .

这将确保按预期生成您的 React 应用程序,需要牢记的一点是 npm exec 将在为该工作区新创建的文件夹的上下文中运行,这就是为什么在本例中,初始化程序使用初始化程序名称后跟一个点来表示该上下文中当前目录的原因,例如:react-app .

.
+-- package.json
`-- packages
+-- a
| `-- package.json
`-- my-react-app
+-- README
+-- package.json
`-- ...

配置

init-author-name

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

默认情况下,npm init 应该使用的包作者姓名。

init-author-url

  • 默认:""
  • 类型:"" 或 URL

默认情况下,npm init 应该使用的包作者主页。

init-license

  • 默认: "ISC"
  • 类型:字符串

默认情况下,npm init 应该使用的包许可证。

init-module

  • 默认: "~/.npm-init.js"
  • 类型:路径

将由 npm init 命令加载的模块。有关更多信息,请参阅 init-package-json 模块的文档,或 npm init

init-version

  • 默认: "1.0.0"
  • 类型:SemVer 字符串

如果包.json 中尚未设置,则 npm init 默认情况下应该使用的包版本号。

yes

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

自动对 npm 可能会在命令行中打印的任何提示回答 "yes"。

force

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

删除各种针对不幸的副作用、常见错误、不必要的性能下降和恶意输入的保护措施。

  • 允许在全局安装中覆盖非 npm 文件。
  • 允许 npm version 命令在未清理的 git 存储库上运行。
  • 允许使用 npm cache clean 删除缓存文件夹。
  • 允许安装具有 engines 声明(要求不同版本的 npm)的包。
  • 允许安装具有 engines 声明(要求不同版本的 node)的包,即使启用了 --engine-strict
  • 允许 npm audit fix 安装超出您声明的依赖项范围(包括 SemVer-major 更改)的模块。
  • 允许取消发布已发布包的所有版本。
  • 允许在根项目中安装冲突的 peerDependencies。
  • npm init 期间隐式设置 --yes
  • 允许覆盖 npm pkg 中的现有值
  • 允许取消发布整个包(不仅仅是单个版本)。

如果您对要做什么没有明确的想法,强烈建议您不要使用此选项!

scope

  • 默认:当前项目的范围(如果有),或 ""
  • 类型:字符串

将操作与作用域关联以用于作用域注册表。

在登录或注销私有注册表时很有用

# log in, linking the scope to the custom registry
npm login --scope=@mycorp --registry=https://registry.mycorp.com
# log out, removing the link and the auth token
npm logout --scope=@mycorp

这将导致 @mycorp 被映射到注册表以供将来安装根据 @mycorp/package 模式指定的包。

这也会导致 npm init 创建一个作用域包。

# accept all defaults, and create a package named "@foo/whatever",
# instead of just named "whatever"
npm init --scope=@foo --yes

workspace

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

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

workspace 配置的有效值为

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

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

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

workspaces

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

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

明确将其设置为 false 将导致像 install 这样的命令完全忽略工作区。当未明确设置时

  • node_modules 树进行操作的命令(安装、更新等)将链接工作区到 node_modules 文件夹中。 - 执行其他操作(测试、执行、发布等)的命令将在根项目上运行, *除非* 在 workspace 配置中指定了一个或多个工作区。

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

workspaces-update

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

如果设置为 true,npm cli 将在可能更改安装到 node_modules 文件夹中的工作区的操作后运行更新。

include-workspace-root

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

在为命令启用工作区时,包括工作区根目录。

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

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

另请参阅