eslint-plugin: add docs for no-undeclared-imports

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-02-03 17:04:24 +01:00
parent 906af5db53
commit ef73e8626b
@@ -0,0 +1,84 @@
# @backstage/no-undeclared-imports
Forbid imports of external packages that have not been declared in the appropriate dependencies field in `package.json`.
## Usage
Add the rules as follows, it has no options:
```js
"@backstage/no-undeclared-imports": ["error"]
```
The following patterns are considered files used during development, and only need dependencies to be declared in devDependencies:
```python
!src/** # Any files outside of src are considered dev files
src/**/*.test.*
src/**/*.stories.*
src/**/__testUtils__/**
src/**/__mocks__/**
src/setupTests.*
```
## Rule Details
Given the following `package.json`:
```json
{
"name": "@backstage/plugin-foo",
"backstage": {
"role": "frontend-plugin"
},
"dependencies": {
"react": "^17.0.0"
},
"devDependencies": {
"@backstage/core-plugin-api": "^1.0.0"
},
"peerDependencies": {
"@backstage/config": "*"
}
}
```
### Fail
Inside `src/my-plugin.ts`:
```ts
// Should be declared as a dependency
const _ = require('lodash');
import _ from 'lodash';
// React should be a peer dependency in frontend plugins
import react from 'react';
// Should be declared as a dependency, not a dev dependency
import { useApi } from '@backstage/core-plugin-api';
```
Inside `src/my-plugin.test.ts` (a test file):
```ts
// Should be declared as a dev dependency
const _ = require('lodash');
import _ from 'lodash';
```
### Pass
Inside `src/my-plugin.ts`:
```ts
// Declared in peerDependencies, so it is allowed
import { ConfigReader } from '@backstage/config';
```
Inside `src/my-plugin.test.ts` (a test file):
```ts
// Declared as a dev dependency inside a test file
import { useApi } from '@backstage/core-plugin-api';
```