mirror of
https://github.com/reactjs/react.dev.git
synced 2026-02-21 19:31:57 +00:00
While rewriting the compiler docs I happened to notice some deadlinks. This PR adds a new `yarn deadlinks` script to identify all deadlinks. I decided to make this a script for now for simplicity but in the future could be ported to an ESlint rule. The script handles: - [x] checks images correctly (images are stored in /public but links can omit the /public) - [x] looks up React error codes for dynamic error pages - [x] lints links to contributors and uses URL from acknowledgements page if the member is no longer active on the core team - [x] special injected anchor tags like #recap and #challenges Example: ``` yarn run v1.22.22 $ node scripts/deadLinkChecker.js Checking 177 markdown files... Fetched 552 React error codes src/content/learn/add-react-to-an-existing-project.md:23:58 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/add-react-to-an-existing-project.md:27:45 Link text: benefit from the best practices URL: /learn/start-a-new-react-project#can-i-use-react-without-a-framework ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/add-react-to-an-existing-project.md:152:269 Link text: a React framework URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/synchronizing-with-effects.md:735:18 Link text: framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/typescript.md:16:3 Link text: Common types from `@types/react` URL: /learn/typescript/#useful-types ✗ Target file not found for: /learn/typescript/ src/content/learn/typescript.md:17:3 Link text: Further learning locations URL: /learn/typescript/#further-learning ✗ Target file not found for: /learn/typescript/ src/content/learn/typescript.md:23:5 Link text: production-grade React frameworks URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/you-might-not-need-an-effect.md:29:399 Link text: frameworks URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/you-might-not-need-an-effect.md:754:106 Link text: frameworks URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/learn/your-first-component.md:218:1 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react/ViewTransition.md:146:248 Link text: reveal content URL: /link-to-suspense-below ✗ Target file not found for: /link-to-suspense-below src/content/reference/react/captureOwnerStack.md:60:94 Link text: `errorInfo.componentStack` in `onUncaughtError` URL: /reference/react-dom/client/hydrateRoot#show-a-dialog-for-uncaught-errors ✗ Anchor #show-a-dialog-for-uncaught-errors not found in reference/react-dom/client/hydrateRoot.md src/content/reference/react/forwardRef.md:9:65 Link text: here URL: /blog/2024/04/25/react-19#ref-as-a-prop ✗ Target file not found for: /blog/2024/04/25/react-19 src/content/reference/react/use.md:315:24 Link text: Server Component URL: /reference/react/components#server-components ✗ Anchor #server-components not found in reference/react/components.md src/content/reference/react/useEffect.md:899:67 Link text: if you use a framework, URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react/useEffect.md:1051:18 Link text: framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react/useEffect.md:1736:92 Link text: framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react/useInsertionEffect.md:136:65 Link text: non-blocking update, URL: /reference/react/useTransition#marking-a-state-update-as-a-non-blocking-transition ✗ Anchor #marking-a-state-update-as-a-non-blocking-transition not found in reference/react/useTransition.md src/content/reference/react-dom/createPortal.md:53:76 Link text: key. URL: /learn/rendering-lists/#keeping-list-items-in-order-with-key ✗ Target file not found for: /learn/rendering-lists/ src/content/reference/react-dom/index.md:24:1 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/index.md:51:3 Link text: `unmountComponentAtNode` URL: /reference/react-dom/unmountComponentAtNode ✗ Target file not found for: /reference/react-dom/unmountComponentAtNode src/content/reference/react-dom/preinit.md:7:1 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/preinitModule.md:7:1 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/preload.md:7:1 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/preloadModule.md:7:1 Link text: React-based frameworks URL: /learn/start-a-new-react-project ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/rsc/directives.md:13:36 Link text: bundlers compatible with React Server Components URL: /learn/start-a-new-react-project#full-stack-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/rsc/server-components.md:7:34 Link text: React Server Components URL: /learn/start-a-new-react-project#full-stack-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/rsc/server-functions.md:198:28 Link text: `useActionState` URL: /reference/react-dom/hooks/useFormState ✗ Target file not found for: /reference/react-dom/hooks/useFormState src/content/reference/rsc/server-functions.md:222:28 Link text: `useActionState` URL: /reference/react-dom/hooks/useFormState ✗ Target file not found for: /reference/react-dom/hooks/useFormState src/content/reference/rsc/use-client.md:44:77 Link text: compatible bundlers URL: /learn/start-a-new-react-project#full-stack-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/rsc/use-server.md:98:54 Link text: serializable props URL: /reference/rsc/use-client#passing-props-from-server-to-client-components ✗ Anchor #passing-props-from-server-to-client-components not found in reference/rsc/use-client.md src/content/reference/react-dom/client/createRoot.md:212:278 Link text: using a framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/client/index.md:7:185 Link text: framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/components/common.md:919:89 Link text: check out more examples. URL: /reference/react/useRef#examples-dom ✗ Anchor #examples-dom not found in reference/react/useRef.md src/content/reference/react-dom/components/form.md:39:23 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/form.md:233:63 Link text: reference documentation URL: /reference/react/hooks/useOptimistic ✗ Target file not found for: /reference/react/hooks/useOptimistic src/content/reference/react-dom/components/input.md:33:24 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/link.md:33:23 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/meta.md:33:23 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/option.md:39:25 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/progress.md:33:27 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/script.md:34:25 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/select.md:39:25 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/style.md:33:24 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/textarea.md:33:27 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/components/title.md:33:24 Link text: common element props. URL: /reference/react-dom/components/common#props ✗ Anchor #props not found in reference/react-dom/components/common.md src/content/reference/react-dom/server/index.md:7:182 Link text: framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/reference/react-dom/static/index.md:7:146 Link text: framework URL: /learn/start-a-new-react-project#production-grade-react-frameworks ✗ Target file not found for: /learn/start-a-new-react-project src/content/blog/2023/03/16/introducing-react-dev.md:45:5 Link text: API Reference URL: /reference ✗ Target file not found for: /reference src/content/blog/2023/03/16/introducing-react-dev.md:610:117 Link text: Alternatives URL: /reference/react-dom/findDOMNode#alternatives ✗ Target file not found for: /reference/react-dom/findDOMNode src/content/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023.md:34:40 Link text: Next.js App Router URL: /learn/start-a-new-react-project#nextjs-app-router ✗ Target file not found for: /learn/start-a-new-react-project src/content/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023.md:95:605 Link text: Next.js App Router URL: /learn/start-a-new-react-project#nextjs-app-router ✗ Target file not found for: /learn/start-a-new-react-project src/content/blog/2024/02/15/react-labs-what-we-have-been-working-on-february-2024.md:110:3 Link text: Sathya Gunasekaran URL: /community/team#sathya-gunasekaran ✗ Contributor link should be updated to: https://github.com/gsathya src/content/blog/2024/04/25/react-19-upgrade-guide.md:132:20 Link text: improved how errors are handled URL: /blog/2024/04/25/react-19#error-handling ✗ Target file not found for: /blog/2024/04/25/react-19 src/content/blog/2024/04/25/react-19-upgrade-guide.md:502:19 Link text: `ref` as a prop URL: /blog/2024/04/25/react-19#ref-as-a-prop ✗ Target file not found for: /blog/2024/04/25/react-19 src/content/blog/2024/12/05/react-19.md:358:391 Link text: Full-stack React Architecture URL: /learn/start-a-new-react-project#which-features-make-up-the-react-teams-full-stack-architecture-vision ✗ Target file not found for: /learn/start-a-new-react-project src/content/blog/2024/12/05/react-19.md:392:28 Link text: React Server Actions URL: /reference/rsc/server-actions ✗ Target file not found for: /reference/rsc/server-actions src/content/blog/2025/04/23/react-labs-view-transitions-activity-and-more.md:2498:37 Link text: view transition classes URL: /reference/react/ViewTransition#view-transition-classes ✗ Anchor #view-transition-classes not found in reference/react/ViewTransition.md Found 58 dead links out of 1555 total links info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. ```
117 lines
3.9 KiB
JSON
117 lines
3.9 KiB
JSON
{
|
|
"name": "react-dev",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"license": "CC",
|
|
"scripts": {
|
|
"analyze": "ANALYZE=true next build",
|
|
"dev": "next-remote-watch ./src/content",
|
|
"build": "next build && node --experimental-modules ./scripts/downloadFonts.mjs",
|
|
"lint": "next lint",
|
|
"lint:fix": "next lint --fix",
|
|
"format:source": "prettier --config .prettierrc --write \"{plugins,src}/**/*.{js,ts,jsx,tsx,css}\"",
|
|
"nit:source": "prettier --config .prettierrc --list-different \"{plugins,src}/**/*.{js,ts,jsx,tsx,css}\"",
|
|
"prettier": "yarn format:source",
|
|
"prettier:diff": "yarn nit:source",
|
|
"lint-heading-ids": "node scripts/headingIdLinter.js",
|
|
"fix-headings": "node scripts/headingIdLinter.js --fix",
|
|
"ci-check": "npm-run-all prettier:diff --parallel lint tsc lint-heading-ids rss deadlinks",
|
|
"tsc": "tsc --noEmit",
|
|
"start": "next start",
|
|
"postinstall": "is-ci || husky install .husky",
|
|
"check-all": "npm-run-all prettier lint:fix tsc rss",
|
|
"rss": "node scripts/generateRss.js",
|
|
"deadlinks": "node scripts/deadLinkChecker.js"
|
|
},
|
|
"dependencies": {
|
|
"@codesandbox/sandpack-react": "2.13.5",
|
|
"@docsearch/css": "^3.8.3",
|
|
"@docsearch/react": "^3.8.3",
|
|
"@headlessui/react": "^1.7.0",
|
|
"@radix-ui/react-context-menu": "^2.1.5",
|
|
"body-scroll-lock": "^3.1.3",
|
|
"classnames": "^2.2.6",
|
|
"debounce": "^1.2.1",
|
|
"github-slugger": "^1.3.0",
|
|
"next": "15.1.0",
|
|
"next-remote-watch": "^1.0.0",
|
|
"parse-numeric-range": "^1.2.0",
|
|
"react": "^19.0.0",
|
|
"react-collapsed": "4.0.4",
|
|
"react-dom": "^19.0.0",
|
|
"remark-frontmatter": "^4.0.1",
|
|
"remark-gfm": "^3.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/core": "^7.12.9",
|
|
"@babel/plugin-transform-modules-commonjs": "^7.18.6",
|
|
"@babel/preset-react": "^7.18.6",
|
|
"@mdx-js/mdx": "^2.1.3",
|
|
"@types/body-scroll-lock": "^2.6.1",
|
|
"@types/classnames": "^2.2.10",
|
|
"@types/debounce": "^1.2.1",
|
|
"@types/github-slugger": "^1.3.0",
|
|
"@types/mdx-js__react": "^1.5.2",
|
|
"@types/node": "^14.6.4",
|
|
"@types/parse-numeric-range": "^0.0.1",
|
|
"@types/react": "^19.0.0",
|
|
"@types/react-dom": "^19.0.0",
|
|
"@typescript-eslint/eslint-plugin": "^5.36.2",
|
|
"@typescript-eslint/parser": "^5.36.2",
|
|
"asyncro": "^3.0.0",
|
|
"autoprefixer": "^10.4.2",
|
|
"babel-eslint": "10.x",
|
|
"babel-plugin-react-compiler": "19.0.0-beta-e552027-20250112",
|
|
"chalk": "4.1.2",
|
|
"eslint": "7.x",
|
|
"eslint-config-next": "12.0.3",
|
|
"eslint-config-react-app": "^5.2.1",
|
|
"eslint-plugin-flowtype": "4.x",
|
|
"eslint-plugin-import": "2.x",
|
|
"eslint-plugin-jsx-a11y": "6.x",
|
|
"eslint-plugin-react": "7.x",
|
|
"eslint-plugin-react-compiler": "^19.0.0-beta-e552027-20250112",
|
|
"eslint-plugin-react-hooks": "^0.0.0-experimental-fabef7a6b-20221215",
|
|
"fs-extra": "^9.0.1",
|
|
"globby": "^11.0.1",
|
|
"gray-matter": "^4.0.2",
|
|
"husky": "^7.0.4",
|
|
"is-ci": "^3.0.1",
|
|
"lint-staged": ">=10",
|
|
"mdast-util-to-string": "^1.1.0",
|
|
"metro-cache": "0.72.2",
|
|
"npm-run-all": "^4.1.5",
|
|
"postcss": "^8.4.5",
|
|
"postcss-flexbugs-fixes": "4.2.1",
|
|
"postcss-preset-env": "^6.7.0",
|
|
"prettier": "^2.5.1",
|
|
"reading-time": "^1.2.0",
|
|
"remark": "^12.0.1",
|
|
"remark-external-links": "^7.0.0",
|
|
"remark-html": "^12.0.0",
|
|
"remark-images": "^2.0.0",
|
|
"remark-slug": "^7.0.0",
|
|
"remark-unwrap-images": "^2.0.0",
|
|
"retext": "^7.0.1",
|
|
"retext-smartypants": "^4.0.0",
|
|
"rss": "^1.2.2",
|
|
"tailwindcss": "^3.4.1",
|
|
"typescript": "^5.7.2",
|
|
"unist-util-visit": "^2.0.3",
|
|
"webpack-bundle-analyzer": "^4.5.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=16.8.0"
|
|
},
|
|
"nextBundleAnalysis": {
|
|
"budget": null,
|
|
"budgetPercentIncreaseRed": 10,
|
|
"showDetails": true
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,ts,jsx,tsx,css}": "yarn prettier",
|
|
"src/**/*.md": "yarn fix-headings"
|
|
},
|
|
"packageManager": "yarn@1.22.22"
|
|
}
|