Note: updated on 2020-05-29.

In this article I will show you how to setup ESLint and Prettier for a Svelte.js project.

1. Installation

You need to install the following packages as dev dependencies:

npm install --save-dev prettier eslint prettier-plugin-svelte eslint-plugin-svelte3

2. Configuration

2.1. ESLint

Create an .eslintrc.json file in your project root directory:

{
  "env": {
    "browser": true,
    "es6": true
  },
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 2019,
    "sourceType": "module"
  },
  "plugins": ["svelte3"],
  "extends": ["eslint:recommended"],
  "overrides": [
    {
      "files": ["**/*.svelte"],
      "processor": "svelte3/svelte3"
    }
  ],
  "rules": {
    // ...
  }
}

You can see a list of available ESLint rules on the official website. (Or you can use the default settings and remove the "rules" part of the configuration.)

It also makes sense to ignore the default rollup.config.js file. Create a new file .eslintignore with the following content:

rollup.config.js

2.2. Prettier

You also need a configuration file for prettier. Create a file called .prettierrc.json in your project directory. These are my preferred settings:

{
  "tabWidth": 2,
  "semi": false,
  "singleQuote": true,
  "trailingComma": "es5",
  "plugins": ["prettier-plugin-svelte"]
}

The important entry is the plugins entry, the rest are options that I like. You can adjust the configuration to your liking.

You can see all options at the official prettier homepage.

If you want to know more about how to run prettier and eslint together, you can read the prettier documentation.

3. How to Use

You can format the code with the prettier CLI. Assuming you want to format your main app file in src/App.svelte:

prettier --write --plugin-search-dir=. src/App.svelte

You can also run the ESlint CLI:

eslint --fix src/App.svelte

Or you can use package.json to create a script to format all files with a .svelte and a .js extension. Add this script to package.json:

{
  "scripts": {
    "fix": "npx eslint --fix \"{,!(node_modules|public)/**/}*.{js,svelte}\"",
    "format": "npx prettier --write \"{,!(node_modules|public)/**/}*.{js,svelte}\""
  }
}

The script makes use of a glob to format files recursively.
It ignores the node_modules and the public folder, then formats all files with .js or .svelte extension.

Further Reading