---
sidebar_position: 5
---

```bash
Usage: modern build [options]

build application

Options:
  --analyze   分析构建产物体积，查看各个模块打包后的大小
  -h, --help  display help for command
```

`modern build` 命令默认会在 `/dist` 目录下构建出可用于生产环境的产物。

可以通过修改配置 [`output.path`](/docs/apis/config/output/path) 指定产物的输出目录。

## 分析构建产物体积

执行 `modern build --analyze` 命令，可以在打包生产环境代码的同时，产出一个分析构建产物体积的 HTML 文件：

```
Bundle Analyzer saved report to /example/dist/report.html
File sizes after production build:

  122.35 KB  dist/static/js/885.1d4fbe5a.js
  2.3 KB     dist/static/js/main.4b8e8d64.js
  761 B      dist/static/js/runtime-main.edb7cf35.js
  645 B      dist/static/css/main.0dd3ecc1.css
```

手动在浏览器中打开上述 HTML 文件，可以看到打包产物瓦片图，并进行包体积分析和优化：

<img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/mwa-build-analyze-8784f762c1ab0cb20935829d5f912c4c.png" />

> 该功能基于 [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) 实现。

## 命令行参数

import CommandTip from '@site/docs/components/command-tip.md'

<CommandTip />

## Electron 应用

Modern.js 提供了基于 Electron 的桌面应用开发模式。

可以在项目创建时选择:

```bash
? 是否需要支持以下类型应用 Electron
```

也可在项目执行 `new` 命令启用「Electron」模式：

```bash
$ npx modern new
? 请选择你想要的操作 启用可选功能
? 启用可选功能 启用「Electron」模式
```

### build electron-web

```bash
Usage: modern build electron-web [options]

build electron renderer with node environment

Options:
  -h, --help  display help for command
```

窗口中开启 Node 时构建渲染进程。

#### 示例

```json
{
  "scripts": {
    "build:render": "modern build electron-web",
  }
}
```

在 Electron 中，项目下执行：`build:render` 命令，构建渲染进程（窗口中启用 Node）。

:::info 补充信息
关于窗口中【[开启 Node](/docs/guides/features/electron/develop#窗口中开启-node)】。
:::


### build electron-main

```bash
Usage: modern build electron-main [options]

build electron main process

Options:
  -d, --development       build with NODE_ENV=development
  -m, --main <main>       specify the entrance folder path of main process, such as: electron/
  -i, --ignore <ignore>   ignore folder or file
  -e, --extra <extra...>  specify extra folders to compile
  -en, --enableNode       enable use node in electron render
  -h, --help              display help for command
```

构建主进程。

#### 示例 - 普通构建

```json
{
  "scripts": {
    "build:main": "modern build electron-main",
  }
}
```

在 Electron 中，项目下执行：`build:main` 命令，构建主进程。

#### 示例 - 指定主进程目录

打包的时候，我们也可以通过 `--main` 指定我们的主进程目录。

```json
{
  "scripts": {
    "build:main": "modern build electron-main --main ./electron",
  }
}
```

#### 示例 - 指定其他编译目录
打包的时候，我们在主进程里引用了其他目录，则可以如下进行构建：

比如： 主进程使用了 shared 目录。

```bash

{
  "scripts": {
    "build:main": "modern build electron-main --extra ./shared",
  }
}
```

:::tip
由于主进程目前采用的是 babel 构建，维持主进程目录结构。因此，在构建起他目录的时候，需要通过 --extra 进行额外的指定。
:::

> 详细示例：[主进程构建](/docs/guides/features/electron/extra/compile-extra)

#### 示例 - 忽略不需要编译的文件
我们可以通过指定 “--ignore” 忽略不需要编译的文件。

```json
{
  "scripts": {
    "build:main": "modern build electron-main --ignore electron/xx.ts,electron/xxx.ts",
  }
}
```

:::info 补充信息
"--ignore" 也可以填写文件夹，多个可以逗号隔开。
:::

### build electron-app

```bash
Usage: modern build electron-app [options]

build electron app

Options:
  -h, --help  display help for command
```

打包应用。

#### 示例

```json
{
  "scripts": {
    "build:app": "modern build electron-app",
  }
}
```
在构建完成主进程、渲染进程之后，执行此命令，打包成可执行文件与安装程序。

:::info 补充信息
- 其中，可在执行打包时传入环境变量 `PLATFORM` 指定构建的操作系统。
- `PLATFORM` 可为 `mac`、`win32`、`win64`、`linux`、`linuxArm64` 其中一个。
:::

### build electron

```bash
Usage: modern build electron [options]

build electron all: render process、main process and electron app

Options:
  -d, --development       build with NODE_ENV=development
  -m, --main <main>       specify the entrance folder path of main process, such as: electron/
  -i, --ignore <ignore>   ignore folder or file
  -e, --extra <extra...>  specify extra folders to compile
  -en, --enableNode       enable use node in electron render
  -h, --help              display help for command

一行命令构建：渲染进程、主进程、应用。

```json
{
  "scripts": {
    "build:all": "modern build electron",
  }
}
```
通过上述命令，会顺序构建渲染进程、主进程，打包应用。

:::info 补充信息
- 其中，可在执行打包时传入环境变量 `PLATFORM` 指定构建的操作系统。
- `PLATFORM` 可为 `mac`、`win32`、`win64`、`linux`、`linuxArm64` 其中一个。
:::

#### 示例 -【DEBUG 模式】构建

有时候我们期望打一些 DEBUG 包，其中的 js 没有被混淆压缩，我们可以这样：

```json
{
  "scripts": {
    "build:all": "modern build electron --development",
  }
}
```

#### 示例-指定主进程目录

打包的时候，我们也可以指定我们的主进程目录。

```json
{
  "scripts": {
    "build:all": "modern build electron --main ./electron",
  }
}
```

#### 示例 - 启用 Node 构建渲染进程

```json
{
  "scripts": {
    "build:all": "modern build electron --enableNode",
  }
}
```

#### 示例-忽略不需要编译的文件

我们可以通过指定 “--ignore” 忽略不需要编译的文件。

```json
{
  "scripts": {
    "build:all": "modern build electron --ignore electron/xx.ts,electron/xxx.ts",
  }
}
```

:::info 补充信息
"--ignore" 也可以填写文件夹，多个可以逗号隔开。
:::
