Skip to content

配置

import { Callout } from 'nextra/components'

Tact 编译器的行为可以通过其配置文件 tact.config.json 进行自定义,这个 JSON 文件包含了根据特定 schema 列出的设置。

本页面列出了所有配置选项,并按照 schema 的结构进行了组织。请查看右侧的目录以便轻松导航。

$schema [#schema]

一个 JSON schema 文件可用于编辑器提供自动补全和悬停提示:configSchema.json

只需在配置文件的顶部添加 $schema 字段:

json
{
  "$schema": "http://raw.githubusercontent.com/tact-lang/tact/main/schemas/configSchema.json",
  "projects": []
}

projects [#projects]

包含 Tact 项目及其相应编译选项的列表。每个 .tact 文件代表一个 Tact 项目。

json
{
  "projects": [
    { },
    { }
  ]
}

name [#projects-name]

项目的名称。所有生成的文件都将以此为前缀。

Blueprint 中,name 指的是合约本身的名称。

json
{
  "projects": [
    {
      "name": "some_prefix"
    },
    {
      "name": "ContractUnderBlueprint"
    }
  ]
}

path [#projects-path]

项目 Tact 文件的路径。每个项目只能指定一个 Tact 文件。

Blueprint 中,pathwrappers/ContractName.compile.ts 中的 target 字段取代。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact"
    }
  ]
}

output [#projects-output]

所有生成文件的输出目录路径。

Blueprint 中,不使用 output,所有生成的文件总是放在 build/ProjectName/ 目录中。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output"
    }
  ]
}

options [#projects-options]

项目的编译选项。

Blueprint 中,它们作为默认选项,除非在 wrappers/ContractName.compile.ts 中进行了修改。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {}
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {}
    }
  ]
}

debug [#options-debug]

默认值为 false

如果设置为 true,则启用合约的调试输出,并允许使用 dump() 函数,这对于 调试目的 非常有用。启用此选项后,合约将通过 supported_interfaces 方法报告它是以调试模式编译的。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "debug": true
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "debug": true
      }
    }
  ]
}

masterchain [#options-masterchain]

默认值为 false

如果设置为 true,则启用 masterchain 支持。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "masterchain": true
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "masterchain": true
      }
    }
  ]
}

external [#options-external]

默认值为 false

如果设置为 true,则启用 外部 消息接收器的支持。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "external": true
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "external": true
      }
    }
  ]
}

ipfsAbiGetter [#options-ipfsabigetter]

默认值为 false

如果设置为 true,则启用生成带有描述合约 ABI 的 IPFS 链接的 getter

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "ipfsAbiGetter": true
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "ipfsAbiGetter": true
      }
    }
  ]
}

interfacesGetter [#options-interfacesgetter]

默认值为 false

如果设置为 true,则启用生成带有合约提供的接口列表的 getter

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "interfacesGetter": true
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "interfacesGetter": true
      }
    }
  ]
}

experimental [#options-experimental]

可能在未来移除的实验性选项。谨慎使用!

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "experimental": {}
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "experimental": {}
      }
    }
  ]
}
inline [#experimental-inline]

默认值为 false

如果设置为 true,则启用合约中所有函数的内联。这可以减少 gas 的使用,但会导致合约变大。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "options": {
        "experimental": {
          "inline": true
        }
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "experimental": {
          "inline": true
        }
      }
    }
  ]
}

mode [#projects-mode]

项目的编译模式。有效值为:

描述
"full"(默认)运行整个编译管道并生成 FunC 代码、BoC 和各种实用文件,包括 TypeScript 包装器。
"fullWithDecompilation""full" 一样运行整个编译管道,并且还反编译 BoC 格式的生成的二进制代码。
"funcOnly"仅输出中间的 FunC 代码,防止进一步编译。
"checkOnly"只执行语法和类型检查,防止进一步编译。

Blueprint 中,mode 总是设置为 "full",且不能被覆盖。

json
{
  "projects": [
    {
      "name": "some_prefix",
      "path": "./contract.tact",
      "output": "./contract_output",
      "mode": "full"
    },
    {
      "name": "func_only",
      "path": "./contract.tact",
      "output": "./contract_output",
      "mode": "funcOnly"
    }
  ]
}

完整示例

json
{
  "$schema": "http://raw.githubusercontent.com/tact-lang/tact/main/schemas/configSchema.json",
  "projects": [
    {
      "name": "basic",
      "path": "./basic.tact",
      "output": "./basic_output",
      "mode": "full"
    },
    {
      "name": "func_only",
      "path": "./basic.tact",
      "output": "./basic_output",
      "mode": "funcOnly"
    },
    {
      "name": "debugPrefix",
      "path": "./contracts/contract.tact",
      "output": "./contracts/output",
      "options": {
        "debug": true
      }
    },
    {
      "name": "ContractUnderBlueprint",
      "options": {
        "debug": false,
        "masterchain": false,
        "external": false,
        "ipfsAbiGetter": true,
        "interfacesGetter": true,
        "experimental": {
          "inline": false
        }
      }
    }
  ]
}