ModuleConfig

ModuleConfig 提供了 Esmx 框架的模块配置功能,用于定义模块的导入导出规则、别名配置和外部依赖等。

类型定义

PathType

  • 类型定义:
1enum PathType {
2  npm = 'npm:', 
3  root = 'root:'
4}

模块路径类型枚举:

  • npm: 表示 node_modules 中的依赖
  • root: 表示项目根目录下的文件

ModuleConfig

  • 类型定义:
1interface ModuleConfig {
2  exports?: string[]
3  links?: Record<string, string>
4  imports?: Record<string, string>
5}

模块配置接口,用于定义服务的导出、导入和外部依赖配置。

exports

导出配置列表,将服务中的特定代码单元(如组件、工具函数等)以 ESM 格式对外暴露。

支持两种类型:

  • root:*: 导出源码文件,如:root:src/components/button.vue
  • npm:*: 导出第三方依赖,如:npm:vue

每个导出项包含以下属性:

  • name: 原始导出路径,如:npm:vueroot:src/components
  • type: 路径类型(npmroot
  • importName: 导入名称,格式:${serviceName}/${type}/${path}
  • exportName: 导出路径,相对于服务根目录
  • exportPath: 实际的文件路径
  • externalName: 外部依赖名称,用于其他服务导入此模块时的标识

服务依赖配置映射,用于配置当前服务依赖的其他服务(本地或远程)及其本地路径。每个配置项的键为服务名称,值为该服务在本地的路径。

安装方式不同,配置也不同:

  • 源码安装(Workspace、Git):需要指向 dist 目录,因为需要使用构建后的文件
  • 软件包安装(Link、静态服务器、私有镜像源、File):直接指向包目录,因为包中已包含构建后的文件

imports

外部依赖映射,配置要使用的外部依赖,通常是使用远程模块中的依赖。

每个依赖项包含以下属性:

  • match: 用于匹配导入语句的正则表达式
  • import: 实际的模块路径

示例

entry.node.ts
1import type { EsmxOptions } from '@esmx/core';
2
3export default {
4  modules: {
5    // 导出配置
6    exports: [
7      'root:src/components/button.vue',  // 导出源码文件
8      'root:src/utils/format.ts',
9      'npm:vue',  // 导出第三方依赖
10      'npm:vue-router'
11    ],
12
13    // 导入配置
14    links: {
15      // 源码安装方式:需要指向 dist 目录
16      'ssr-remote': './node_modules/ssr-remote/dist',
17      // 软件包安装方式:直接指向包目录
18      'other-remote': './node_modules/other-remote'
19    },
20
21    // 外部依赖配置
22    imports: {
23      'vue': 'ssr-remote/npm/vue',
24      'vue-router': 'ssr-remote/npm/vue-router'
25    }
26  }
27} satisfies EsmxOptions;

ParsedModuleConfig

  • 类型定义:
1interface ParsedModuleConfig {
2  name: string
3  root: string
4  exports: {
5    name: string
6    type: PathType
7    importName: string
8    exportName: string
9    exportPath: string
10    externalName: string
11  }[]
12  links: Array<{
13    /**
14     * 软包名称
15     */
16    name: string
17    /**
18     * 软件包根目录
19     */
20    root: string
21  }>
22  imports: Record<string, { match: RegExp; import?: string }>
23}

解析后的模块配置,将原始的模块配置转换为标准化的内部格式:

name

当前服务的名称

  • 用于标识模块和生成导入路径

root

当前服务的根目录路径

  • 用于解析相对路径和构建产物的存放

exports

导出配置列表

  • name: 原始导出路径,如:'npm:vue' 或 'root:src/components'
  • type: 路径类型(npm 或 root)
  • importName: 导入名称,格式:'${serviceName}/${type}/${path}'
  • exportName: 导出路径,相对于服务根目录
  • exportPath: 实际的文件路径
  • externalName: 外部依赖名称,用于其他服务导入此模块时的标识

导入配置列表

  • name: 软包名称
  • root: 软件包根目录

imports

外部依赖映射

  • 将模块的导入路径映射到实际的模块位置
  • match: 用于匹配导入语句的正则表达式
  • import: 实际的模块路径