ModuleConfig

模块系统的核心配置接口。

接口定义

interface ModuleConfig {
    links?: Record<string, string>;
    imports?: Record<string, string>;
    exports?: ModuleConfigExportExports;
}
  • 类型: Record<string, string>
  • 描述: 模块链接配置。键为远程模块名称,值为模块构建产物目录路径。

imports

  • 类型: Record<string, string>
  • 描述: 模块导入映射配置。键为本地模块标识符,值为远程模块路径。

exports

  • 类型: ModuleConfigExportExports
  • 描述: 模块导出配置。支持多种配置形式。

类型定义

ModuleConfigExportExports

type ModuleConfigExportExports =
    | Array<string | Record<string, string | ModuleConfigExportObject>>
    | Record<string, string | ModuleConfigExportObject>;

导出配置的联合类型,支持混合数组(字符串和对象)、对象两种形式。

ModuleConfigExportObject

type ModuleConfigExportObject = {
    input?: string;
    inputTarget?: Record<BuildSsrTarget, string | false>;
    rewrite?: boolean;
};

input

  • 类型: string
  • 描述: 输入文件路径,相对于项目根目录。

inputTarget

  • 类型: Record<BuildSsrTarget, string | false>
  • 描述: 环境特定的输入文件配置。支持客户端和服务端差异化构建。

rewrite

  • 类型: boolean
  • 默认值: true
  • 描述: 是否重写模块内的导入路径。

BuildSsrTarget

type BuildSsrTarget = 'client' | 'server';

构建目标环境类型。

解析后接口

ParsedModuleConfig

interface ParsedModuleConfig {
    name: string;
    root: string;
    links: Record<string, LinkInfo>;
    imports: Record<string, string>;
    exports: ParsedModuleConfigExports;
}

ParsedModuleConfigExport

interface ParsedModuleConfigExport {
    name: string;
    inputTarget: Record<BuildSsrTarget, string | false>;
    rewrite: boolean;
}

前缀语法糖

exports 数组形式的字符串项中支持以下前缀:

npm: 前缀

  • 格式: 'npm:packageName'
  • 处理: 自动设置 rewrite: false,保持原始导入路径
  • 示例: 'npm:axios'{ input: 'axios', rewrite: false }

root: 前缀

  • 格式: 'root:path/to/file.ext'
  • 处理: 自动设置 rewrite: true,去除文件扩展名,添加 ./ 前缀
  • 示例: 'root:src/utils/format.ts'{ input: './src/utils/format', rewrite: true }

默认导出项

框架自动为每个模块添加以下默认导出项:

{
  'src/entry.client': {
    inputTarget: {
      client: './src/entry.client',
      server: false
    }
  },
  'src/entry.server': {
    inputTarget: {
      client: false,
      server: './src/entry.server'
    }
  }
}

示例

基础配置

export default {
  modules: {
    links: {
      'shared-lib': '../shared-lib/dist'
    },
    imports: {
      'axios': 'shared-lib/axios'
    },
    exports: [
      'npm:axios',
      'root:src/utils/format.ts'
    ]
  }
} satisfies EsmxOptions;

数组形式

exports: [
  'npm:axios',
  'root:src/utils/format.ts',
  {
    'api-client': './src/api/client.ts'
  }
]

对象形式

exports: {
  'axios': 'axios',
  'utils': './src/utils/index.ts',
  'storage': {
    inputTarget: {
      client: './src/storage/indexedDB.ts',
      server: './src/storage/filesystem.ts'
    }
  }
}

混合数组形式

exports: [
  {
    'utils': './src/utils.ts',
    'api': './src/api.ts'
  },
  {
    'components': {
      input: './src/components/index.ts',
      rewrite: true
    }
  }
]