---
sidebar_position: 2
---

# 创建子项目

本章将要介绍如何在 Monorepo 工程下创建子项目。

> Modern.js 支持使用 pnpm 和 Yarn 的 Monorepo，这里以使用 pnpm 为例。以下命令可以以同样方式使用 Yarn 来执行。

Modern.js 针对 Monorepo 工程提供了生成器功能，它用于在 Monorepo 工程下创建不同类型的 Monorepo 子项目。在生成器中提供以下类型子项目的创建：

- 「应用」类型
- 「模块」类型

要启动 Monorepo 的生成器功能，可以在 Monorepo 工程根目录下执行命令：

```
pnpm run new
```

:::info 补充信息
使用 Yarn 的方式：`yarn new`

:::

执行成功后，可以看到如下内容：

```
? 请选择你想创建的工程类型 (Use arrow keys)
❯ Web 应用
  Web 应用（测试）
  Npm 模块
  Npm 模块（内部）
```

:::info
「应用」与「应用（测试）」都是「应用」类型的项目，区别是「应用」类型的子项目会创建在 `./apps` 目录下，而 「应用（测试）」类型的子项目会创建在 `./examples` 目录下。

:::

:::info
「模块」与「模块（内部）」都是「模块」类型的项目，区别之一是「模块」类型的子项目会创建在 `./packages` 目录下，而「模块（内部）」类型的子项目会创建在 `./features` 目录下。

对于「模块」类型的子项目允许被发布到外部（例如 npm)，而对于「模块（内部）」的子项目则可以在应用项目中直接使用其源码（该特性是「模块」项目不具备的，应用项目对于「模块（内部）」子项目做了特殊处理），因此这类子项目不需要发布到外部。

:::

然后根据不同的需求选择对应的类型项目选项，选择之后便开始出现对应子项目类型的问题和选项。例如选择「应用」后会出现：

```
? 请选择你想创建的工程类型：Web应用
? 请填写子项目名称
```

当完成所有生成器问题之后，便开始进行项目的创建和项目依赖的下载。当创建成功之后，可以看到类似以下内容：

```
[INFO] 依赖自动安装成功
[INFO] 创建成功！
可在新项目的目录下运行以下命令：
pnpm run dev          # 启动开发服务器
pnpm run build        # 构建生产环境产物
pnpm run serve        # 启动生产环境服务
pnpm run lint         # 运行 ESLint 并自动修复问题
pnpm run new          # 启用可选功能或创建项目要素
```
