Skip to content

企业级功能

robuild 提供了一系列企业级功能,专为大型项目和 monorepo 环境设计,帮助团队提高开发效率和代码质量。

🏢 工作区支持 (Workspace)

概述

工作区支持允许你在 monorepo 环境中构建多个包,支持依赖顺序构建和包过滤。

基本用法

bash
# 启用工作区模式
npx robuild --workspace

# 构建特定包
npx robuild --workspace --filter "@mycompany/core"

# 构建多个包
npx robuild --workspace --filter "@mycompany/*" --filter "packages/utils"

配置文件

typescript
import { defineConfig } from 'robuild'

export default defineConfig({
  workspace: {
    packages: ['packages/*', 'apps/*'],
    filter: '@mycompany/*',
    dependencyOrder: true,
    parallel: true
  },
  entries: [
    {
      type: 'bundle',
      input: './src/index.ts',
      format: ['esm', 'cjs']
    }
  ]
})

工作区配置选项

选项类型描述默认值
packagesstring[]包路径模式['packages/*']
filterstring | string[]包过滤器-
dependencyOrderboolean依赖顺序构建true
parallelboolean并行构建独立包true

包发现

robuild 自动发现工作区包,支持以下配置文件:

  • package.json (npm workspaces)
  • pnpm-workspace.yaml (pnpm)
  • lerna.json (lerna)

依赖顺序构建

当启用 dependencyOrder 时,robuild 会分析包之间的依赖关系,确保依赖包先于被依赖包构建。

typescript
// packages/utils/package.json
{
  "name": "@mycompany/utils",
  "dependencies": {}
}

// packages/core/package.json  
{
  "name": "@mycompany/core",
  "dependencies": {
    "@mycompany/utils": "workspace:*"
  }
}

构建顺序:@mycompany/utils@mycompany/core

📦 包过滤 (Package Filtering)

过滤模式

支持多种过滤模式:

bash
# 按包名过滤
npx robuild --workspace --filter "@mycompany/core"

# 使用 glob 模式
npx robuild --workspace --filter "@mycompany/*"

# 按路径过滤
npx robuild --workspace --filter "packages/core"

# 多个过滤器
npx robuild --workspace --filter "@mycompany/*" --filter "apps/web"

# 排除模式
npx robuild --workspace --filter "!@mycompany/test-*"

配置文件过滤

typescript
export default defineConfig({
  workspace: {
    packages: ['packages/*', 'apps/*'],
    filter: [
      '@mycompany/*',        // 包含所有 @mycompany 包
      '!@mycompany/test-*',  // 排除测试包
      'apps/web'             // 包含特定应用
    ]
  }
})

📤 包导出生成 (Exports Generation)

概述

自动生成 package.jsonexports 字段,支持多种输出格式和类型定义。

基本用法

bash
# 生成 exports 字段
npx robuild ./src/index.ts --generate-exports

配置选项

typescript
export default defineConfig({
  exports: {
    enabled: true,
    includeTypes: true,
    autoUpdate: true,
    customMappings: {
      './utils': './dist/utils/index.js'
    }
  },
  entries: [
    {
      type: 'bundle',
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      generateExports: true
    }
  ]
})

生成的 exports 示例

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

导出配置选项

选项类型描述默认值
enabledboolean启用导出生成false
includeTypesboolean包含类型定义true
autoUpdateboolean自动更新 package.jsontrue
customMappingsRecord<string, string>自定义导出映射{}

🔄 迁移工具 (Migration Tools)

概述

提供从其他构建工具迁移到 robuild 的命令行工具,支持配置转换和迁移建议。

支持的工具

  • tsup - 从 tsup 配置迁移
  • unbuild - 从 unbuild 配置迁移
  • vite - 从 vite 配置迁移
  • webpack - 从 webpack 配置迁移

基本用法

bash
# 从 tsup 迁移
npx robuild migrate from tsup tsup.config.ts

# 从 unbuild 迁移
npx robuild migrate from unbuild build.config.ts

# 从 vite 迁移
npx robuild migrate from vite vite.config.js

# 自动检测迁移源
npx robuild migrate auto

迁移示例

从 tsup 迁移

typescript
// tsup.config.ts (原配置)
export default {
  entry: ['src/index.ts'],
  format: ['cjs', 'esm'],
  dts: true,
  clean: true
}

// build.config.ts (迁移后)
export default defineConfig({
  entries: [
    {
      type: 'bundle',
      input: './src/index.ts',
      format: ['cjs', 'esm'],
      dts: true,
      clean: true
    }
  ]
})

从 unbuild 迁移

typescript
// build.config.ts (原配置)
export default {
  entries: ['./src/index'],
  declaration: true,
  rollup: {
    emitCJS: true
  }
}

// build.config.ts (迁移后)
export default defineConfig({
  entries: [
    {
      type: 'bundle',
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      dts: true
    }
  ]
})

迁移警告和建议

迁移工具会提供详细的警告和建议:

bash
 成功迁移配置文件
⚠️  警告: 以下功能需要手动调整:
   - 自定义插件配置
   - 复杂的 rollup 选项
   
💡 建议:
   - 考虑使用 robuild 的新功能
   - 查看文档了解最佳实践

🔧 最佳实践

1. Monorepo 项目结构

my-monorepo/
├── packages/
│   ├── core/
│   │   ├── src/
│   │   ├── package.json
│   │   └── build.config.ts
│   ├── utils/
│   │   ├── src/
│   │   ├── package.json
│   │   └── build.config.ts
│   └── types/
│       ├── src/
│       ├── package.json
│       └── build.config.ts
├── apps/
│   └── web/
│       ├── src/
│       └── package.json
├── package.json
├── pnpm-workspace.yaml
└── build.config.ts (根配置)

2. 根配置文件

typescript
// build.config.ts (根目录)
import { defineConfig } from 'robuild'

export default defineConfig({
  workspace: {
    packages: ['packages/*'],
    dependencyOrder: true,
    parallel: true
  },
  
  // 全局配置
  logLevel: 'info',
  failOnWarn: false,
  
  // 导出生成
  exports: {
    enabled: true,
    includeTypes: true,
    autoUpdate: true
  }
})

3. 包级配置

typescript
// packages/core/build.config.ts
import { defineConfig } from 'robuild'

export default defineConfig({
  entries: [
    {
      type: 'bundle',
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      dts: true,
      external: ['@mycompany/utils']
    }
  ]
})

4. CI/CD 集成

yaml
# .github/workflows/build.yml
name: Build
on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: 'pnpm'
      
      - run: pnpm install
      - run: pnpm robuild --workspace
      - run: pnpm test

📚 相关文档

Released under the MIT License.