ModuleConfig

Core configuration interface for the module system.

Interface Definition

interface ModuleConfig {
    links?: Record<string, string>;
    imports?: Record<string, string>;
    exports?: ModuleConfigExportExports;
}
  • Type: Record<string, string>
  • Description: Module linking configuration. Key is remote module name, value is module build output directory path.

imports

  • Type: Record<string, string>
  • Description: Module import mapping configuration. Key is local module identifier, value is remote module path.

exports

  • Type: ModuleConfigExportExports
  • Description: Module export configuration. Supports multiple configuration forms.

Type Definitions

ModuleConfigExportExports

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

Union type for export configuration, supporting mixed array (strings and objects) and object forms.

ModuleConfigExportObject

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

input

  • Type: string
  • Description: Input file path, relative to project root directory.

entryPoints

  • Type: Record<BuildEnvironment, string | false>
  • Description: Environment-specific input file configuration. Supports client and server differentiated builds.

rewrite

  • Type: boolean
  • Default: true
  • Description: Whether to rewrite import paths within modules.

BuildEnvironment

type BuildEnvironment = 'client' | 'server';

Build target environment type.

Parsed Interface

ParsedModuleConfig

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

ParsedModuleConfigExport

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

Prefix Syntactic Sugar

The following prefixes are supported in string items of exports array form:

npm: Prefix

  • Format: 'npm:packageName'
  • Processing: Automatically sets rewrite: false, maintains original import paths
  • Example: 'npm:axios'{ input: 'axios', rewrite: false }

root: Prefix

  • Format: 'root:path/to/file.ext'
  • Processing: Automatically sets rewrite: true, removes file extension, adds ./ prefix
  • Example: 'root:src/utils/format.ts'{ input: './src/utils/format', rewrite: true }

Default Export Items

The framework automatically adds the following default export items for each module:

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

Examples

Basic Configuration

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

Array Form

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

Object Form

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

Mixed Array Form

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