npm init

创建一个 package.json 文件

概要

npm init [--yes|-y|--scope]
npm init <@scope> (same as `npm exec <@scope>/create`)
npm init [<@scope>/]<name> (same as `npm exec [<@scope>/]create-<name>`)
npm init [-w <dir>] [args...]

描述

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

在这种情况下,initializer 是一个名为 create-<initializer> 的 npm 包,它将由 npm-exec 安装,然后执行其主 bin —— 大概是创建或更新 package.json 并运行任何其他与初始化相关的操作。

init命令转化为对应的npm exec操作如下:

  • npm init foo -> npm exec create-foo
  • npm init @usr/foo -> npm exec @usr/create-foo
  • npm init @usr -> npm exec @usr/create

如果初始化器被省略(通过调用 npm init),init 将回退到旧的 init 行为。它会问你一堆问题,然后为你写一个 package.json。它将尝试根据现有字段、依赖项和选择的选项进行合理的猜测。它是严格附加的,因此它将保留已设置的所有字段和值。您也可以使用 -y/--yes 完全跳过问卷。如果您通过 --scope,它将创建一个范围包。

转发附加选项

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

为了更好地说明选项是如何转发的,这里有一个更高级的示例,显示了传递给 npm cli 和 create 包的选项,以下两个命令是等效的:

  • 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
       `-- ...

配置

yes

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

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

force

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

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

  • 允许在全局安装中破坏非 npm 文件。
  • 允许 npm version 命令在不干净的 git 存储库上工作。
  • 允许使用 npm cache clean 删除缓存文件夹。
  • 允许安装具有 engines 声明需要不同版本的 npm 的包。
  • 允许安装具有 engines 声明需要不同版本 node 的包,即使启用了 --engine-strict
  • 允许 npm audit fix 安装超出您声明的依赖范围的模块(包括 SemVer 的主要更改)。
  • 允许取消发布已发布包的所有版本。
  • 允许在根项目中安装冲突的 peerDependencies。
  • npm init 时隐式设置 --yes
  • 允许破坏 npm pkg 中的现有值

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

workspace

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

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

workspace 配置的有效值为:

  • 工作区名称
  • 工作区目录的路径
  • 父工作区目录的路径(将导致选择所有嵌套的工作区)

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

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

workspaces

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

启用在所有已配置工作区的上下文中运行命令。

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