Skip to content

包导出生成 (Exports Generation)

robuild 提供了强大的包导出生成功能,可以自动生成 package.jsonexports 字段,支持多种输出格式和类型定义,让您的包更好地支持现代 JavaScript 生态系统。

🚀 快速开始

基本用法

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

配置文件

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

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

⚙️ 配置选项

全局配置

typescript
export default defineConfig({
  exports: {
    enabled: true,           // 启用导出生成
    includeTypes: true,      // 包含类型定义
    autoUpdate: true,        // 自动更新 package.json
    baseDir: './dist',       // 基础目录
    custom: {                // 自定义导出映射
      './utils': './dist/utils/index.js',
      './helpers': './dist/helpers/index.js'
    }
  }
})

配置选项详解

选项类型描述默认值
enabledboolean启用导出生成false
includeTypesboolean包含类型定义true
autoUpdateboolean自动更新 package.jsontrue
baseDirstring输出文件的基础目录'./dist'
customRecord<string, string>自定义导出映射{}

Entry 级别配置

每个 bundle entry 还可以配置:

选项类型描述默认值
generateExportsboolean为此 entry 生成 exportsfalse
exportPathstring自定义导出路径(如 '.''./utils'自动推断

📦 生成示例

单一入口

配置:

typescript
export default defineConfig({
  entries: [
    {
      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"
    }
  }
}

多入口导出

配置:

typescript
export default defineConfig({
  entries: [
    {
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      generateExports: true
    },
    {
      input: './src/utils/index.ts',
      format: ['esm', 'cjs'],
      generateExports: true,
      exportPath: './utils'
    }
  ]
})

生成的 exports:

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

🎯 高级用法

自定义导出路径

typescript
export default defineConfig({
  exports: {
    enabled: true,
    custom: {
      './core': './dist/core/index.js',
      './plugins/*': './dist/plugins/*.js',
      './types': './dist/types/index.d.ts'
    }
  }
})

条件导出

typescript
export default defineConfig({
  entries: [
    {
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      platform: 'node',
      generateExports: true
    },
    {
      input: './src/browser.ts',
      format: ['esm'],
      platform: 'browser',
      generateExports: true,
      exportPath: './browser'
    }
  ]
})

生成的 exports:

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

🔧 最佳实践

1. 库开发

typescript
// 适合库开发的配置
export default defineConfig({
  entries: [
    // 主入口
    {
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      dts: true,
      generateExports: true
    },
    // 工具函数
    {
      input: './src/utils/index.ts',
      format: ['esm', 'cjs'],
      dts: true,
      generateExports: true,
      exportPath: './utils'
    }
  ],
  exports: {
    enabled: true,
    includeTypes: true,
    autoUpdate: true
  }
})

2. 组件库

typescript
// 适合组件库的配置
export default defineConfig({
  entries: [
    // 主入口
    {
      input: './src/index.ts',
      format: ['esm', 'cjs'],
      generateExports: true
    },
    // 各个组件
    {
      input: './src/components/*/index.ts',
      format: ['esm'],
      generateExports: true,
      exportPath: './components/*'
    }
  ],
  exports: {
    enabled: true,
    custom: {
      './package.json': './package.json'
    }
  }
})

📚 相关文档

Released under the MIT License.