问题
I wonder if there is a way to prevent all files in a certain scope from importing any file from a different second scope. Example:
Given this project structure:
project/
├── node_modules/
├── test/
├── src/
│ ├── domain/
│ │ ├── SomeModelClass.ts
│ ├── application/
│ │ ├── SomeApplicationConcern.ts
│ ├── database/
│ │ ├── SomeRepository.ts
├── tsconfig.json
└── tslint.json
I would like to enforce at least some of these rules:
SomeApplicationConcern
can import code from anywhere.SomeRepository
can not import code fromapplication
SomeModelClass
can not import code from neitherapplication
nordomain
.
Can it be achieved somehow using nested tsconfig.json
files?
Can it be achieved using some fancy tslint
rules?
I have no clue if anything like this is possible. I would like to get a compilation error (or tslint error, which is set to error severity in my project) if a forbidden dependency is detected.
回答1:
A few ideas based on some quick online research:
- good-fences is a dedicated tool to restrict imports in a TypeScript project. You'd have to add it to your build process as a separate step.
- Compile your TypeScript code with
module
set toes6
(to a separate output directory if you need a differentmodule
setting to generate the code you actually run) and then run ESLint with the no-restricted-imports rule on the output. - Set up both your runtime environment and your
tsconfig.json
so that you can use only non-relative imports, and then use theno-relative-imports
rule from tslint-microsoft-contrib. However, there was talk of deprecating no-relative-imports. - Write your own TSLint-based reimplementation of ESLint's
no-restricted-imports
and contribute it to tslint-eslint-rules.
来源:https://stackoverflow.com/questions/52579681/typescript-prevent-imports-from-certain-directory-in-project