如何在NX工作区实现类似@angular/material的库子模块导入?
在NX工作区实现Utilities库的子模块拆分导入
要实现像@angular/material那样的子模块独立导入,无需拆分NX库,只需调整目录结构、导出配置和package.json的路径映射即可,具体步骤如下:
1. 给每个子目录添加独立的index.ts
在date-time、functions、file-types三个子目录下分别创建index.ts,统一导出对应目录下的所有内容:
date-time/index.ts
export * from './convert-hours-minutes-to-minutes'; export * from './date-time-formats'; export * from './get-date-for-end-of-week';
functions/index.ts
export * from './api-log-mode'; export * from './database-log-mode'; export * from './delete-from-array'; export * from './field-value-list'; export * from './format-bytes-for-users';
file-types/index.ts
export * from './json-wrapper/json-wrapper'; export * from './microsoft-excel-wrapper/excel-js-wrapper'; export * from './xml-wrapper/xml-wrapper';
2. 配置库的package.json路径映射
找到utilities库根目录下的package.json(非NX工作区根目录的),添加exports字段,明确子模块的路径映射关系:
{ "name": "@my-lib/utilities", "version": "x.x.x", "exports": { ".": "./src/index.ts", "./date-time": "./src/lib/date-time/index.ts", "./functions": "./src/lib/functions/index.ts", "./file-types": "./src/lib/file-types/index.ts" }, // 保留原有其他字段(如scripts、dependencies等) }
3. 优化根目录index.ts(可选)
如果需要保留整体导入的能力,可以将utilities/src/index.ts简化为:
export * from './lib/date-time'; export * from './lib/functions'; export * from './lib/file-types';
4. 生效配置
运行NX缓存重置命令,确保新的路径映射生效:
nx reset
完成以上步骤后,就能实现两种导入方式:
- 整体导入:
import { DateTimeFormats, ApiLogMode } from '@my-lib/utilities'; - 子模块独立导入:
import { DateTimeFormats, GetDateForEndOfWeek } from '@my-lib/utilities/date-time';
内容的提问来源于stack exchange,提问作者Steven Scott
相关产品推荐
相关产品推荐

