Skip to content

Commit fd14ee1

Browse files
authored
Merge pull request #614 from LoganDark/optional-babel
Make Babel an optional peer dependency
2 parents 7c61b71 + f1a23d0 commit fd14ee1

4 files changed

Lines changed: 51 additions & 10 deletions

File tree

.changeset/many-hotels-make.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@prefresh/vite': major
3+
---
4+
5+
Make Babel an optional peer dependency
6+
7+
`@babel/core` and `@prefresh/babel-plugin` are no longer hard dependencies of `@prefresh/vite`. Projects using modern versions of Vite no longer require Babel in their dependency tree.

packages/vite/package.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,32 @@
3636
},
3737
"homepage": "https://github.com/preactjs/prefresh#readme",
3838
"dependencies": {
39-
"@babel/core": "^7.22.1",
4039
"@prefresh/core": "^1.5.0",
41-
"@prefresh/babel-plugin": "^0.5.2",
4240
"@prefresh/rolldown": "workspace:*",
4341
"@prefresh/utils": "^1.2.0",
4442
"@rollup/pluginutils": "^4.2.1",
4543
"rolldown": "^1.0.0-rc.12"
4644
},
4745
"devDependencies": {
46+
"@babel/core": "^7.22.1",
47+
"@prefresh/babel-plugin": "^0.5.2",
4848
"preact": "^10.26.10",
4949
"vite": "^8.0.0"
5050
},
5151
"peerDependencies": {
52+
"@babel/core": "^7.22.1",
53+
"@prefresh/babel-plugin": "^0.5.2",
5254
"preact": "^10.4.0 || ^11.0.0-0",
5355
"vite": ">=2.0.0"
5456
},
57+
"peerDependenciesMeta": {
58+
"@babel/core": {
59+
"optional": true
60+
},
61+
"@prefresh/babel-plugin": {
62+
"optional": true
63+
}
64+
},
5565
"publishConfig": {
5666
"access": "public",
5767
"provenance": true

packages/vite/src/index.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,38 @@ const { createFilter } = require('@rollup/pluginutils');
22

33
const SCRIPT_LANG_RE = /\.(c|m)?(t|j)sx?$/;
44
let babel;
5+
let babelLoadAttempted = false;
56
let prefreshRolldownPromise;
67
let viteSupportsHookFilters;
78
let viteVersionParts;
89

9-
function loadBabel() {
10-
babel ||= {
10+
function tryLoadBabel() {
11+
if (babelLoadAttempted) return babel;
12+
babelLoadAttempted = true;
13+
try {
14+
require.resolve('@babel/core');
15+
require.resolve('@prefresh/babel-plugin');
16+
} catch (err) {
17+
if (err && err.code === 'MODULE_NOT_FOUND') return babel;
18+
throw err;
19+
}
20+
babel = {
1121
transformSync: require('@babel/core').transformSync,
1222
prefreshBabelPlugin: require('@prefresh/babel-plugin'),
1323
};
1424
return babel;
1525
}
1626

27+
function loadBabel() {
28+
const loaded = tryLoadBabel();
29+
if (loaded) return loaded;
30+
throw new Error(
31+
'@prefresh/vite needs @babel/core and @prefresh/babel-plugin to use the Babel transform path ' +
32+
'(triggered by `parserPlugins` or by Vite < 8 without rolldown support). ' +
33+
'Install them as dev dependencies, or upgrade to a Vite version with rolldown so the Oxc path is used instead.'
34+
);
35+
}
36+
1737
function loadPrefreshRolldown() {
1838
prefreshRolldownPromise ||= import('@prefresh/rolldown').then(
1939
({ default: prefreshRolldown }) => prefreshRolldown
@@ -213,6 +233,10 @@ function prefreshBabelTransformPlugin(options = {}, forceBabel) {
213233
const hasSig = /\$RefreshSig\$\(/.test(code);
214234

215235
if (hasReg || hasSig) return;
236+
237+
// Babel is an optional fallback on the Oxc path; if it's not
238+
// installed we silently skip rather than failing the request.
239+
if (!tryLoadBabel()) return;
216240
}
217241

218242
const result = transform(code, id, parserPlugins);

pnpm-lock.yaml

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)