我想知道是否有一种方法可以防止某个范围内的所有文件从另一个第二范围导入任何文件。示例:
给出以下项目结构:
project/
├── node_modules/
├── test/
├── src/
│ ├── domain/
│ │ ├── SomeModelClass.ts
│ ├── application/
│ │ ├── SomeApplicationConcern.ts
│ ├── database/
│ │ ├── SomeRepository.ts
├── tsconfig.json
└── tslint.json
我想至少执行其中一些规则:
SomeApplicationConcern
可以从任何地方导入代码。SomeRepository
可以不能从application
SomeModelClass
不能不能从application
或domain
导入代码。使用嵌套的tsconfig.json
文件可以通过某种方式实现吗?
可以使用一些花哨的tslint
规则来实现吗?
我不知道是否有可能这样做。如果检测到禁止的依赖关系,我想得到一个编译错误(或tslint错误,在我的项目中设置为 error 严重性)。
答案 0 :(得分:5)
一些基于快速在线研究的想法:
good-fences
是专用工具,用于限制TypeScript项目中的导入。您必须将其作为一个单独的步骤添加到构建过程中。module
设置为es6
的情况下编译TypeScript代码(如果需要其他module
设置来生成实际运行的代码,则将其编译到单独的输出目录中),然后使用输出上的no-restricted-imports
rule。tsconfig.json
,以便只能使用非相对导入,然后使用tslint-microsoft-contrib
中的no-relative-imports
规则。但是,有talk of deprecating no-relative-imports
。no-restricted-imports
的重新实现,并将其贡献给tslint-eslint-rules。答案 1 :(得分:2)
听起来 Dependency Cruiser 是您正在寻找的工具。您可以将任何您想要的任意规则放在一起,在构建过程中运行它,它会自动报告依赖项违规。它支持 typescript、javascript、commonjs、es6 模块等。
实际上,我一直在寻找这个确切问题的答案,直到最近才偶然发现了这个工具。希望其他人也能发现它很有用。