问题
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:
SomeApplicationConcerncan import code from anywhere.SomeRepositorycan not import code fromapplicationSomeModelClasscan not import code from neitherapplicationnordomain.
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
moduleset toes6(to a separate output directory if you need a differentmodulesetting 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.jsonso that you can use only non-relative imports, and then use theno-relative-importsrule from tslint-microsoft-contrib. However, there was talk of deprecating no-relative-imports. - Write your own TSLint-based reimplementation of ESLint's
no-restricted-importsand contribute it to tslint-eslint-rules.
来源:https://stackoverflow.com/questions/52579681/typescript-prevent-imports-from-certain-directory-in-project