UNPKG

module-migration-tool

Version:

分析项目文件依赖并迁移到新项目的工具

247 lines (180 loc) 8.51 kB
# 模块迁移工具 [English](https://gitee.com/little_fat_brother_in_turpan/module-migration-tool/blob/master/README.md) | [中文](https://gitee.com/little_fat_brother_in_turpan/module-migration-tool/blob/master/README.zh-CN.md) 这是一个帮助将大型项目中的一部分代码迁移出来,形成独立小项目的工具。工具会分析入口文件(或目录)的所有依赖,并递归查找所有相关文件,然后将它们复制到新的目标目录中,保持原有的目录结构。 这个工具能够帮助开发者快速从大型项目中提取部分代码,同时保持所有依赖关系完整,对于需要将单体应用拆分为微前端或微服务架构的团队特别有用。工具设计考虑了可扩展性,可以轻松添加对新文件类型的支持或自定义依赖分析规则。 ## 功能特点 - ✅ 分析 JavaScript/TypeScript 文件的静态依赖关系 - ✅ 分析 Vue 单文件组件的依赖 - ✅ 分析 CSS/SCSS/LESS 文件中的引用 - ✅ 自动处理相对路径导入 - ✅ 支持别名路径解析(如`@/components`- ✅ 自动检测项目配置(如 tsconfig.json 中的路径别名) - ✅ 保持原始目录结构 - ✅ 生成依赖关系可视化报告 - ✅ 支持单文件或整个目录作为入口点 ## 安装 ```bash # 全局安装,也可以采用npx执行 npm install -g module-migration-tool # 或在项目中本地安装 npm install module-migration-tool --save-dev ``` 或克隆仓库并手动安装: ```bash # 克隆仓库 git clone <repository-url> # 进入项目目录 cd migration-tool # 安装依赖 npm install # 创建全局链接(可选) npm link ``` ## 使用流程 使用该工具的基本步骤如下: 1. 指定源项目路径 2. 指定入口文件/目录 3. 指定目标路径 4. 工具会自动分析依赖并复制所有必要的文件 你可以通过命令行参数或配置文件自定义工具的行为,如指定要忽略的路径、配置别名路径映射等。 ## 使用方法 ### 命令行使用 npx 执行 ```bash # 基本用法 npx module-migrate --source <源目录> --entry <入口文件/目录> --target <目标目录> ``` 当全局安装后,你可以使用 `migrate``module-migrate` 命令: ```bash # 基本用法 module-migrate --source <源目录> --entry <入口文件/目录> --target <目标目录> # 示例 module-migrate --source ./my-project/src --entry ./my-project/src/components/Feature --target ./new-project ``` 如果是本地安装: ```bash npx module-migrate --source <源目录> --entry <入口文件/目录> --target <目标目录> ``` 直接使用 Node.js: ```bash node src/index.js --source <源目录> --entry <入口文件/目录> --target <目标目录> ``` ### 命令行参数 | 参数 | 简写 | 描述 | 默认值 | | ------------- | ---- | ----------------- | -------------- | | `--source` | `-s` | 源项目路径 | ./src | | `--entry` | `-e` | 入口文件/目录路径 | ./src/index.js | | `--target` | `-t` | 目标路径 | ./dist | | `--config` | `-c` | 配置文件路径 | - | | `--no-report` | - | 不生成依赖报告 | false | | `--verbose` | `-v` | 显示详细日志 | false | ### 使用配置文件 你可以创建一个配置文件来自定义工具行为,然后通过`--config`参数指定: ```js // migrate.config.js module.exports = { // 支持的文件扩展名 extensions: [".js", ".jsx", ".ts", ".tsx", ".vue", ".css"], // 忽略的路径 ignorePaths: ["node_modules", "dist", "test"], // 路径别名配置 alias: { "@": "./src", "@components": "./src/components", }, // 分析选项 analysis: { includeCss: true, includeJson: false, includeImages: false, }, } ``` 使用配置文件启动工具: ```bash node src/index.js --config ./migrate.config.js ``` ## 依赖分析报告 工具会生成一个 HTML 格式的依赖关系报告,可以直接在浏览器中打开查看。报告包含: - 文件依赖关系图:可视化展示文件间的依赖关系 - 文件总数和依赖总数统计:快速了解项目规模 - 文件路径搜索功能:方便查找特定文件 - 依赖项展开/折叠功能:灵活浏览依赖树 ## 架构设计 该项目采用模块化设计,主要包含以下模块: - **分析器模块**: 负责分析不同类型文件的依赖关系 - JavaScript/TypeScript 分析器 - CSS 分析器 - Vue 单文件组件分析器 - **解析器模块**: 负责解析各种导入路径 - 路径解析器 - 别名解析器 - **报告生成器**: 生成可视化的依赖关系报告 - **工具函数**: 文件操作、配置管理等通用功能 ## 核心模块说明 项目由以下核心模块组成,每个模块负责特定的功能: ### 分析器模块 (analyzers) - **功能**: 分析不同类型文件中的依赖关系 - **核心文件**: - `jsAnalyzer.js`: 分析 JavaScript/TypeScript 文件中的 import/require 语句 - `cssAnalyzer.js`: 分析 CSS 文件中的 @import 和 url() 引用 - `vueAnalyzer.js`: 分析 Vue 单文件组件中的依赖 - `index.js`: 分析器统一入口,根据文件类型选择合适的分析器 ### 解析器模块 (resolvers) - **功能**: 解析各种类型的导入路径 - **核心文件**: - `pathResolver.js`: 处理相对路径、绝对路径解析 - `aliasResolver.js`: 处理路径别名解析(如 @/components) - `index.js`: 路径解析统一入口 ### 报告生成器 (reporters) - **功能**: 生成可视化的依赖关系报告 - **核心文件**: - `htmlReporter.js`: 生成 HTML 格式的依赖图报告 - `index.js`: 报告生成统一入口 ### 工具函数 (utils) - **功能**: 提供通用功能支持 - **核心文件**: - `fileUtils.js`: 文件操作工具(复制文件、确保目录存在等) - `configUtils.js`: 配置管理(合并配置、检测项目配置等) ### 核心逻辑模块 - **migrator.js**: 迁移工具核心类,协调各模块工作,实现主迁移逻辑 - **index.js**: 程序入口,处理命令行参数,提供用户界面 ## 项目结构 ``` migration-tool/ ├── config/ │ └── default.js # 默认配置 ├── src/ │ ├── analyzers/ # 依赖分析模块 │ │ ├── index.js # 分析器入口 │ │ ├── jsAnalyzer.js # JS/TS 文件分析器 │ │ ├── cssAnalyzer.js # CSS 文件分析器 │ │ └── vueAnalyzer.js # Vue 文件分析器 │ ├── resolvers/ # 路径解析模块 │ │ ├── index.js # 解析器入口 │ │ ├── pathResolver.js # 基础路径解析 │ │ └── aliasResolver.js # 别名路径解析 │ ├── utils/ # 工具函数 │ │ ├── fileUtils.js # 文件操作工具 │ │ └── configUtils.js # 配置工具 │ ├── reporters/ # 报告生成器 │ │ ├── index.js # 报告器入口 │ │ └── htmlReporter.js # HTML 报告生成器 │ ├── migrator.js # 迁移核心类 │ └── index.js # 程序入口 ├── test/ # 用于测试代码 ├── package.json # 项目配置 └── README.md # 项目说明 ``` ## 注意事项 - 工具主要处理相对路径和配置的别名路径导入,对于第三方库的导入会自动忽略 - 如果项目使用了特殊的路径解析策略,可能需要在配置文件中自定义别名配置 - 处理大型项目时可能需要较长时间,请耐心等待 - 对于某些复杂的动态导入或非常规的导入方式可能无法识别 ## 开发与扩展 ### 添加对新文件类型的支持 如果需要支持新的文件类型,可以在`src/analyzers`目录下创建新的分析器,实现`analyzeFile`方法,然后在`src/analyzers/index.js`中注册该分析器。 ### 自定义报告格式 如需自定义依赖报告格式,可以修改`src/reporters/htmlReporter.js`文件或实现一个全新的报告生成器,例如 JSON 或 Markdown 格式。 ## 许可证 MIT