Skip to content

Commit 419d559

Browse files
authored
fix(core): always alias React/ReactDOM to site dependency so that importing MDX from anywhere works (#10391)
1 parent 547979a commit 419d559

File tree

8 files changed

+120
-1
lines changed

8 files changed

+120
-1
lines changed

admin/test-bad-package/README.mdx

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# test-bad-package
2+
3+
This package declares a wrong React version on purpose (16.14.0)
4+
5+
The goal is to test that the MD/MDX content of this package can still be imported/rendered by our website.
6+
7+
See related issue https://github.com/facebook/docusaurus/issues/9027
8+
9+
---
10+
11+
import {version as ReactVersion} from 'react';
12+
import {version as ReactDOMVersion} from 'react-dom';
13+
14+
export function TestComponent() {
15+
const expectedVersion = 18;
16+
if (!ReactVersion.startsWith(`${expectedVersion}`)) {
17+
throw new Error(
18+
`'test-bad-package/README.mdx' is rendered with bad React version: ${ReactVersion}`,
19+
);
20+
}
21+
if (!ReactVersion.startsWith(`${expectedVersion}`)) {
22+
throw new Error(
23+
`'test-bad-package/README.mdx' is rendered with bad React-DOM version: ${ReactDOMVersion}`,
24+
);
25+
}
26+
return (
27+
<>
28+
<div>React version: {ReactVersion}</div>
29+
<div>React DOM version: {ReactDOMVersion}</div>
30+
</>
31+
);
32+
}
33+
34+
<TestComponent />
35+
36+
---
37+
38+
## MDX Components work:
39+
40+
<details>
41+
<summary>Summary</summary>
42+
43+
Details
44+
45+
</details>
46+
47+
```js
48+
const age = 42;
49+
```

admin/test-bad-package/package.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"name": "test-bad-package",
3+
"version": "3.5.1",
4+
"private": true,
5+
"dependencies": {
6+
"react": "16.14.0",
7+
"react-dom": "16.14.0",
8+
"@mdx-js/react": "1.0.1"
9+
}
10+
}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"website",
1010
"test-website-in-workspace",
1111
"packages/create-docusaurus/templates/*",
12+
"admin/test-bad-package",
1213
"admin/new.docusaurus.io"
1314
],
1415
"scripts": {

packages/docusaurus/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@
119119
},
120120
"peerDependencies": {
121121
"react": "^18.0.0",
122-
"react-dom": "^18.0.0"
122+
"react-dom": "^18.0.0",
123+
"@mdx-js/react": "^3.0.0"
123124
},
124125
"engines": {
125126
"node": ">=18.0"

packages/docusaurus/src/webpack/__tests__/__snapshots__/base.test.ts.snap

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ exports[`base webpack config creates webpack aliases 1`] = `
2323
"@docusaurus/useIsomorphicLayoutEffect": "../../../../client/exports/useIsomorphicLayoutEffect.tsx",
2424
"@docusaurus/useRouteContext": "../../../../client/exports/useRouteContext.tsx",
2525
"@generated": "../../../../../../..",
26+
"@mdx-js/react": "../../../../../../../node_modules/@mdx-js/react",
2627
"@site": "",
2728
"@theme-init/PluginThemeComponentEnhanced": "pluginThemeFolder/PluginThemeComponentEnhanced.js",
2829
"@theme-original/Error": "../../../../client/theme-fallback/Error/index.tsx",
@@ -47,5 +48,7 @@ exports[`base webpack config creates webpack aliases 1`] = `
4748
"@theme/UserThemeComponent1": "src/theme/UserThemeComponent1.js",
4849
"@theme/subfolder/PluginThemeComponent2": "pluginThemeFolder/subfolder/PluginThemeComponent2.js",
4950
"@theme/subfolder/UserThemeComponent2": "src/theme/subfolder/UserThemeComponent2.js",
51+
"react": "../../../../../../../node_modules/react",
52+
"react-dom": "../../../../../../../node_modules/react-dom",
5053
}
5154
`;

packages/docusaurus/src/webpack/base.ts

+10
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ const LibrariesToTranspileRegex = new RegExp(
3131
LibrariesToTranspile.map((libName) => `(node_modules/${libName})`).join('|'),
3232
);
3333

34+
const ReactAliases: Record<string, string> = process.env
35+
.DOCUSAURUS_NO_REACT_ALIASES
36+
? {}
37+
: {
38+
react: path.dirname(require.resolve('react/package.json')),
39+
'react-dom': path.dirname(require.resolve('react-dom/package.json')),
40+
'@mdx-js/react': path.dirname(require.resolve('@mdx-js/react')),
41+
};
42+
3443
export function excludeJS(modulePath: string): boolean {
3544
// Always transpile client dir
3645
if (modulePath.startsWith(clientDir)) {
@@ -136,6 +145,7 @@ export async function createBaseConfig({
136145
process.cwd(),
137146
],
138147
alias: {
148+
...ReactAliases,
139149
'@site': siteDir,
140150
'@generated': generatedFilesDir,
141151
...(await loadDocusaurusAliases()),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Import Bad Package
2+
3+
We are importing MDX content from a file that is in a package that has a bad React version.
4+
5+
This is expected to work despite the bad version.
6+
7+
See https://github.com/facebook/docusaurus/issues/9027
8+
9+
---
10+
11+
import Readme from '@site/../admin/test-bad-package/README.mdx';
12+
13+
<Readme />

yarn.lock

+32
Original file line numberDiff line numberDiff line change
@@ -2152,6 +2152,11 @@
21522152
unist-util-visit "^5.0.0"
21532153
vfile "^6.0.0"
21542154

2155+
2156+
version "1.0.1"
2157+
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.0.1.tgz#565acea8375b02a2039a5afefdeb3758ccc13988"
2158+
integrity sha512-8jFmVrU6uAg94zh6sYCNtZnh9YovEvXmwaD9O8HxzQWNcEyn3ZZXG7r5ZcOpvtaQLnM+4+nwN4T42sfs2D+DvA==
2159+
21552160
"@mdx-js/react@^3.0.0":
21562161
version "3.0.0"
21572162
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.0.0.tgz#eaccaa8d6a7736b19080aff5a70448a7ba692271"
@@ -13808,6 +13813,16 @@ react-dev-utils@^12.0.1:
1380813813
strip-ansi "^6.0.1"
1380913814
text-table "^0.2.0"
1381013815

13816+
13817+
version "16.14.0"
13818+
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
13819+
integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
13820+
dependencies:
13821+
loose-envify "^1.1.0"
13822+
object-assign "^4.1.1"
13823+
prop-types "^15.6.2"
13824+
scheduler "^0.19.1"
13825+
1381113826
react-dom@^18.0.0:
1381213827
version "18.3.0"
1381313828
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.0.tgz#98a3a1cc4e471d517c2a084f38ab1d58d02cada7"
@@ -13954,6 +13969,15 @@ react-waypoint@^10.3.0:
1395413969
prop-types "^15.0.0"
1395513970
react-is "^17.0.1 || ^18.0.0"
1395613971

13972+
13973+
version "16.14.0"
13974+
resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
13975+
integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
13976+
dependencies:
13977+
loose-envify "^1.1.0"
13978+
object-assign "^4.1.1"
13979+
prop-types "^15.6.2"
13980+
1395713981
react@^18.0.0:
1395813982
version "18.3.0"
1395913983
resolved "https://registry.yarnpkg.com/react/-/react-18.3.0.tgz#84386d0a36fdf5ef50fa5755b7812bdfb76194a5"
@@ -14640,6 +14664,14 @@ saxes@^6.0.0:
1464014664
dependencies:
1464114665
xmlchars "^2.2.0"
1464214666

14667+
scheduler@^0.19.1:
14668+
version "0.19.1"
14669+
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
14670+
integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
14671+
dependencies:
14672+
loose-envify "^1.1.0"
14673+
object-assign "^4.1.1"
14674+
1464314675
scheduler@^0.23.1:
1464414676
version "0.23.1"
1464514677
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.1.tgz#ef964a7936d7cbe8f7bc0d38fc479a823aed2923"

0 commit comments

Comments
 (0)