Ban Dependencies with Certain Tags

Specifying which tags a project is allowed to depend on can sometimes lead to a long list of possible options:

1{
2  "sourceTag": "scope:client",
3  // we actually want to say it cannot depend on `scope:admin`
4  "onlyDependOnLibsWithTags": [
5    "scope:shared",
6    "scope:utils",
7    "scope:core",
8    "scope:client"
9  ]
10}
11

The property notDependOnLibsWithTags is used to invert this condition by explicitly specifying which tag(s) it cannot depend on:

1{
2  "sourceTag": "scope:client",
3  // we accept any tag except for `scope:admin`
4  "notDependOnLibsWithTags": ["scope:admin"]
5}
6

In contrast to onlyDependOnLibsWithTags, the notDependOnLibsWithTags will also follow down the entire dependency tree to make sure there are no sub-dependencies that violate this rule. You can also use a combination of these two rules to restrict certain types of projects to be imported:

1{
2  "sourceTag": "type:react",
3  "onlyDependOnLibsWithTags": [
4    "type:react",
5    "type:utils",
6    "type:animation",
7    "type:model"
8  ],
9  // make sure no `angular` code ends up being referenced by react projects
10  "notDependOnLibsWithTags": ["type:angular"]
11}
12

Concepts

Recipes

Reference