Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: fix fast-refresh for files that are transformed into jsx #188

Merged
merged 2 commits into from
Jun 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ To use breakpoints and explore code execution, you can use the ["Run and Debug"]

Some errors are masked and hidden away because of the layers of abstraction and sandboxed nature added by Vitest, Playwright, and Chromium. In order to see what's actually going wrong and the contents of the devtools console in those instances, follow this setup:

1. Add a `debugger` statement to the `playground/vitestSetup.ts` -> `afterAll` hook. This will pause execution before the tests quit and the Playwright browser instance exits.
1. Add a `debugger` statement to the `playground/vitestSetup.ts` -> `afterAll` hook. This will pause execution before the tests quit and the Playwright browser instance exits. You can also add `debugger` statements in your tests (`.spec.ts`) files.

2. Run the tests with the `debug-serve` script command, which will enable remote debugging: `pnpm run debug-serve react-sourcemap`.
2. Run the tests with the `debug-serve` script command, which will enable remote debugging: `pnpm run debug-serve react-sourcemap`. Remember to run this command within the **"JavaScript Debug Terminal"** of VS Code.

3. Wait for inspector devtools to open in your browser and the debugger to attach.

Expand Down
4 changes: 2 additions & 2 deletions packages/plugin-react/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,8 @@ export default function viteReact(opts: Options = {}): PluginOption[] {
!ssr &&
(isJSX ||
(opts.jsxRuntime === 'classic'
? code.includes(devRuntime)
: importReactRE.test(code)))
? importReactRE.test(code)
: code.includes(devRuntime)))
if (useFastRefresh) {
plugins.push([
await loadPlugin('react-refresh/babel'),
Expand Down
20 changes: 20 additions & 0 deletions playground/mdx/__tests__/mdx.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ test('should render', async () => {
expect(await page.textContent('h1')).toMatch('Vite + MDX')
})

test('.md extension should work', async () => {
expect(await page.getByText('.md extension works.').textContent()).toEqual(
'.md extension works. This is bold text.',
)
})

if (isServe) {
test('should hmr', async () => {
editFile('src/demo.mdx', (code) => code.replace('Vite + MDX', 'Updated'))
Expand All @@ -20,4 +26,18 @@ if (isServe) {
)
await untilUpdated(() => page.textContent('h1'), 'Updated')
})

test('should hmr with .md extension', async () => {
await untilBrowserLogAfter(
() =>
editFile('src/demo2.md', (code) =>
code.replace('`.md` extension works.', '`.md` extension hmr works.'),
),
'[vite] hot updated: /src/demo2.md',
)
await untilUpdated(
() => page.getByText('.md extension hmr works.').textContent(),
'.md extension hmr works. This is bold text.',
)
})
}
3 changes: 3 additions & 0 deletions playground/mdx/src/demo2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## test md extension

`.md` extension works. This is **bold text**.
2 changes: 2 additions & 0 deletions playground/mdx/src/main.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React from 'react'
import ReactDOM from 'react-dom/client'
import Demo from './demo.mdx'
import Demo2 from './demo2.md'

ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<Demo />
<Demo2 />
</React.StrictMode>,
)
5 changes: 5 additions & 0 deletions playground/mdx/src/vite-env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@ declare module '*.mdx' {
import { JSX } from 'react'
export default () => JSX.Element
}

declare module '*.md' {
import { JSX } from 'react'
export default () => JSX.Element
}
2 changes: 1 addition & 1 deletion playground/mdx/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ import mdx from '@mdx-js/rollup'
export default defineConfig({
plugins: [
{ enforce: 'pre', ...mdx() },
react({ include: /\.(mdx|ts|tsx)$/ }),
react({ include: /\.(mdx|md|ts|tsx)$/ }),
],
})