28

I want to config Organize Imports's order.

Right now, it moves node_modules related import statement at the very top, and local ts file at very bottom:

Normal:

import myFunction from './myFunction';
import fs from 'fs';

console.log(fs)
console.log(myFunction)

After running Organize Imports command:

import fs from 'fs';
import myFunction from './myFunction';

console.log(fs)
console.log(myFunction)

What I want to do is reverse the order, I want node_modules to be very bottom, local imports to be very top.

How can I achieve this behaviour?

Audwin Oyong
  • 2,247
  • 3
  • 15
  • 32
Joseph
  • 3,974
  • 7
  • 34
  • 67
  • I am not familiar with the Organize Imports at all, but quick read-through of https://marketplace.visualstudio.com/items?itemName=alfnielsen.vsc-organize-imports indicates that you will need to define your `groups` such that you have `relative` and `relativeDirect` higher in the array. – abondoa Mar 25 '20 at 23:08
  • See https://stackoverflow.com/a/72553783/836330 for "group-aware Organize Imports" and https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_68.md#group-aware-organize-imports. – Mark Jun 09 '22 at 01:34

1 Answers1

36

The built-in "Organize Imports" functionality has no configuration, according to the documentation.

You can customize import ordering using a third-party extension, such as alfnielsen.vsc-organize-imports or by using a separate linting tool like eslint or tslint.

In eslint (my recommendation, since tslint has been deprecated), you'll need to also use a plugin like eslint-plugin-import to get the more-specific configuration you want. Then, instead of using the VSCode "Organize Imports" action, you'll use the "Fix All" action or a invoke a quick fix.

Here's a partial example .eslint.js config file.

module.exports = {
  plugins: [
    "import",
  ],
  rules: {
    "import/order": [
      "error",
      {
        groups: [
          "index",
          "sibling",
          "parent",
          "internal",
          "external",
          "builtin"
        ]
      }
    ]
  }
}
Cameron Little
  • 3,487
  • 23
  • 35