node/no-restricted-import

March 28, 2020 Β· View on GitHub

disallow specified modules when loaded by import declarations

πŸ“– Rule Details

This rule allows you to specify modules that you don’t want to use in your application.

Options

The rule takes an array as options: the names of restricted modules.

{
  "node/no-restricted-import": ["error", [
    "foo-module",
    "bar-module"
  ]]
}

You may also specify a custom message for each module you want to restrict as follows:

{
  "node/no-restricted-import": ["error", [
    {
      "name": "foo-module",
      "message": "Please use foo-module2 instead."
    },
    {
      "name": "bar-module",
      "message": "Please use bar-module2 instead."
    }
  ]]
}

And you can use glob patterns in the name property.

{
  "node/no-restricted-import": ["error", [
    {
      "name": "lodash/*",
      "message": "Please use xyz-module instead."
    },
    {
      "name": ["foo-module/private/*", "bar-module/*", "!baz-module/good"],
      "message": "Please use xyz-module instead."
    }
  ]]
}

And you can use absolute paths in the name property.

module.exports = {
  overrides: [
    {
      files: "client/**",
      rules: {
        "node/no-restricted-import": ["error", [
          {
            name: path.resolve(__dirname, "server/**"),
            message: "Don't use server code from client code."
          }
        ]]
      }
    },
    {
      files: "server/**",
      rules: {
        "node/no-restricted-import": ["error", [
          {
            name: path.resolve(__dirname, "client/**"),
            message: "Don't use client code from server code."
          }
        ]]
      }
    }
  ]
}

Examples

Examples of incorrect code for this rule with sample "fs", "cluster", "lodash" restricted modules:

/*eslint node/no-restricted-import: ["error", ["fs", "cluster", "lodash/*"]]*/

import fs from 'fs';
import cluster from 'cluster';
import pick from 'lodash/pick';

Examples of correct code for this rule with sample "fs", "cluster", "lodash" restricted modules:

/*eslint node/no-restricted-import: ["error", ["fs", "cluster", "lodash/*"]]*/

import crypto from 'crypto';
import _ from 'lodash';
/*eslint node/no-restricted-import: ["error", ["fs", "cluster", { "name": ["lodash/*", "!lodash/pick"] }]]*/

import pick from 'lodash/pick';

πŸ”Ž Implementation