- lint, format, and auto-fix
jsonfiles (files ending with.jsonorrc) - auto-sort
package.jsonfiles (defaulttrue, can be disabled and sorting configured) - ignores
json-with-commentsfiles (default["**/.tsconfig.json", ".vscode/**"]) - ignores certain files by default (default
["**/package-lock.json"])
You'll first need to install ESLint:
npm install eslint --save-devNext, install eslint-plugin-json-format:
npm install eslint-plugin-json-format --save-devAdd json-format to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:
{
"plugins": [
"json-format"
]
}Optional: setup editor integration to format-on-save
cli example:
# lint entire poject for js and various json files
eslint --ext .js,.json,.eslintrc,.babelrc --fix .Note: In order to lint hidden files (e.g.
.eslintrc.json), you'll need to modify/create a.eslintignorein your project root with these contents:.eslintignore:
# eslint ignores hidden files by default
!.*.json
**/node_modules"settings": {
"json/sort-package-json": "standard",
"json/ignore-files": ["**/package-lock.json"],
"json/json-with-comments-files": ["**/tsconfig.json", ".vscode/**"],
}Note: glob patterns use
minimatchagainst path names relative to the project root (cwd)
You can configure the exact sort order of your package.json files (or turn it off entirely with false)
false: disable package.json sorting.
"standard": default from sort-package-json. This is a sane, standard order.
"pro": places scripts and dependencies at the top, reducing need to scroll down to view them. Pros only.
["your", "custom", "order", "here"]: provide an array to manually set the sort order.
to turn off sorting package.json files for example, in your .eslintrc:
{
"plugins": [
"json-format"
],
"settings": {
"json/sort-package-json": false,
}
}to format tsconfig.json (this will strip comments!), in your .eslintrc:
{
"plugins": [
"json-format"
],
"settings": {
"json/json-with-comments-files": [],
}
}change the sort order of package.json:
{
"plugins": [
"json-format"
],
"settings": {
"json/sort-package-json": ["license", "dependencies"],
}
}VSCode:
In order for editor integration via the vscode-eslint extension, you'll need to enable linting json files.
.vscode/settings.json:
to auto-format*
json-with-comments-files, also add"eslint.validate": ["jsonc"](* will strip comments)
- husky + lint-staged set up lint and auto-fix on commit
npm i -D husky lint-stagedin your package.json:
{
...
"lint-staged": {
"*.{js,jsx,ts,tsx,json}": [
"eslint --fix"
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
...
}large amount of code borrowed from eslint-plugin-html
{ "eslint.enable": true, "editor.formatOnSave": true, // enable for eslint-plugin json-format "eslint.validate": ["json"], }