dfx build

使用 dfx build 命令将您的程序编译成可以部署在 Internet Computer 上的 WebAssembly 模块。 您可以使用此命令编译在项目的`dfx.json` 配置文件或特定容器中为项目定义的所有程序。

请注意,您只能从项目目录结构中运行此命令。 例如,如果您的项目名称是 hello_world,那么您当前的工作目录必须是 hello_world 顶级项目目录或其子目录之一。

dfx build 命令使用您在 dfx.json 配置文件的 canisters 部分下配置的信息查找要编译的源代码。

基本用法

dfx build [flag] [option] [--all | canister_name]

标志

您可以在 dfx build 命令中使用以下可选标志。

标志 说明

--check

使用临时的、硬编码的、本地定义的容器标识符构建容器,以测试您的程序在不连接到 Internet Computer platform 的情况下编译。

-h, --help

显示帮助信息。

-V, --version

显示版本信息。

选项

您可以为 dfx build 命令指定以下选项。

选项 说明

--network <network>

指定要连接的网络别名或 URL。 您可以使用此选项覆盖在 dfx.json 配置文件中指定的网络。

参数

您可以为 dfx build 命令指定以下参数。

参数 描述

--all

构建项目的 dfx.json 文件中配置的所有容器。

canister_name

指定要构建的容器的名称。 如果您没有使用 --all 选项,您可以继续使用 dfx build 或提供容器名称作为参数(容器名称必须匹配项目 dfx.json 配置文件中 canisters 字段中配置的名字)

例子

您可以使用 dfx build 命令从 canisters 键下的 dfx.json 配置文件中指定的程序构建一个或多个 WebAssembly 模块。 例如,如果你的 dfx.json 配置文件定义了一个 hello_world 容器和一个 hello_world_assets 容器,那么运行 dfx build 会编译两个 WebAssembly 模块:

{
  "canisters": {
    "hello_world": {
      "main": "src/hello_world/main.mo",
      "type": "motoko"
    },
    "hello_world_assets": {
      "dependencies": [
        "hello_world"
      ],
      "frontend": {
        "entrypoint": "src/hello_world_assets/public/index.js"
      },
      "source": [
        "src/hello_world_assets/assets",
        "dist/hello_world_assets/"
      ],
      "type": "assets"
    }
  },
  "defaults": {
    "build": {
      "packtool": ""
    }
  },

  "dfx": "0.9.2",
  "networks": {
    "local": {
      "bind": "127.0.0.1:8000",
      "type": "ephemeral"
    },
    "ic": {
      "providers": [
        "https://gw.dfinity.network"
      ],
      "type": "persistent"
    }
  },
  "version": 1
}

请注意,文件系统上程序的文件名和路径必须与 dfx.json 配置文件中指定的信息匹配。

在此示例中,hello_world 容器包含主程序代码,hello_world_assets 容器存储前端代码和资产。 如果要保留 dfx.json 文件中定义的 hello_world_assets 容器,但只构建后端程序,可以运行以下命令:

dfx build hello_world

当您在 dfx.json 文件中定义了多个容器,但想要独立测试和调试容器的操作时,构建特定容器非常有用。

要测试容器是否在不连接到 Internet Computer platform 或本地容器执行环境的情况下编译,您将运行以下命令:

dfx build --check