Skip to main content


Disallow require statements except in import statements.

In other words, the use of forms such as var foo = require("foo") are banned. Instead use ES6 style imports or import foo = require("foo") imports.

module.exports = {
"rules": {
"@typescript-eslint/no-var-requires": "error"

Try this rule in the playground ↗


var foo = require('foo');
const foo = require('foo');
let foo = require('foo');
Open in Playground


This rule accepts the following options:

type Options = [
/** Patterns of import paths to allow requiring from. */
allow?: string[];

const defaultOptions: Options = [{ allow: [] }];


A 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$']}:

const foo = require('../data.json');
Open in Playground

When Not To Use It

If your project frequently uses older CommonJS requires, then this rule might not be applicable to you. If only a subset of your project uses requires then you might consider using ESLint disable comments for those specific situations instead of completely disabling this rule.