菜单

项目初始化

相关源文件

本文档解释了 Fuel Orchestrator (forc) 工具如何创建和初始化新的 Sway 项目。它涵盖了初始化过程、项目类型以及生成的项目结构。有关从模板创建项目的信息,请参见模板

初始化过程

forc init 命令在现有目录中创建新的 Sway 项目,而相关的 forc new 命令首先创建一个目录,然后执行初始化。这两个命令都设置了基本的项目结构,包含开始开发 Sway 程序所需的文件。

来源:forc/src/ops/forc_init.rs45-178 forc/src/cli/commands/init.rs1-45

命令选项

forc init 命令提供多种项目初始化选项

选项描述
--path要初始化项目的目录(默认:当前目录)
--contract创建合约项目(如果未指定类型,则为默认值)
--script创建脚本项目
--predicate创建谓词项目
--library创建库项目
--workspace创建工作区
--name设置包名(默认:目录名)

来源:forc/src/cli/commands/init.rs15-39

项目类型

Sway 支持多种程序类型,每种类型都有不同的目的和结构。类型在清单文件中指定,并决定入口点和默认代码。

来源:forc/src/ops/forc_init.rs11-15 forc/src/utils/defaults.rs24-73

初始化逻辑

初始化过程遵循以下步骤

  1. 确定项目目录(提供或当前)
  2. 验证项目名称
  3. 检查目录中是否已存在 Forc.toml
  4. 确定项目类型(合约、脚本、谓词、库或工作区)
  5. 创建必要的目录
  6. 生成相应的清单文件
  7. 生成默认源代码文件
  8. 创建 .gitignore 文件
  9. 打印包含有用资源的欢迎消息

来源:forc/src/ops/forc_init.rs45-178 forc/src/cli/commands/init.rs41-44

生成的项目结构

生成项目结构取决于项目类型

包项目(合约、脚本、谓词、库)

project/
├── Forc.toml           # Project manifest file
├── src/
│   └── main.sw         # Default source file (lib.sw for libraries)
└── .gitignore          # Default .gitignore file

工作区

project/
├── Forc.toml           # Workspace manifest file
└── .gitignore          # Default .gitignore file

来源:forc/src/ops/forc_init.rs104-108 forc/src/ops/forc_init.rs131-156

默认模板

对于每种项目类型,forc 生成默认源代码以供快速上手

合约

默认合约包含基本的 ABI 和实现

contract;

abi MyContract {
    fn test_function() -> bool;
}

impl MyContract for Contract {
    fn test_function() -> bool {
        true
    }
}

脚本

默认脚本包含一个主函数和可配置项

script;

use std::logging::log;

configurable {
    SECRET_NUMBER: u64 = 0
}

fn main() -> u64 {
    log(SECRET_NUMBER);
    return SECRET_NUMBER;
}

默认库具有最小结构

library;

// anything `pub` here will be exported as a part of this library's API

谓词

默认谓词包含一个返回布尔值的主函数

predicate;

fn main() -> bool {
    true
}

来源:24-73

清单文件

Forc.toml 清单文件包含项目元数据和依赖项。默认内容因项目类型而异

包清单

工作区清单

来源:3-22

forc new

forc new 命令与 forc init 类似,但会先创建一个新目录

forc new my_project --contract

这将创建一个新目录 my_project 并在其中初始化一个合约项目。

来源:forc/src/cli/commands/new.rs16-95

forc template

forc template 命令从模板仓库创建新项目

forc template --project-name my_project --url https://github.com/example/template

这对于更复杂的项目结构或从社区模板开始时非常有用。

来源:forc/src/ops/forc_template.rs16-161

实现细节

项目初始化系统的主要组成部分是:

  1. InitCommand 结构体在 forc/src/cli/commands/init.rs - 定义命令行界面
  2. init 函数在 forc/src/ops/forc_init.rs - 实现初始化逻辑
  3. 默认模板在 forc/src/utils/defaults.rs - 包含每种项目类型的默认模板

来源:forc/src/cli/commands/init.rs15-39 forc/src/ops/forc_init.rs11-15 forc/src/cli/commands/new.rs16-95

初始化过程由 forc init 命令触发,该命令由 CLI 系统解析并由 init 函数执行。init 函数确定项目类型,创建必要的目录,生成相应的清单文件和源代码,并设置 .gitignore 文件。