---
title: "EDM115 - Project EDM115&#x2F;js-imports-sort"
canonical_url: "https://edm115.github.io/website/website/projects/js-imports-sort"
last_updated: "2026-08-20T22:18:00.618Z"
meta:
  description: "A simple script to sort Javascript imports the way I want"
  "og:description": "A simple script to sort Javascript imports the way I want"
  "og:title": "EDM115 - Project EDM115/js-imports-sort"
---

Home

# js-imports-sort

A simple script to sort Javascript imports the way I want

## Rules

### Order

1. No names (side-effect)  
   `import "module"`
2. Everything  
   `import * from "module"`
3. Defaults  
   `import a from "module"`
4. Named  
   `import { a, b } from "module"`

### Sorting

- The source is prioritized over the import
- Special characters comes first
- Numbers comes second
- Lowercase letters comes third
- Uppercase letters comes fourth
- In case an import contains both defaults and named, the defaults are prioritized and put first

## Features

- Supports multiline imports
- Adds a newline between imports from different types

## Limitations

- Doesn’t work yet with `require()` syntax
- Can’t really sort the imports from a module (ex : `import {z, b}, s, a from "c"` becomes `import a, s, {b, z} from "c"`), due to how it perceives mixed imports
- Doesn’t support semicolons at the end of the import
- Doesn’t support comments
- Doesn’t deduplicate imports
- Might consider wrongfully imports that are in the middle of the file (ex : `const a = await import("module")`) as imports to sort
- Doesn’t support TypeScript imports (ex Types)
- ESLint plugin not yet implemented

## Example

js

```
import "@mdi/font/css/materialdesignicons.css"
import "vuetify/styles"

import * from "node:fs"

import js from "@eslint/js"
import vuetify, { transformAssetUrls } from "vite-plugin-vuetify"

import { defineNuxtPlugin } from "#app"
import { createVuetify } from "vuetify"
import {
  en,
  fr
} from "vuetify/locale"
```

## Usage

Install the package

bash

```
npm install js-imports-sort
```

- In a javascript filejs

  ```
  import sortImports from 'js-imports-sort'

  const code = `
  import { createVuetify } from "vuetify"
  import js from "@eslint/js"
  import vuetify, { transformAssetUrls } from "vite-plugin-vuetify"
  import * from "node:fs"
  import { defineNuxtPlugin } from "#app"
  import "vuetify/styles"
  import {
    en,
    fr
  } from "vuetify/locale"
  import "@mdi/font/css/materialdesignicons.css"
  `

  const sortedCode = sortImports(code)
  console.log(sortedCode)
  ```


- In a shellbash

  ```
  npx js-imports-sort@latest <file> -r
  ```

  Params available :
  - `-r` or `--replace` : Replace the file content with the sorted imports
  - `-o <path>` or `--output <path>` : Output the sorted imports in a different file. Have to be used with `-r`
  - `-l` or `--log` : Output the sorted imports in the console  
     At least one of `-r` or `-l` has to be used