The @nobears-front-end/eslint package provides a flexible configuration system for ESLint that combines Antfu ESLint settings with custom presets and user-defined configurations. This allows you to quickly set up consistent linting across your projects while maintaining the flexibility to customize rules as needed.
The simplest configuration uses the default settings:
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory();
The package provides three preset configurations optimized for different project types:
nuxt-app)Optimized for full Nuxt applications with Vue components, TypeScript, and Nuxt-specific features:
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory({
preset: "nuxt-app",
});
Includes:
nuxt-module)Designed for Nuxt modules and packages:
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory({
preset: "nuxt-module",
});
Includes:
ts-lib)Optimized for standalone TypeScript libraries:
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory({
preset: "ts-lib",
});
Includes:
You can customize the underlying Antfu ESLint configuration by passing options to the antfu property:
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory({
preset: "nuxt-app",
antfu: {
ignores: ["dist", "node_modules", "*.yaml", "*.yml", "workflows/ci.yml", ".gitlab-ci.yml", ".release-it.ts", "*.md"],
stylistic: {
indent: 4,
quotes: "double",
semi: true,
},
rules: {
"no-console": "warn",
"vue/multi-word-component-names": "off",
},
},
});
You can extend the base configuration with additional ESLint configurations:
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory(
{
preset: "nuxt-app",
antfu: {
ignores: ["dist", "node_modules", "*.yaml", "*.yml", "workflows/ci.yml", ".gitlab-ci.yml", ".release-it.ts", "*.md"],
},
},
// Custom configuration for test files
{
files: ["**/*.test.ts", "**/*.spec.ts"],
rules: {
"no-console": "off",
"test/prefer-lowercase-title": ["error", {
ignore: ["describe"],
}],
},
},
// Custom configuration for markdown files
{
files: ["**/*.md"],
ignores: ["**/*.md"],
},
);
import vueI18n from "@intlify/eslint-plugin-vue-i18n";
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory(
{
preset: "nuxt-app",
antfu: {
ignores: ["dist", "node_modules", "*.yaml", "*.yml", "workflows/ci.yml", ".gitlab-ci.yml", ".release-it.ts", "*.md"],
},
},
...vueI18n.configs.recommended,
{
rules: {},
settings: {
"vue-i18n": {
localeDir: "./src/i18n/messages/*.{ts}",
},
"messageSyntaxVersion": "^11.0.0",
},
},
);
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory(
{
preset: "nuxt-app",
antfu: {
rules: {
"ts/no-explicit-any": "warn",
"ts/no-unused-vars": ["error", {
vars: "all",
args: "none",
ignoreRestSiblings: true
}],
"ts/consistent-type-definitions": "off",
},
},
},
{
files: ["**/*.d.ts"],
rules: {
"ts/no-explicit-any": "off",
},
},
);
import { eslintFactory } from "@nobears-front-end/eslint";
export default eslintFactory(
{
preset: "nuxt-app",
antfu: {
rules: {
"import/order": ["error", {
"groups": [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index"
],
"newlines-between": "always",
"alphabetize": {
"order": "asc",
"caseInsensitive": true
}
}],
"import/no-duplicates": "error",
},
},
},
);
When using with Nuxt, you can configure ESLint in your nuxt.config.ts:
export default defineNuxtConfig({
eslint: {
config: {
stylistic: {
indent: 4,
quotes: "double",
semi: true,
},
standalone: false,
autoInit: false,
},
},
});