Skip to content

Commit 6a13048

Browse files
committed
Improve inference for targets in serve mode
1 parent 9f297b1 commit 6a13048

File tree

4 files changed

+35
-26
lines changed

4 files changed

+35
-26
lines changed

packages/core/core/src/Environment.js

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export function createEnvironment({
4848
switch (context) {
4949
case 'node':
5050
case 'electron-main':
51+
case 'react-server':
5152
engines = {
5253
node: DEFAULT_ENGINES.node,
5354
};
@@ -56,6 +57,7 @@ export function createEnvironment({
5657
case 'web-worker':
5758
case 'service-worker':
5859
case 'electron-renderer':
60+
case 'react-client':
5961
engines = {
6062
browsers: DEFAULT_ENGINES.browsers,
6163
};
@@ -70,6 +72,7 @@ export function createEnvironment({
7072
case 'node':
7173
case 'electron-main':
7274
case 'electron-renderer':
75+
case 'react-server':
7376
includeNodeModules = false;
7477
break;
7578
case 'browser':
@@ -86,6 +89,7 @@ export function createEnvironment({
8689
case 'node':
8790
case 'electron-main':
8891
case 'electron-renderer':
92+
case 'react-server':
8993
outputFormat = 'commonjs';
9094
break;
9195
default:

packages/core/core/src/requests/TargetRequest.js

+26-19
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import {
4848
import {optionsProxy, toInternalSourceLocation} from '../utils';
4949
import {fromProjectPath, toProjectPath, joinProjectPath} from '../projectPath';
5050
import {requestTypes} from '../RequestTracker';
51+
import {BROWSER_ENVS} from '../public/Environment';
5152

5253
type RunOpts<TResult> = {|
5354
input: Entry,
@@ -78,7 +79,7 @@ const COMMON_TARGETS = {
7879
};
7980

8081
const DEFAULT_ENGINES = {
81-
node: 'current',
82+
node: process.versions.node,
8283
browsers: [
8384
'last 1 Chrome version',
8485
'last 1 Safari version',
@@ -345,26 +346,41 @@ export class TargetResolver {
345346
);
346347
}
347348
} else {
349+
targets = Array.from(packageTargets.values())
350+
.filter(Boolean)
351+
.filter(descriptor => {
352+
return (
353+
descriptor &&
354+
!skipTarget(descriptor.name, exclusiveTarget, descriptor.source)
355+
);
356+
});
357+
348358
// Explicit targets were not provided. Either use a modern target for server
349359
// mode, or simply use the package.json targets.
350360
if (this.options.serveOptions) {
351361
// In serve mode, we only support a single browser target. Since the user
352362
// hasn't specified a target, use one targeting modern browsers for development
363+
let distDir = toProjectPath(
364+
this.options.projectRoot,
365+
this.options.serveOptions.distDir,
366+
);
367+
let context = targets[0]?.env.context ?? 'browser';
368+
let engines = BROWSER_ENVS.has(context)
369+
? {browsers: DEFAULT_ENGINES.browsers}
370+
: {node: DEFAULT_ENGINES.node};
353371
targets = [
354372
{
355373
name: 'default',
356-
distDir: toProjectPath(
357-
this.options.projectRoot,
358-
this.options.serveOptions.distDir,
359-
),
374+
distDir,
360375
publicUrl: this.options.defaultTargetOptions.publicUrl ?? '/',
361376
env: createEnvironment({
362-
context: 'browser',
363-
engines: {
364-
browsers: DEFAULT_ENGINES.browsers,
365-
},
377+
context,
378+
engines,
379+
includeNodeModules: targets[0]?.env.includeNodeModules,
366380
shouldOptimize: this.options.defaultTargetOptions.shouldOptimize,
367-
outputFormat: this.options.defaultTargetOptions.outputFormat,
381+
outputFormat:
382+
targets[0]?.env.outputFormat ??
383+
this.options.defaultTargetOptions.outputFormat,
368384
shouldScopeHoist:
369385
this.options.defaultTargetOptions.shouldScopeHoist,
370386
sourceMap: this.options.defaultTargetOptions.sourceMaps
@@ -373,15 +389,6 @@ export class TargetResolver {
373389
}),
374390
},
375391
];
376-
} else {
377-
targets = Array.from(packageTargets.values())
378-
.filter(Boolean)
379-
.filter(descriptor => {
380-
return (
381-
descriptor &&
382-
!skipTarget(descriptor.name, exclusiveTarget, descriptor.source)
383-
);
384-
});
385392
}
386393
}
387394

packages/examples/react-server-components/package.json

+1-5
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,15 @@
33
"version": "1.0.0",
44
"private": true,
55
"server": "dist/server.js",
6+
"source": "src/server.tsx",
67
"targets": {
78
"server": {
8-
"source": "src/server.tsx",
99
"context": "react-server",
10-
"outputFormat": "commonjs",
1110
"includeNodeModules": {
1211
"express": false
1312
}
1413
}
1514
},
16-
"engines": {
17-
"node": ">= 18"
18-
},
1915
"dependencies": {
2016
"express": "^4.18.2",
2117
"react": "^19",

yarn.lock

+4-2
Original file line numberDiff line numberDiff line change
@@ -12332,8 +12332,10 @@ react-resizable-panels@^0.0.61:
1233212332
resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-0.0.61.tgz#2260ec8ca591431d367d172bced49733cc3308aa"
1233312333
integrity sha512-Vk2a4LEHWkI6hGPnPmXxa/2twLYMAMMUTyA2PtR1ijvH2Nkg/AhGqrPsIi/eI85uVWtYCFNZKEsbR3uGuJl/yg==
1233412334

12335-
"react-server-dom-parcel@file:../react/build/node_modules/react-server-dom-parcel":
12336-
version "19.0.0"
12335+
react-server-dom-parcel@^0.0.1:
12336+
version "0.0.1"
12337+
resolved "https://registry.yarnpkg.com/react-server-dom-parcel/-/react-server-dom-parcel-0.0.1.tgz#2653c2b39a857fbd17770d27d6f08bd139803f09"
12338+
integrity sha512-f93wv8gycm4ltcQRqpSlgYyT6cJxmjJdRmXw3deQoXowDlP44W4RRzwHQ70u1xseCpHFIORmuHVXk7+Fk8RFtQ==
1233712339

1233812340
react-universal-interface@^0.6.2:
1233912341
version "0.6.2"

0 commit comments

Comments
 (0)