UNPKG

@typescript-eslint/eslint-plugin

Version:
97 lines (66 loc) 2.6 kB
--- description: 'Disallow invocation of `require()`.' --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; > 🛑 This file is source code, not the primary documentation location! 🛑 > > See **https://typescript-eslint.io/rules/no-require-imports** for documentation. Prefer the newer ES6-style imports over `require()`. ## Examples <Tabs> <TabItem value="❌ Incorrect"> ```ts const lib1 = require('lib1'); const { lib2 } = require('lib2'); import lib3 = require('lib3'); ``` </TabItem> <TabItem value="✅ Correct"> ```ts import * as lib1 from 'lib1'; import { lib2 } from 'lib2'; import * as lib3 from 'lib3'; ``` </TabItem> </Tabs> ## Options ### `allow` An array of strings. These strings will be compiled into regular expressions with the `u` flag and be used to test against the imported path. A common use case is to allow importing `package.json`. This is because `package.json` commonly lives outside of the TS root directory, so statically importing it would lead to root directory conflicts, especially with `resolveJsonModule` enabled. You can also use it to allow importing any JSON if your environment doesn't support JSON modules, or use it for other cases where `import` statements cannot work. With `{allow: ['/package\\.json$']}`: <Tabs> <TabItem value="❌ Incorrect"> ```ts option='{ "allow": ["/package.json$"] }' console.log(require('../data.json').version); ``` </TabItem> <TabItem value="✅ Correct"> ```ts option='{ "allow": ["/package.json$"] }' console.log(require('../package.json').version); ``` </TabItem> </Tabs> ### `allowAsImport` When set to `true`, the `import x = require(...)` declaration won't be reported. This is useful if you use certain module options that require strict CommonJS interop semantics. With `{allowAsImport: true}`: <Tabs> <TabItem value="❌ Incorrect"> ```ts option='{ "allowAsImport": true }' var foo = require('foo'); const foo = require('foo'); let foo = require('foo'); ``` </TabItem> <TabItem value="✅ Correct"> ```ts option='{ "allowAsImport": true }' import foo = require('foo'); import foo from 'foo'; ``` </TabItem> </Tabs> ## When Not To Use It If your project frequently uses older CommonJS `require`s, then this rule might not be applicable to you. If only a subset of your project uses `require`s then you might consider using [ESLint disable comments](https://eslint.org/docs/latest/use/configure/rules#using-configuration-comments-1) for those specific situations instead of completely disabling this rule. ## Related To - [`no-var-requires`](./no-var-requires.mdx)