You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于NX的Angular项目指定库间依赖查询方案咨询

大型NX Angular项目的跨库依赖分析方案

我整理了几个适配你NX项目场景的工具和方法,能满足你的依赖分析需求:

一、NX 内置工具(首推)

作为NX项目,自带的依赖分析工具最贴合项目结构:

  • 可视化依赖图谱:运行 nx dep-graph,浏览器会打开交互式图谱,你可以筛选lib-1和lib-2,直观看到两者的依赖关联,甚至能展开到具体文件和导出成员。
  • 精准文本输出:如果需要命令行结果,用 nx show project lib-1 --dependencies --json,结合jq等工具过滤,就能提取和lib-2相关的依赖;要是想找具体导出成员,可配合lint命令解析导入,比如 nx run lib-1:lint --format=json,然后提取其中的导入规则数据。

二、WebStorm/IDEA 原生功能

WebStorm本身就有现成功能,不用额外装插件:

  • 查lib-2的被使用情况:右键点lib-2文件夹,选在项目中查找用法,然后在结果面板里过滤来源为lib-1的条目,就能直接看到哪些成员被lib-1用了,和你要的第二种输出格式匹配。
  • 双向依赖分析:打开依赖分析器(菜单栏View > Tool Windows > Dependency Analyzer),把lib-1和lib-2加进去,就能看到两者之间的具体依赖成员。
  • 快速搜索导入成员:在lib-1文件夹内用正则搜索 import \{([^}]+)\} from.*lib-2,直接匹配所有从lib-2导入的成员,复制整理就行。

三、自定义脚本(完全匹配格式需求)

如果上面的工具输出格式不符合预期,写个简单的Node脚本就能搞定:
遍历目标库的所有TS文件,解析import语句,提取指定库的导出成员,再按你要的格式输出。示例脚本如下:

const fs = require('fs');
const path = require('path');

// 配置目标路径
const sourceLib = './apps/lib-1';
const targetLibRelativePath = '../lib-2';

// 提取单个文件中来自目标库的导入成员
const getImportsFromFile = (filePath) => {
  const content = fs.readFileSync(filePath, 'utf8');
  const importReg = new RegExp(`import \\{([^}]+)\\} from ['"]${targetLibRelativePath}.*['"]`, 'g');
  let match;
  const members = [];
  while ((match = importReg.exec(content)) !== null) {
    match[1].split(',').forEach(item => {
      const member = item.trim();
      if (member) members.push(member);
    });
  }
  return members;
};

// 遍历文件夹所有TS文件
const traverseLib = (dir) => {
  const allImports = [];
  const files = fs.readdirSync(dir);
  for (const file of files) {
    const fullPath = path.join(dir, file);
    const stat = fs.statSync(fullPath);
    if (stat.isDirectory()) {
      allImports.push(...traverseLib(fullPath));
    } else if (fullPath.endsWith('.ts')) {
      allImports.push(...getImportsFromFile(fullPath));
    }
  }
  return allImports;
};

// 去重并格式化输出
const uniqueMembers = [...new Set(traverseLib(sourceLib))];
const formattedResult = uniqueMembers.map(member => {
  // 处理CustomA转CustomAModel的格式
  return member.startsWith('Custom') ? `${member}Model` : member;
});

console.log(formattedResult.join(',\n'));

你可以根据自己的项目结构调整路径、格式规则,比如处理index.ts的导出别名、不同的文件后缀等。

内容的提问来源于stack exchange,提问作者Jax Teller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:41:17