Turbopack 配置 #

turbo.json 配置文件 #

基本结构 #

json
{
  "$schema": "https://turbo.build/schema.json",
  "globalDependencies": ["**/.env.*local"],
  "globalEnv": ["NODE_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {
      "outputs": []
    },
    "test": {
      "dependsOn": ["build"],
      "outputs": ["coverage/**"]
    }
  }
}

配置项详解 #

配置项 类型 描述
$schema string JSON Schema 地址
globalDependencies string[] 全局依赖文件
globalEnv string[] 全局环境变量
globalPassThroughEnv string[] 透传环境变量
pipeline object 任务管道配置
ui string UI 模式

Pipeline 配置 #

任务依赖 #

json
{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**"]
    }
  }
}

dependsOn 语法

语法 含义
^build 依赖所有包的 build 任务
build 依赖当前包的 build 任务
//#build 依赖根目录的 build 任务

多任务配置 #

json
{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"],
      "outputMode": "new-only"
    },
    "test": {
      "dependsOn": ["build"],
      "outputs": ["coverage/**"],
      "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*"]
    },
    "lint": {
      "outputs": [],
      "inputs": ["src/**/*", ".eslintrc.json"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "clean": {
      "cache": false
    }
  }
}

任务选项 #

json
{
  "pipeline": {
    "build": {
      "outputs": ["dist/**"],
      "outputMode": "new-only",
      "inputs": ["src/**/*"],
      "outputFileOutputs": ["dist/**/*.js"],
      "env": ["API_URL", "NODE_ENV"],
      "dependsOn": ["^build"]
    }
  }
}

outputMode 选项

描述
full 显示完整输出
new-only 只显示新输出
hash-only 只显示哈希
none 不显示输出

Next.js 集成配置 #

基本配置 #

javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      resolveExtensions: ['.tsx', '.ts', '.jsx', '.js'],
      resolveAlias: {
        '@': './src',
      },
    },
  },
}

完整配置示例 #

javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      resolveExtensions: [
        '.tsx',
        '.ts',
        '.jsx',
        '.js',
        '.json',
        '.css',
        '.scss',
      ],
      resolveAlias: {
        '@': './src',
        '@components': './src/components',
        '@lib': './src/lib',
        '@hooks': './src/hooks',
        '@utils': './src/utils',
        '@styles': './src/styles',
        '@types': './src/types',
        '@assets': './src/assets',
      },
      rules: {
        '*.svg': {
          loaders: ['@svgr/webpack'],
          as: '*.js',
        },
      },
    },
  },
  reactStrictMode: true,
  swcMinify: true,
}

resolveExtensions 配置 #

javascript
module.exports = {
  experimental: {
    turbo: {
      resolveExtensions: [
        '.tsx',    // TypeScript JSX
        '.ts',     // TypeScript
        '.jsx',    // JavaScript JSX
        '.js',     // JavaScript
        '.json',   // JSON
        '.css',    // CSS
        '.scss',   // SCSS
        '.less',   // Less
      ],
    },
  },
}

resolveAlias 配置 #

javascript
module.exports = {
  experimental: {
    turbo: {
      resolveAlias: {
        '@': './src',
        '@/components': './src/components',
        '@/lib': './src/lib',
        '@/hooks': './src/hooks',
        '@/utils': './src/utils',
        '@/styles': './src/styles',
        '@/types': './src/types',
        '@/assets': './src/assets',
        '@/config': './src/config',
        '@/services': './src/services',
        '@/store': './src/store',
      },
    },
  },
}

模块解析配置 #

路径映射 #

typescript
// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
      "@components/*": ["./src/components/*"],
      "@lib/*": ["./src/lib/*"],
      "@hooks/*": ["./src/hooks/*"],
      "@utils/*": ["./src/utils/*"]
    }
  }
}
javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      resolveAlias: {
        '@': './src',
        '@components': './src/components',
        '@lib': './src/lib',
        '@hooks': './src/hooks',
        '@utils': './src/utils',
      },
    },
  },
}

外部模块 #

javascript
module.exports = {
  experimental: {
    turbo: {
      external: [
        'react',
        'react-dom',
        'lodash',
        'moment',
      ],
    },
  },
}

条件导出 #

json
// package.json
{
  "exports": {
    ".": {
      "import": "./dist/index.mjs",
      "require": "./dist/index.cjs",
      "types": "./dist/index.d.ts"
    },
    "./utils": {
      "import": "./dist/utils.mjs",
      "require": "./dist/utils.cjs"
    }
  }
}

缓存配置 #

缓存目录 #

json
// turbo.json
{
  "pipeline": {
    "build": {
      "outputs": [".next/**", "!.next/cache/**"]
    }
  }
}

缓存策略 #

json
{
  "pipeline": {
    "build": {
      "outputs": ["dist/**"],
      "inputs": ["src/**/*", "package.json"],
      "cache": true
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "test": {
      "outputs": ["coverage/**"],
      "inputs": ["src/**/*", "test/**/*"],
      "cache": true
    }
  }
}

远程缓存 #

bash
# 启用远程缓存
turbo login
turbo link

# 配置远程缓存
turbo config set team my-team
json
// turbo.json
{
  "remoteCache": {
    "enabled": true,
    "signature": true
  }
}

缓存忽略 #

json
{
  "pipeline": {
    "build": {
      "outputs": [
        ".next/**",
        "!.next/cache/**",
        "!.next/trace"
      ]
    }
  }
}

环境变量配置 #

全局环境变量 #

json
// turbo.json
{
  "globalEnv": [
    "NODE_ENV",
    "API_URL",
    "DATABASE_URL"
  ]
}

任务环境变量 #

json
{
  "pipeline": {
    "build": {
      "env": [
        "NEXT_PUBLIC_API_URL",
        "NEXT_PUBLIC_ANALYTICS_ID"
      ]
    },
    "test": {
      "env": [
        "TEST_DATABASE_URL",
        "TEST_API_KEY"
      ]
    }
  }
}

透传环境变量 #

json
{
  "globalPassThroughEnv": [
    "CI",
    "GITHUB_TOKEN",
    "VERCEL_URL"
  ]
}

.env 文件 #

bash
# .env.local
DATABASE_URL=postgresql://localhost:5432/mydb
API_KEY=your-api-key
NEXT_PUBLIC_API_URL=https://api.example.com

# .env.development
NODE_ENV=development
DEBUG=true

# .env.production
NODE_ENV=production
DEBUG=false

输入输出配置 #

输入配置 #

json
{
  "pipeline": {
    "build": {
      "inputs": [
        "src/**/*",
        "public/**/*",
        "package.json",
        "next.config.js",
        "tsconfig.json"
      ]
    },
    "test": {
      "inputs": [
        "src/**/*.ts",
        "src/**/*.tsx",
        "test/**/*.ts",
        "jest.config.js"
      ]
    }
  }
}

输出配置 #

json
{
  "pipeline": {
    "build": {
      "outputs": [
        ".next/**",
        "!.next/cache/**",
        "public/dist/**"
      ]
    },
    "test": {
      "outputs": [
        "coverage/**",
        "test-results/**"
      ]
    }
  }
}

Monorepo 配置 #

工作区配置 #

json
// package.json (root)
{
  "workspaces": [
    "apps/*",
    "packages/*"
  ]
}

Monorepo turbo.json #

json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {
      "outputs": []
    },
    "test": {
      "dependsOn": ["build"],
      "outputs": ["coverage/**"]
    },
    "clean": {
      "cache": false
    }
  }
}

包级别配置 #

json
// packages/ui/turbo.json
{
  "extends": ["//"],
  "pipeline": {
    "build": {
      "outputs": ["dist/**"]
    }
  }
}

依赖图 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Monorepo 依赖图                           │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│   app-web ──► @acme/ui ──► @acme/utils                      │
│       │           │              │                          │
│       │           └──────────────┘                          │
│       │                                                      │
│       └──► @acme/api ──► @acme/database                     │
│                                                              │
│   app-admin ──► @acme/ui ──► @acme/utils                    │
│                                                              │
└─────────────────────────────────────────────────────────────┘

自定义规则配置 #

Loader 配置 #

javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      rules: {
        '*.svg': {
          loaders: ['@svgr/webpack'],
          as: '*.js',
        },
        '*.md': {
          loaders: ['raw-loader'],
          as: '*.js',
        },
        '*.yaml': {
          loaders: ['yaml-loader'],
          as: '*.json',
        },
      },
    },
  },
}

SVG 组件化 #

javascript
module.exports = {
  experimental: {
    turbo: {
      rules: {
        '*.svg': {
          loaders: [
            {
              loader: '@svgr/webpack',
              options: {
                icon: true,
                replaceAttrValues: {
                  '#000': 'currentColor',
                },
              },
            },
          ],
          as: '*.js',
        },
      },
    },
  },
}
tsx
import Logo from '@/assets/logo.svg';

export function Header() {
  return (
    <header>
      <Logo className="w-10 h-10" />
    </header>
  );
}

Markdown 导入 #

javascript
module.exports = {
  experimental: {
    turbo: {
      rules: {
        '*.md': {
          loaders: ['frontmatter-markdown-loader'],
          as: '*.js',
        },
      },
    },
  },
}
tsx
import content from './about.md';

export function AboutPage() {
  return (
    <div>
      <h1>{content.attributes.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: content.html }} />
    </div>
  );
}

性能配置 #

并行配置 #

json
// turbo.json
{
  "parallel": 4
}
bash
# 命令行指定
turbo build --parallel=4

内存限制 #

bash
# 设置 Node.js 内存限制
NODE_OPTIONS="--max-old-space-size=4096" turbo build

缓存大小 #

json
{
  "cacheOptions": {
    "maxCacheSize": 10737418240
  }
}

构建优化配置 #

代码分割 #

javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      chunkSplitting: {
        strategy: 'default',
        overrides: {
          vendor: {
            test: /[\\/]node_modules[\\/]/,
            name: 'vendors',
          },
        },
      },
    },
  },
}

Tree Shaking #

javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      treeShaking: true,
      sideEffects: false,
    },
  },
}

压缩配置 #

javascript
module.exports = {
  experimental: {
    turbo: {
      minify: true,
      minifyOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true,
        },
      },
    },
  },
}

调试配置 #

日志级别 #

bash
# 详细日志
turbo build --log-level verbose

# 调试模式
turbo build --debug

# 性能分析
turbo build --profile

输出诊断 #

json
{
  "pipeline": {
    "build": {
      "outputMode": "full"
    }
  }
}

缓存诊断 #

bash
# 查看缓存信息
turbo build --dry-run

# 强制重新构建
turbo build --force

# 查看任务图
turbo build --graph

配置最佳实践 #

1. 合理设置缓存 #

json
{
  "pipeline": {
    "build": {
      "outputs": [".next/**", "!.next/cache/**"],
      "inputs": ["src/**/*", "package.json"]
    }
  }
}

2. 明确依赖关系 #

json
{
  "pipeline": {
    "test": {
      "dependsOn": ["build"],
      "outputs": ["coverage/**"]
    },
    "lint": {
      "dependsOn": ["^build"]
    }
  }
}

3. 环境变量管理 #

json
{
  "globalEnv": ["NODE_ENV"],
  "pipeline": {
    "build": {
      "env": ["NEXT_PUBLIC_*"]
    }
  }
}

4. Monorepo 配置继承 #

json
// packages/ui/turbo.json
{
  "extends": ["//"],
  "pipeline": {
    "build": {
      "outputs": ["dist/**"]
    }
  }
}

配置示例 #

完整配置示例 #

javascript
// next.config.js
module.exports = {
  experimental: {
    turbo: {
      resolveExtensions: ['.tsx', '.ts', '.jsx', '.js', '.json'],
      resolveAlias: {
        '@': './src',
        '@components': './src/components',
        '@lib': './src/lib',
        '@hooks': './src/hooks',
        '@utils': './src/utils',
        '@styles': './src/styles',
        '@types': './src/types',
        '@assets': './src/assets',
      },
      rules: {
        '*.svg': {
          loaders: ['@svgr/webpack'],
          as: '*.js',
        },
      },
    },
  },
  reactStrictMode: true,
  swcMinify: true,
  images: {
    domains: ['images.example.com'],
  },
}
json
// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "globalDependencies": ["**/.env.*local"],
  "globalEnv": ["NODE_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**"],
      "outputMode": "new-only"
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {
      "outputs": [],
      "inputs": ["src/**/*", ".eslintrc.json"]
    },
    "test": {
      "dependsOn": ["build"],
      "outputs": ["coverage/**"],
      "inputs": ["src/**/*", "test/**/*"]
    },
    "type-check": {
      "outputs": [],
      "inputs": ["src/**/*", "tsconfig.json"]
    }
  }
}

下一步 #

现在你已经了解了 Turbopack 的配置选项,接下来学习 核心特性 深入了解 Turbopack 的强大功能!

最后更新:2026-03-28