-
Notifications
You must be signed in to change notification settings - Fork 27k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add rootDir setting to eslint-plugin-next #27918
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@@ -1,4 +1,4 @@ | |||
const NodeAttributes = require('../utils/nodeAttributes.js') | |||
const NodeAttributes = require('../utils/node-attributes.js') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I renamed this file to align with other files in the repo.
{ | ||
"compilerOptions": { | ||
"module": "commonjs", | ||
"target": "es2019" | ||
}, | ||
"exclude": ["node_modules"] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using this with // @ts-check
gives a basic level of type-checking.
# `@next/eslint-plugin-next` | ||
|
||
Documentation for `@next/eslint-plugin-next` can be found at: | ||
https://nextjs.org/docs/basic-features/eslint#eslint-plugin |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had to search for the docs when first using the plugin, hopefully this will help others.
@@ -20,7 +22,7 @@ const fsExistsSyncCache = {} | |||
module.exports = { | |||
meta: { | |||
docs: { | |||
description: 'Prohibit full page refresh for nextjs pages', | |||
description: 'Prohibit full page refresh for Next.js pages', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assumed this was a typo.
This comment has been minimized.
This comment has been minimized.
Stats from current PRDefault Build (Decrease detected ✓)General
Page Load Tests Overall decrease
|
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
/ failed reqs | 0 | 0 | ✓ |
/ total time (seconds) | 2.633 | 2.657 | |
/ avg req/sec | 949.54 | 940.79 | |
/error-in-render failed reqs | 0 | 0 | ✓ |
/error-in-render total time (seconds) | 1.447 | 1.448 | 0 |
/error-in-render avg req/sec | 1727.82 | 1726.67 |
Client Bundles (main, webpack, commons)
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
745.HASH.js gzip | 179 B | 179 B | ✓ |
framework-HASH.js gzip | 42.2 kB | 42.2 kB | ✓ |
main-HASH.js gzip | 23.1 kB | 23.1 kB | ✓ |
webpack-HASH.js gzip | 1.5 kB | 1.5 kB | ✓ |
Overall change | 67 kB | 67 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31.1 kB | 31.1 kB | ✓ |
Overall change | 31.1 kB | 31.1 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
_app-HASH.js gzip | 980 B | 980 B | ✓ |
_error-HASH.js gzip | 194 B | 194 B | ✓ |
amp-HASH.js gzip | 312 B | 312 B | ✓ |
css-HASH.js gzip | 329 B | 329 B | ✓ |
dynamic-HASH.js gzip | 2.52 kB | 2.52 kB | ✓ |
head-HASH.js gzip | 350 B | 350 B | ✓ |
hooks-HASH.js gzip | 904 B | 904 B | ✓ |
image-HASH.js gzip | 4.13 kB | 4.13 kB | ✓ |
index-HASH.js gzip | 261 B | 261 B | ✓ |
link-HASH.js gzip | 1.66 kB | 1.66 kB | ✓ |
routerDirect..HASH.js gzip | 319 B | 319 B | ✓ |
script-HASH.js gzip | 387 B | 387 B | ✓ |
withRouter-HASH.js gzip | 320 B | 320 B | ✓ |
bb14e60e810b..30f.css gzip | 125 B | 125 B | ✓ |
Overall change | 12.8 kB | 12.8 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
_buildManifest.js gzip | 491 B | 491 B | ✓ |
Overall change | 491 B | 491 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
index.html gzip | 531 B | 531 B | ✓ |
link.html gzip | 544 B | 544 B | ✓ |
withRouter.html gzip | 523 B | 523 B | ✓ |
Overall change | 1.6 kB | 1.6 kB | ✓ |
Webpack 4 Mode (Decrease detected ✓)
General
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
buildDuration | 12.3s | 12.1s | -249ms |
buildDurationCached | 4.8s | 4.7s | -36ms |
nodeModulesSize | 49.1 MB | 49.1 MB | ✓ |
Page Load Tests Overall decrease ⚠️
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
/ failed reqs | 0 | 0 | ✓ |
/ total time (seconds) | 2.654 | 2.653 | 0 |
/ avg req/sec | 942.07 | 942.27 | +0.2 |
/error-in-render failed reqs | 0 | 0 | ✓ |
/error-in-render total time (seconds) | 1.438 | 1.443 | |
/error-in-render avg req/sec | 1738.05 | 1732.34 |
Client Bundles (main, webpack, commons)
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
17.HASH.js gzip | 185 B | 185 B | ✓ |
677f882d2ed8..HASH.js gzip | 14 kB | 14 kB | ✓ |
framework.HASH.js gzip | 41.9 kB | 41.9 kB | ✓ |
main-HASH.js gzip | 10.6 kB | 10.6 kB | ✓ |
webpack-HASH.js gzip | 1.19 kB | 1.19 kB | ✓ |
Overall change | 67.9 kB | 67.9 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31.3 kB | 31.3 kB | ✓ |
Overall change | 31.3 kB | 31.3 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
_app-HASH.js gzip | 965 B | 965 B | ✓ |
_error-HASH.js gzip | 3.71 kB | 3.71 kB | ✓ |
amp-HASH.js gzip | 552 B | 552 B | ✓ |
css-HASH.js gzip | 333 B | 333 B | ✓ |
dynamic-HASH.js gzip | 2.71 kB | 2.71 kB | ✓ |
head-HASH.js gzip | 2.97 kB | 2.97 kB | ✓ |
hooks-HASH.js gzip | 911 B | 911 B | ✓ |
index-HASH.js gzip | 231 B | 231 B | ✓ |
link-HASH.js gzip | 1.64 kB | 1.64 kB | ✓ |
routerDirect..HASH.js gzip | 298 B | 298 B | ✓ |
script-HASH.js gzip | 2.95 kB | 2.95 kB | ✓ |
withRouter-HASH.js gzip | 294 B | 294 B | ✓ |
e025d2764813..52f.css gzip | 125 B | 125 B | ✓ |
Overall change | 17.7 kB | 17.7 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
_buildManifest.js gzip | 498 B | 498 B | ✓ |
Overall change | 498 B | 498 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js eslint-plugin-glob-paths | Change | |
---|---|---|---|
index.html gzip | 577 B | 577 B | ✓ |
link.html gzip | 589 B | 589 B | ✓ |
withRouter.html gzip | 570 B | 570 B | ✓ |
Overall change | 1.74 kB | 1.74 kB | ✓ |
This PR adds documentation for the new `rootDir` setting (#27918), and for `next/no-html-link-for-pages`. ## Documentation / Examples - [x] Make sure the linting passes
## Introduction This PR enables setting a `rootDir` for a Next.js project, and follows the same pattern used by [`@typescript-eslint/parser`](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#parseroptionsproject). ## Details Previously, users had to pass paths to the rule itself. ```js module.exports = { rules: { "@next/next/no-html-link-for-pages": [ "error", // This could be a string, or array of strings. "/packages/my-app/pages", ], }, }; ``` With this PR, this has been simplified (the previous implementation still works as expected). ```js module.exports = { settings: { next: { rootDir: "/packages/my-app", }, }, rules: { "@next/next/no-html-link-for-pages": "error", }, }; ``` Further, this rule allows the use of globs, again aligning with `@typescript-eslint/parser`. ```js module.exports = { settings: { next: { // Globs rootDir: "/packages/*", rootDir: "/packages/{app-a,app-b}", // Arrays rootDir: ["/app-a", "/app-b"], // Arrays with globs rootDir: ["/main-app", "/other-apps/*"], }, }; ``` This enables users to either provide per-workspace configuration with overrides, or to use globs for situations like monorepos where the apps share a domain (micro-frontends). This doesn't solve, but improves vercel#26330. ## Feature - [x] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [x] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [x] Make sure the linting passes
Introduction
This PR enables setting a
rootDir
for a Next.js project, and follows the same pattern used by@typescript-eslint/parser
.Details
Previously, users had to pass paths to the rule itself.
With this PR, this has been simplified (the previous implementation still works as expected).
Further, this rule allows the use of globs, again aligning with
@typescript-eslint/parser
.This enables users to either provide per-workspace configuration with overrides, or to use globs for situations like monorepos where the apps share a domain (micro-frontends).
This doesn't solve, but improves #26330.
Feature
fixes #number
contributing.md
Documentation / Examples