Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/lucky-fireants-sip.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@react-router/dev": patch
---

Use `vite` instead of `vite-node` to load configuraiton file
1 change: 1 addition & 0 deletions contributors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@
- vikingviolinist
- vishwast03
- vitekzach
- vixalien
- vladinator1000
- vonagam
- WalkAlone0325
Expand Down
26 changes: 13 additions & 13 deletions packages/react-router-dev/config/config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import fs from "node:fs";
import { execSync } from "node:child_process";
import * as ViteNode from "../vite/vite-node";
import * as ViteRunner from "../vite/vite-runner";
import type * as Vite from "vite";
import Path from "pathe";
import chokidar, {
Expand Down Expand Up @@ -422,13 +422,13 @@ function err<T>(error: string): Result<T> {

async function resolveConfig({
root,
viteNodeContext,
viteRunnerContext,
reactRouterConfigFile,
skipRoutes,
validateConfig,
}: {
root: string;
viteNodeContext: ViteNode.Context;
viteRunnerContext: ViteRunner.Context;
reactRouterConfigFile?: string;
skipRoutes?: boolean;
validateConfig?: ValidateConfigFunction;
Expand All @@ -441,7 +441,7 @@ async function resolveConfig({
return err(`${reactRouterConfigFile} no longer exists`);
}

let configModule = await viteNodeContext.runner.executeFile(
let configModule = await viteRunnerContext.env.runner.import(
reactRouterConfigFile,
);

Expand Down Expand Up @@ -623,7 +623,7 @@ async function resolveConfig({

setAppDirectory(appDirectory);
let routeConfigExport = (
await viteNodeContext.runner.executeFile(
await viteRunnerContext.env.runner.import(
Path.join(appDirectory, routeConfigFile),
)
).default;
Expand Down Expand Up @@ -761,7 +761,7 @@ export async function createConfigLoader({
root = Path.normalize(root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd());

let vite = await import("vite");
let viteNodeContext = await ViteNode.createContext({
let viteRunnerContext = await ViteRunner.createContext({
root,
mode,
// Filter out any info level logs from vite-node
Expand All @@ -783,7 +783,7 @@ export async function createConfigLoader({
let getConfig = () =>
resolveConfig({
root,
viteNodeContext,
viteRunnerContext,
reactRouterConfigFile,
skipRoutes,
validateConfig,
Expand Down Expand Up @@ -854,16 +854,16 @@ export async function createConfigLoader({
let moduleGraphChanged =
configFileAddedOrRemoved ||
Boolean(
viteNodeContext.devServer?.moduleGraph.getModuleById(filepath),
viteRunnerContext.server?.moduleGraph.getModuleById(filepath),
);

// Bail out if no relevant changes detected
if (!moduleGraphChanged && !appFileAddedOrRemoved) {
return;
}

viteNodeContext.devServer?.moduleGraph.invalidateAll();
viteNodeContext.runner?.moduleCache.clear();
viteRunnerContext.server?.moduleGraph.invalidateAll();
viteRunnerContext.env?.runner.clearCache();

let result = await getConfig();

Expand All @@ -881,7 +881,7 @@ export async function createConfigLoader({
configFileAddedOrRemoved ||
(reactRouterConfigFile !== undefined &&
isEntryFileDependency(
viteNodeContext.devServer.moduleGraph,
viteRunnerContext.server.moduleGraph,
reactRouterConfigFile,
filepath,
));
Expand All @@ -894,7 +894,7 @@ export async function createConfigLoader({
let routeConfigCodeChanged =
routeConfigFile !== undefined &&
isEntryFileDependency(
viteNodeContext.devServer.moduleGraph,
viteRunnerContext.server.moduleGraph,
routeConfigFile,
filepath,
);
Expand Down Expand Up @@ -932,7 +932,7 @@ export async function createConfigLoader({
},
close: async () => {
changeHandlers = [];
await viteNodeContext.devServer.close();
await viteRunnerContext.server.close();
await fsWatcher?.close();
},
};
Expand Down
3 changes: 1 addition & 2 deletions packages/react-router-dev/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,7 @@
"react-refresh": "^0.14.0",
"semver": "^7.3.7",
"tinyglobby": "^0.2.14",
"valibot": "^1.2.0",
"vite-node": "^3.2.2"
"valibot": "^1.2.0"
},
"devDependencies": {
"@react-router/serve": "workspace:*",
Expand Down
84 changes: 0 additions & 84 deletions packages/react-router-dev/vite/vite-node.ts

This file was deleted.

63 changes: 63 additions & 0 deletions packages/react-router-dev/vite/vite-runner.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import type * as Vite from "vite";

import { preloadVite, getVite } from "./vite";
import { ssrExternals } from "./ssr-externals";

export type Context = {
server: Vite.ViteDevServer;
env: Vite.RunnableDevEnvironment;
};

export async function createContext({
root,
mode,
customLogger,
}: {
root: Vite.UserConfig["root"];
mode: Vite.ConfigEnv["mode"];
customLogger: Vite.UserConfig["customLogger"];
}): Promise<Context> {
await preloadVite();
const vite = getVite();

const server = await vite.createServer({
root,
mode,
customLogger,
server: {
preTransformRequests: false,
hmr: false,
watch: null,
},
ssr: {
external: ssrExternals,
},
optimizeDeps: {
noDiscovery: true,
},
css: {
// This empty PostCSS config object prevents the PostCSS config file from
// being loaded. We don't need it in a React Router config context, and
// there's also an issue in Vite 5 when using a .ts PostCSS config file in
// an ESM project: https://github.com/vitejs/vite/issues/15869. Consumers
// can work around this in their own Vite config file, but they can't
// configure this internal usage of vite.
postcss: {},
},
configFile: false,
envFile: false,
plugins: [],
appType: "custom",
environments: {
nodeRunnerEnv: {},
},
});
await server.pluginContainer.buildStart({});

const env = server.environments.nodeRunnerEnv;
if (!env || !vite.isRunnableDevEnvironment(env)) {
throw new Error("Vite environment is not runnable.");
}

return { server, env };
}
Loading
Loading