在本文中,我将通过在JavaScript库Polly.JS上使用Eunice来演示开发工具。
我以前发布过一个关于在React上使用Eunice的案例研究; 但是,这不是对Eunice的出色介绍。 它有几个配置步骤,React更复杂,并且在Eunice中有很多展示。
Eunice 7.3中还有一个新功能,可以自动从依赖项中推断出潜在的结构。 在该功能之前,仅通过手动编写YAML指定文件和目录时才存在此结构。 即使正在分析的源代码已经具有协调的单向依赖关系,情况也是如此。
Eunice分析JavaScript源代码,因此我从GitHub存储库https://github.com/Netflix/pollyjs克隆了0003c0e提交。
git clone https ://github.com/Netflix/pollyjs.git pollyjs-eunice
cd pollyjs-eunice
git reset --hard 0003 c0e
可以从NPM下载Eunice并运行它,而无需使用NPX进行安装:
npx eunice
系统将提示您接受EULA。 Eunice可免费用于开源项目,也可免费用于教育和培训。 因此,对Polly.JS的贡献以及后续的案例研究均符合资格。 还有一个评估期,可以试用Eunice的封闭源商业软件。
分析将输出一个eunice.html文件。 在浏览器中打开文件显示以下内容:
文本编辑器的左侧显示了Eunice对Polly.JS的分析产生的6,927行YAML 。
右侧是Polly.JS中所有依赖项和根目录的图形表示。 绿色和红色计数箭头代表相关性,分类如下:
1,102个匹配(绿色)和仅22个(红色)不匹配的依赖项表明Eunice在Polly.JS中发现绝大多数依赖项是单向的。 已经发现的一些双向依赖关系位于目录结构的深处(例如,包中的17个),即使有任何后果,也不太可能造成太大的影响。
上面显示的根目录中没有堆栈; 但是,选择packages / @ pollyjs子目录将显示其内容之一:
上面显示的5个级别的排列未在源代码中指定,并且已由Eunice推断出。 仅当项目具有单向依赖性时,它才会这样做。
即使没有任何有关Polly.JS如何工作的先验知识,许多目录之间的关系似乎也很直观。 例如:
cli位于顶层,因为它可能是运行其他事物的一种方式。core位于中间层,它可能是由项目的其他部分构建的,但是还使用了与其余部分共享的一些较低层的功能project.adapter和persister的级别位于第二到底部级别。 它们的名称不像其他适配器和持久器那样具体,因此其他名称可能会扩展它们。utils在底层是自己的,因为它在其他地方使用,但本身并未使用任何东西。
可以通过选择计数箭头来调查Eunice找到的依赖关系,这会列出其中包含的依赖关系。 例如,cli下的单个依赖项位于节点服务器上:
Eunice显示了依赖关系两侧的计数箭头。 上面示例中的依赖项也作为依赖项包括在上面的3个节点服务器中:
也可以选择核心上方的从属箭头,以调查上述项目如何使用它:
依赖核心的人似乎只是在使用它进行集成测试,而上面的内容似乎在运行时没有使用它。 查看Polly.JS入门页面 ,您可以看到运行时在核心注册了上面的适配器和持久性。 这看起来像是插件关系形式的潜在倒置依赖关系。
可以对适配器进行相同类型的依赖项调查:
依赖项列表显示了上面使用它的几个适配器,并查看Polly.JS定制适配器页面,确认至少获取并对其进行了xhr扩展。
核心对适配器有依赖性,但这仅用于测试。
我上面研究过的packages / @ pollyjs目录用于创建NPM软件包,因此至少在运行时看到存在单向依赖关系就不足为奇了。 但是,似乎跨这些软件包的集成测试也具有单向依赖性。
Eunice还可以用于调查包的子目录内部。 在这里,跨目录结构可能存在运行时双向依赖关系。 由于Polly.JS中似乎没有任何内容,因此在本案例研究中我没有这样做。 如果您想对此进行演示,请参阅React案例研究 。
您可以在此处与该案例研究的Eunice分析进行交互。
即使Eunice显示Polly.JS已经具有单向依赖关系,但在进行此类项目时使用Eunice仍然是有益的。
通过强调可以在新组中命名的通用性,例如通过将文件和目录移动到新目录中,Eunice可能显示出附加结构的潜力,从而使代码更具自描述性。
刚接触该项目的人可能没有意识到依赖关系是与目录结构协调一致的。 使用Eunice查看结构和依赖性可以帮助提高意识。
代替Eunice推断堆栈,可以在源代码控制中指定它们,从而规范化关系并使每个人都清楚它们是有意的。
在https://devsnicket.com/eunice上找到更多信息
格雷厄姆·戴森(Graham Dyson)-Eunice的创造者
先前发布在https://devsnicket.com/eunice/case-studies/pollyjs
From: https://hackernoon.com/how-to-use-pollyjs-dependencies-with-eunice-1a5b3yjv