Appearance
配置
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 中,path
被 wrappers/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
}
}
}
]
}