eslint-config-springernature
![NPM version](http://img.shields.io/npm/v/%40springernature%2Feslint-config.svg)
ESLint shareable config used at Springer Nature.
Requirements
This package requires:
- Node version 18 or greater due to support for v16 running out soon this year. Please have a look at our open source support page for details on which versions of node we support, and why. Version 5 of this package supports Node versions >=8 and <16.
eslint
version 8.38.0 or greater (due to eslint-plugin-unicorn v47.0.0).
Installation
Our default export contains all of our ESLint rules, and includes the following plugins:
These plugins are defined as peerDependencies
in eslint-config-springernature
, which means that you will need to add these to your own project's devDependencies
.
You can find the correct version of each dependency by using npm info
:
npm info "@springernature/eslint-config@latest" peerDependencies
There are several ways to do install this without effort using the install-peerdeps tool.
Using Yarn
Manual
Run yarn add --dev <dependency>@<version>
for each peerDependency listed by the npm info
command above.
Automated
If you have npx
available (included with npm 5+) then you can run npx install-peerdeps --dev @springernature/eslint-config
to install the dependencies automatically. This will detect and use Yarn if available.
Using NPM
If you're using npm 5+, then you can use npx
to install the dependencies automatically:
npx install-peerdeps --dev @springernature/eslint-config
If you're using an older version of npm where npx
is not available, you can manually install and run install-peerdeps
.
npm install -g install-peerdeps
install-peerdeps --dev @springernature/eslint-config
The cli will produce and run a command like:
npm install --save-dev @springernature/eslint-config eslint@^
Alternatively, you can use the following shell script:
(
export PKG=@springernature/eslint-config;
npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"
)
Usage
Add one of the following to your .eslintrc
file:
core
- The core Springer Nature code style (with ES6 support)legacy
- For legacy JS environments (without ES6 support)
These optional extensions can be added in addition to one of the above configurations:
Examples
{
"extends": "@springernature/eslint-config",
"rules": {
},
"overrides": [
]
}
{
"extends": "@springernature/eslint-config/legacy",
"rules": {
},
"overrides": [
]
}
{
"extends": [
"@springernature/eslint-config",
"@springernature/eslint-config/node",
"@springernature/eslint-config/jest"
],
"rules": {
},
"overrides": [
]
}
Ignore files/folders
You can optionally create an .eslintignore
file to ignore file paths. The .eslintignore
file is a plain text file where each line is a glob pattern indicating which paths should be omitted from linting. For example, the following will ignore all files in the tests
and coverage
folders:
**/tests/*
**/coverage/*
If you want to ignore the same files and folders contained in the .gitignore
file, you can do so by omitting the creation of the .eslintignore
file and using the following command for linting instead:
eslint --ignore-path .gitignore **/*.js
Per-project rules
We've chosen a sensible set of rules and plugins that helps us catch the most common errors while writing JavaScript. Using a unified linting configuration across Springer Nature makes it easier to share code and resources between different teams and projects.
In certain situations it may be necessary to specify per-project rules. A typical use case is when migrating an old project using a different linter to this eslint config, where it may not be possible to fix all the issues raised by eslint in one go and we opt instead for an iterative approach.
If you need to add per-project rules, consider changing them from error
to warn
instead of disabling them completely. This will allow any tests to pass, but will help you remember that a rule has been overwritten:
"rules": {
"block-scoped-var": "warn",
}
If the problem is in one specific line of code, consider using the eslint-disable-line
or eslint-disable-next-line
directives, instead of disabling a rule for your whole project. For example:
require('polyfill');
const zero;
Please use per-project rules and eslint-disable-line
and eslint-disable-next-line
directives sparingly and only when strictly necessary.
Environments and configuration overrides
It's common to have specific files or directories that require different settings. For example, a folder in your project may contains tests that use mocha
. Instead of defining the global variables that mocha
expects manually, you can use environments
and overrides
. You can also change specific rules for these files.
"overrides": [
{
"files": "tests/**/*.js",
"env": {
"browser": true,
"jquery": true,
"mocha": true
},
"rules": {
"no-console": "warn"
}
}
]
Contributing
This package is used by many active Springer Nature projects. We always welcome issues and pull requests, but we may not always be able to merge your suggestions.
If we decide that we can't merge your PR or act on your issue, it's nothing personal! We love to see new contributors, and we strive to provide a welcoming and inclusive environment.