diff --git a/code/lib/builder-vite/src/vite-config.ts b/code/lib/builder-vite/src/vite-config.ts index 46983ad847d7..4df5b091b3f4 100644 --- a/code/lib/builder-vite/src/vite-config.ts +++ b/code/lib/builder-vite/src/vite-config.ts @@ -3,6 +3,7 @@ import fs from 'fs'; import { Plugin } from 'vite'; import viteReact from '@vitejs/plugin-react'; import type { UserConfig } from 'vite'; +import { isPreservingSymlinks } from '@storybook/core-common'; import { allowedEnvPrefix as envPrefix } from './envs'; import { codeGeneratorPlugin } from './code-generator-plugin'; import { injectExportOrderPlugin } from './inject-export-order-plugin'; @@ -33,6 +34,7 @@ export async function commonConfig( cacheDir: 'node_modules/.vite-storybook', envPrefix, define: {}, + resolve: { preserveSymlinks: isPreservingSymlinks() }, plugins: await pluginConfig(options, _type), }; } diff --git a/code/lib/builder-webpack5/src/preview/iframe-webpack.config.ts b/code/lib/builder-webpack5/src/preview/iframe-webpack.config.ts index bd00d68d7c64..cd58912794f2 100644 --- a/code/lib/builder-webpack5/src/preview/iframe-webpack.config.ts +++ b/code/lib/builder-webpack5/src/preview/iframe-webpack.config.ts @@ -17,6 +17,7 @@ import { normalizeStories, readTemplate, loadPreviewOrConfigFile, + isPreservingSymlinks, } from '@storybook/core-common'; import { toRequireContextString, toImportFn } from '@storybook/core-webpack'; import type { BuilderOptions, TypescriptOptions } from '../types'; @@ -168,10 +169,6 @@ export default async ( const shouldCheckTs = typescriptOptions.check && !typescriptOptions.skipBabel; const tsCheckOptions = typescriptOptions.checkOptions || {}; - const { NODE_OPTIONS, NODE_PRESERVE_SYMLINKS } = process.env; - const isPreservingSymlinks = - !!NODE_PRESERVE_SYMLINKS || NODE_OPTIONS?.includes('--preserve-symlinks'); - return { name: 'preview', mode: isProd ? 'production' : 'development', @@ -275,7 +272,7 @@ export default async ( }, // Set webpack to resolve symlinks based on whether the user has asked node to. // This feels like it should be default out-of-the-box in webpack :shrug: - symlinks: !isPreservingSymlinks, + symlinks: !isPreservingSymlinks(), }, optimization: { splitChunks: { diff --git a/code/lib/core-common/src/index.ts b/code/lib/core-common/src/index.ts index f3d54fd41312..2fb7ff64b64c 100644 --- a/code/lib/core-common/src/index.ts +++ b/code/lib/core-common/src/index.ts @@ -26,6 +26,7 @@ export * from './utils/glob-to-regexp'; export * from './utils/normalize-stories'; export * from './utils/readTemplate'; export * from './utils/findDistEsm'; +export * from './utils/symlinks'; export * from './types'; diff --git a/code/lib/core-common/src/utils/symlinks.ts b/code/lib/core-common/src/utils/symlinks.ts new file mode 100644 index 000000000000..22b17af49584 --- /dev/null +++ b/code/lib/core-common/src/utils/symlinks.ts @@ -0,0 +1,4 @@ +export function isPreservingSymlinks() { + const { NODE_OPTIONS, NODE_PRESERVE_SYMLINKS } = process.env; + return !!NODE_PRESERVE_SYMLINKS || NODE_OPTIONS?.includes('--preserve-symlinks'); +}