Vite: Move mdx-plugin from @storybook/builder-vite to @storybook/addon-docs#24166
Conversation
shilman
left a comment
There was a problem hiding this comment.
can we solve this a different way by moving the MDX code out of the vite builder and into addon-docs viteFinal method? @ndelangen
|
That feels like the right way to do it to me, @shilman. |
|
I agree, @bryanjtc is this something you could do? |
|
sure |
6c5a6e8 to
39fa071
Compare
This comment was marked as resolved.
This comment was marked as resolved.
IanVS
left a comment
There was a problem hiding this comment.
Thanks so much for tackling this! I've wanted to move that plugin out of the vite builder for a long time, just never got around to it.
|
@bryanjtc are you confident that this truly needs no manual regression test? |
The mdx plugin is only used to load mdx in vite projects. Running all vite sandboxes successfully should be enough. |
|
I'll defer to @shilman and @JReinhold to proceed to merge this. |
|
This looks like a good change to me. The only additional thing I can think of that might be worth testing is a vite project that does not have |
I did a manual test modifying the main.ts import type { StorybookConfig } from '@storybook/react-vite';
const config: StorybookConfig = {
stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)', {
directory: '../template-stories/lib/preview-api',
titlePrefix: 'lib/preview-api',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/links',
titlePrefix: 'addons/links',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/actions',
titlePrefix: 'addons/actions',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/backgrounds',
titlePrefix: 'addons/backgrounds',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/controls',
titlePrefix: 'addons/controls',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/docs',
titlePrefix: 'addons/docs',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/toolbars',
titlePrefix: 'addons/toolbars',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/viewport',
titlePrefix: 'addons/viewport',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}, {
directory: '../template-stories/addons/interactions',
titlePrefix: 'addons/interactions',
files: '**/*.@(stories.@(js|jsx|ts|tsx))'
}],
addons: [
'@storybook/addon-links',
'@storybook/addon-onboarding',
'@storybook/addon-interactions',
'@storybook/addon-actions',
'@storybook/addon-backgrounds',
'@storybook/addon-controls',
'@storybook/addon-highlight',
'@storybook/addon-outline',
'@storybook/addon-toolbars',
'@storybook/addon-viewport',
],
framework: {
name: '@storybook/react-vite',
options: {},
},
docs: {
autodocs: 'tag',
},
previewAnnotations: ['./src/stories/components', './template-stories/lib/preview-api/preview.ts', './template-stories/addons/toolbars/preview.ts'],
features: {},
core: {
disableWhatsNewNotifications: true
},
viteFinal: (config) => ({
...config,
optimizeDeps: { ...config.optimizeDeps, force: true },
server: {
...config.server,
fs: {
...config.server?.fs,
allow: ['stories', 'src', 'template-stories', 'node_modules', ...(config.server?.fs?.allow || [])],
},
},
})
};
export default config;package.json {
"name": "before-storybook",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview",
"storybook": "NODE_OPTIONS='--preserve-symlinks --preserve-symlinks-main' STORYBOOK_TELEMETRY_URL=\"http://localhost:6007/event-log\" storybook dev -p 6006",
"build-storybook": "NODE_OPTIONS='--preserve-symlinks --preserve-symlinks-main' STORYBOOK_TELEMETRY_URL=\"http://localhost:6007/event-log\" storybook build"
},
"dependencies": {
"@types/node": "16",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@storybook/addon-actions": "^7.5.0-alpha.2",
"@storybook/addon-backgrounds": "^7.5.0-alpha.2",
"@storybook/addon-controls": "^7.5.0-alpha.2",
"@storybook/addon-highlight": "^7.5.0-alpha.2",
"@storybook/addon-interactions": "^7.5.0-alpha.2",
"@storybook/addon-links": "^7.5.0-alpha.2",
"@storybook/addon-measure": "^7.5.0-alpha.2",
"@storybook/addon-onboarding": "^1.0.8",
"@storybook/addon-outline": "^7.5.0-alpha.2",
"@storybook/addon-toolbars": "^7.5.0-alpha.2",
"@storybook/addon-viewport": "^7.5.0-alpha.2",
"@storybook/blocks": "^7.5.0-alpha.2",
"@storybook/jest": "next",
"@storybook/react": "^7.5.0-alpha.2",
"@storybook/react-vite": "^7.5.0-alpha.2",
"@storybook/test-runner": "next",
"@storybook/testing-library": "next",
"@types/react": "^18.2.15",
"@types/react-dom": "^18.2.7",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"@vitejs/plugin-react": "^4.0.3",
"eslint": "^8.45.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3",
"eslint-plugin-storybook": "^0.6.13",
"storybook": "^7.5.0-alpha.2",
"typescript": "^5.0.2",
"vite": "^4.4.5"
},
"packageManager": "yarn@3.6.3",
"resolutions": {
"@storybook/addon-a11y": "portal:/home/bryan/projects/storybook/code/addons/a11y",
"@storybook/addon-actions": "portal:/home/bryan/projects/storybook/code/addons/actions",
"@storybook/addon-backgrounds": "portal:/home/bryan/projects/storybook/code/addons/backgrounds",
"@storybook/addon-controls": "portal:/home/bryan/projects/storybook/code/addons/controls",
"@storybook/addon-mdx-gfm": "portal:/home/bryan/projects/storybook/code/addons/gfm",
"@storybook/addon-highlight": "portal:/home/bryan/projects/storybook/code/addons/highlight",
"@storybook/addon-interactions": "portal:/home/bryan/projects/storybook/code/addons/interactions",
"@storybook/addon-jest": "portal:/home/bryan/projects/storybook/code/addons/jest",
"@storybook/addon-links": "portal:/home/bryan/projects/storybook/code/addons/links",
"@storybook/addon-measure": "portal:/home/bryan/projects/storybook/code/addons/measure",
"@storybook/addon-outline": "portal:/home/bryan/projects/storybook/code/addons/outline",
"@storybook/addon-storyshots": "portal:/home/bryan/projects/storybook/code/addons/storyshots-core",
"@storybook/addon-storyshots-puppeteer": "portal:/home/bryan/projects/storybook/code/addons/storyshots-puppeteer",
"@storybook/addon-storysource": "portal:/home/bryan/projects/storybook/code/addons/storysource",
"@storybook/addon-themes": "portal:/home/bryan/projects/storybook/code/addons/themes",
"@storybook/addon-toolbars": "portal:/home/bryan/projects/storybook/code/addons/toolbars",
"@storybook/addon-viewport": "portal:/home/bryan/projects/storybook/code/addons/viewport",
"@storybook/builder-manager": "portal:/home/bryan/projects/storybook/code/builders/builder-manager",
"@storybook/builder-vite": "portal:/home/bryan/projects/storybook/code/builders/builder-vite",
"@storybook/builder-webpack5": "portal:/home/bryan/projects/storybook/code/builders/builder-webpack5",
"@storybook/addons": "portal:/home/bryan/projects/storybook/code/deprecated/addons",
"@storybook/channel-postmessage": "portal:/home/bryan/projects/storybook/code/deprecated/channel-postmessage",
"@storybook/channel-websocket": "portal:/home/bryan/projects/storybook/code/deprecated/channel-websocket",
"@storybook/client-api": "portal:/home/bryan/projects/storybook/code/deprecated/client-api",
"@storybook/core-client": "portal:/home/bryan/projects/storybook/code/deprecated/core-client",
"@storybook/api": "portal:/home/bryan/projects/storybook/code/deprecated/manager-api-shim",
"@storybook/preview-web": "portal:/home/bryan/projects/storybook/code/deprecated/preview-web",
"@storybook/store": "portal:/home/bryan/projects/storybook/code/deprecated/store",
"@storybook/angular": "portal:/home/bryan/projects/storybook/code/frameworks/angular",
"@storybook/ember": "portal:/home/bryan/projects/storybook/code/frameworks/ember",
"@storybook/html-vite": "portal:/home/bryan/projects/storybook/code/frameworks/html-vite",
"@storybook/html-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/html-webpack5",
"@storybook/nextjs": "portal:/home/bryan/projects/storybook/code/frameworks/nextjs",
"@storybook/preact-vite": "portal:/home/bryan/projects/storybook/code/frameworks/preact-vite",
"@storybook/preact-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/preact-webpack5",
"@storybook/react-vite": "portal:/home/bryan/projects/storybook/code/frameworks/react-vite",
"@storybook/react-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/react-webpack5",
"@storybook/server-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/server-webpack5",
"@storybook/svelte-vite": "portal:/home/bryan/projects/storybook/code/frameworks/svelte-vite",
"@storybook/svelte-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/svelte-webpack5",
"@storybook/sveltekit": "portal:/home/bryan/projects/storybook/code/frameworks/sveltekit",
"@storybook/vue-vite": "portal:/home/bryan/projects/storybook/code/frameworks/vue-vite",
"@storybook/vue-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/vue-webpack5",
"@storybook/vue3-vite": "portal:/home/bryan/projects/storybook/code/frameworks/vue3-vite",
"@storybook/vue3-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/vue3-webpack5",
"@storybook/web-components-vite": "portal:/home/bryan/projects/storybook/code/frameworks/web-components-vite",
"@storybook/web-components-webpack5": "portal:/home/bryan/projects/storybook/code/frameworks/web-components-webpack5",
"@storybook/channels": "portal:/home/bryan/projects/storybook/code/lib/channels",
"@storybook/cli": "portal:/home/bryan/projects/storybook/code/lib/cli",
"sb": "portal:/home/bryan/projects/storybook/code/lib/cli-sb",
"storybook": "portal:/home/bryan/projects/storybook/code/lib/cli-storybook",
"@storybook/client-logger": "portal:/home/bryan/projects/storybook/code/lib/client-logger",
"@storybook/codemod": "portal:/home/bryan/projects/storybook/code/lib/codemod",
"@storybook/core-common": "portal:/home/bryan/projects/storybook/code/lib/core-common",
"@storybook/core-events": "portal:/home/bryan/projects/storybook/code/lib/core-events",
"@storybook/core-server": "portal:/home/bryan/projects/storybook/code/lib/core-server",
"@storybook/core-webpack": "portal:/home/bryan/projects/storybook/code/lib/core-webpack",
"@storybook/csf-plugin": "portal:/home/bryan/projects/storybook/code/lib/csf-plugin",
"@storybook/csf-tools": "portal:/home/bryan/projects/storybook/code/lib/csf-tools",
"@storybook/docs-tools": "portal:/home/bryan/projects/storybook/code/lib/docs-tools",
"@storybook/instrumenter": "portal:/home/bryan/projects/storybook/code/lib/instrumenter",
"@storybook/manager-api": "portal:/home/bryan/projects/storybook/code/lib/manager-api",
"@storybook/node-logger": "portal:/home/bryan/projects/storybook/code/lib/node-logger",
"@storybook/postinstall": "portal:/home/bryan/projects/storybook/code/lib/postinstall",
"@storybook/preview": "portal:/home/bryan/projects/storybook/code/lib/preview",
"@storybook/preview-api": "portal:/home/bryan/projects/storybook/code/lib/preview-api",
"@storybook/react-dom-shim": "portal:/home/bryan/projects/storybook/code/lib/react-dom-shim",
"@storybook/router": "portal:/home/bryan/projects/storybook/code/lib/router",
"@storybook/source-loader": "portal:/home/bryan/projects/storybook/code/lib/source-loader",
"@storybook/telemetry": "portal:/home/bryan/projects/storybook/code/lib/telemetry",
"@storybook/theming": "portal:/home/bryan/projects/storybook/code/lib/theming",
"@storybook/types": "portal:/home/bryan/projects/storybook/code/lib/types",
"@storybook/preset-create-react-app": "portal:/home/bryan/projects/storybook/code/presets/create-react-app",
"@storybook/preset-html-webpack": "portal:/home/bryan/projects/storybook/code/presets/html-webpack",
"@storybook/preset-preact-webpack": "portal:/home/bryan/projects/storybook/code/presets/preact-webpack",
"@storybook/preset-react-webpack": "portal:/home/bryan/projects/storybook/code/presets/react-webpack",
"@storybook/preset-server-webpack": "portal:/home/bryan/projects/storybook/code/presets/server-webpack",
"@storybook/preset-svelte-webpack": "portal:/home/bryan/projects/storybook/code/presets/svelte-webpack",
"@storybook/preset-vue-webpack": "portal:/home/bryan/projects/storybook/code/presets/vue-webpack",
"@storybook/preset-vue3-webpack": "portal:/home/bryan/projects/storybook/code/presets/vue3-webpack",
"@storybook/preset-web-components-webpack": "portal:/home/bryan/projects/storybook/code/presets/web-components-webpack",
"@storybook/html": "portal:/home/bryan/projects/storybook/code/renderers/html",
"@storybook/preact": "portal:/home/bryan/projects/storybook/code/renderers/preact",
"@storybook/react": "portal:/home/bryan/projects/storybook/code/renderers/react",
"@storybook/server": "portal:/home/bryan/projects/storybook/code/renderers/server",
"@storybook/svelte": "portal:/home/bryan/projects/storybook/code/renderers/svelte",
"@storybook/vue": "portal:/home/bryan/projects/storybook/code/renderers/vue",
"@storybook/vue3": "portal:/home/bryan/projects/storybook/code/renderers/vue3",
"@storybook/web-components": "portal:/home/bryan/projects/storybook/code/renderers/web-components",
"@storybook/blocks": "portal:/home/bryan/projects/storybook/code/ui/blocks",
"@storybook/components": "portal:/home/bryan/projects/storybook/code/ui/components",
"@storybook/manager": "portal:/home/bryan/projects/storybook/code/ui/manager",
"@vitejs/plugin-react": "^4.0.0"
}
}
|
|
Can you merge this with 7.5.0? |
|
I'd merge it, but it sounds like Norbert wants to leave it up to @shilman or @JReinhold, so I've assigned them. |
|
MERGED 🎉 |
Closes #24058
What I did
Moved the mdx plugin from the vite builder to addon docs.
Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
No manual test needed
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal,ci:mergedorci:dailyGH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli/src/sandbox-templates.tsMake sure this PR contains one of the labels below:
Available labels
bug: Internal changes that fixes incorrect behavior.maintenance: User-facing maintenance tasks.dependencies: Upgrading (sometimes downgrading) dependencies.build: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup: Minor cleanup style change. Will not show up in release changelog.documentation: Documentation only changes. Will not show up in release changelog.feature request: Introducing a new feature.BREAKING CHANGE: Changes that break compatibility in some way with current major version.other: Changes that don't fit in the above categories.🦋 Canary release
This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the
@storybookjs/coreteam here.core team members can create a canary release here or locally with
gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>