Skip to content

Commit 916da5f

Browse files
committed
fix(storybook-builder): resolve @storybook/react-dom-shim for addon-docs
1 parent cbcc56f commit 916da5f

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

.changeset/rude-deers-breathe.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@web/storybook-builder': patch
3+
---
4+
5+
resolve @storybook/react-dom-shim for addon-docs

packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts

+23-13
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function rollupPluginPrebundleModules(env: Record<string, string>): Plugi
1616
async buildStart() {
1717
const esbuildPluginCommonjs = (await import('@chialab/esbuild-plugin-commonjs')).default; // for CJS compatibility
1818

19-
const modules = getModules();
19+
const modules = CANDIDATES.filter(moduleExists);
2020

2121
for (const module of modules) {
2222
modulePaths[module] = join(
@@ -37,6 +37,11 @@ export function rollupPluginPrebundleModules(env: Record<string, string>): Plugi
3737
assert: require.resolve('browser-assert'),
3838
lodash: getNodeModuleDir('lodash-es'), // more optimal, but also solves esbuild incorrectly compiling lodash/_nodeUtil
3939
path: require.resolve('path-browserify'),
40+
41+
/* for @storybook/addon-docs */
42+
...(moduleExists('@storybook/react-dom-shim') && {
43+
'@storybook/react-dom-shim': getReactDomShimAlias(),
44+
}),
4045
},
4146
define: {
4247
...stringifyProcessEnvs(env),
@@ -58,18 +63,6 @@ export function rollupPluginPrebundleModules(env: Record<string, string>): Plugi
5863
};
5964
}
6065

61-
function getModules() {
62-
const include = CANDIDATES.filter(id => {
63-
try {
64-
require.resolve(id, { paths: [process.cwd()] });
65-
return true;
66-
} catch (e) {
67-
return false;
68-
}
69-
});
70-
return include;
71-
}
72-
7366
// this is different to https://github.com/storybookjs/storybook/blob/v7.0.0/code/lib/builder-vite/src/optimizeDeps.ts#L7
7467
// builder-vite bundles different dependencies for performance reasons
7568
// we aim only at browserifying NodeJS dependencies (CommonJS/process.env/...)
@@ -88,6 +81,7 @@ export const CANDIDATES = [
8881
'@testing-library/user-event',
8982

9083
/* for @storybook/addon-docs */
84+
'@storybook/react-dom-shim', // needs special resolution
9185
'color-convert',
9286
'doctrine',
9387
'lodash/cloneDeep.js',
@@ -100,3 +94,19 @@ export const CANDIDATES = [
10094
'react-dom',
10195
'tocbot',
10296
];
97+
98+
function getReactDomShimAlias() {
99+
const { version } = require('react-dom');
100+
return version.startsWith('18')
101+
? require.resolve('@storybook/react-dom-shim/dist/react-18').replace(/\.js$/, '.mjs')
102+
: require.resolve('@storybook/react-dom-shim').replace(/\.js$/, '.mjs');
103+
}
104+
105+
function moduleExists(moduleName: string) {
106+
try {
107+
require.resolve(moduleName, { paths: [process.cwd()] });
108+
return true;
109+
} catch (e) {
110+
return false;
111+
}
112+
}

0 commit comments

Comments
 (0)