This repository was archived by the owner on Nov 17, 2024. It is now read-only.
Open
Conversation
c96cc0b to
7265277
Compare
7265277 to
2c72b26
Compare
2c72b26 to
c3da973
Compare
c3da973 to
108b38b
Compare
108b38b to
d163147
Compare
d163147 to
dd9d0f5
Compare
dd9d0f5 to
2708d5e
Compare
2708d5e to
e192033
Compare
e192033 to
0ea3a82
Compare
0ea3a82 to
32f615f
Compare
32f615f to
e171924
Compare
e171924 to
e3724da
Compare
e3724da to
495b5a2
Compare
495b5a2 to
6cc21c2
Compare
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
b29f729 to
07560ec
Compare
07560ec to
e32a981
Compare
e32a981 to
0666911
Compare
0666911 to
f3e64b8
Compare
f3e64b8 to
9109a0c
Compare
9109a0c to
425bce1
Compare
425bce1 to
0c6e491
Compare
0c6e491 to
03670bf
Compare
03670bf to
ef9e35c
Compare
ef9e35c to
6d3d562
Compare
6d3d562 to
00f7685
Compare
00f7685 to
6ced933
Compare
6ced933 to
5faa248
Compare
5faa248 to
092cb3a
Compare
092cb3a to
ea6703f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.19.3->2.14.01.19.3->2.14.01.19.3->2.14.01.19.3->2.14.0Release Notes
remix-run/remix (@remix-run/dev)
v2.14.0Compare Source
Minor Changes
Add support for
routes.tsbehindfuture.unstable_routeConfigflag to assist with the migration to React Router v7. (#10107)Config-based routing is the new default in React Router v7, configured via the
routes.tsfile in the app directory. Support forroutes.tsand its related APIs in Remix are designed as a migration path to help minimize the number of changes required when moving your Remix project over to React Router v7. While some new packages have been introduced within the@remix-runscope, these new packages only exist to keep the code inroutes.tsas similar as possible to the equivalent code for React Router v7.When the
unstable_routeConfigfuture flag is enabled, Remix's built-in file system routing will be disabled and your project will opted into React Router v7's config-based routing.To enable the flag, in your
vite.config.tsfile:A minimal
routes.tsfile to support Remix's built-in file system routing looks like this:Log deprecation warnings for v3 future flags (#10126)
@deprecatedannotations tojson/deferutilitiesPatch Changes
@remix-run/server-runtime@2.14.0@remix-run/node@2.14.0v2.13.1Compare Source
Patch Changes
future.v3_optimizeDepsback tofuture.unstable_optimizeDepsas it was not intended to stabilize in Remix v2 (#10099)@remix-run/node@2.13.1@remix-run/server-runtime@2.13.1v2.13.0Compare Source
Minor Changes
future.unstable_optimizeDepsflag intofuture.v3_optimizeDeps(#10092)unstable_dataStrategy->dataStrategyunstable_patchRoutesOnNavigation->patchRoutesOnNavigationunstable_data()->data()unstable_viewTransition->viewTransition(Link,Form,navigate,submit)unstable_flushSync>-><Link viewTransition>(Link,Form,navigate,submit,useFetcher)future.unstable_singleFetch->future.v3_singleFetchfuture.unstable_lazyRouteDiscovery->future.v3_lazyRouteDiscoveryPatch Changes
Stop passing
request.signalas therenderToReadableStreamsignalto abort server rendering for cloudflare/deno runtimes because by the time thatrequestis aborted, aborting the rendering is useless because there's no way for React to flush down the unresolved boundaries (#10047)remix vite:devbecause we were incorrectly aborting requests after successful renders - which was causing us to abort a completed React render, and try to close an already closedReadableStream.request.signalon successful rendersentry.serverfiles no longer pass asignaltorenderToReadableStreambecause adding a timeout-based abort signal to the default behavior would constitute a breaking changeentry.serverviaremix reveal entry.server, and the template entry.server files have been updated with an example approach for newly created Remix appsFix adapter logic for aborting
request.signalso we don't incorrectly abort on thecloseevent for successful requests (#10046)Updated dependencies:
@remix-run/server-runtime@2.13.0@remix-run/node@2.13.0v2.12.1Compare Source
Patch Changes
request.signalduringvite devwhen the node response is closed (#9976)?inline,?inline-cssand?raware no longer incorrectly injected during SSR in development (#9910)@remix-run/server-runtime@2.12.1@remix-run/node@2.12.1v2.12.0Compare Source
Minor Changes
future.unstable_optimizeDepsflag for automatic dependency optimization (#9921)future.unstable_optimizeDepsfuture flagGuides>Dependency optimizationoptimizeDeps.entriesnor do you need to disable theremix-dot-serverpluginPatch Changes
dest already existsbuild errors by only moving SSR assets to the client build directory when they're not already present on disk (#9901)@remix-run/server-runtime@2.12.0@remix-run/node@2.12.0v2.11.2Compare Source
Patch Changes
@remix-run/server-runtime@2.11.2@remix-run/node@2.11.2v2.11.1Compare Source
Patch Changes
@remix-run/server-runtime@2.11.1@remix-run/node@2.11.1v2.11.0Compare Source
Minor Changes
future.unstable_fogOfWartofuture.unstable_lazyRouteDiscoveryfor clarity (#9763)Patch Changes
@remix-run/node@2.11.0@remix-run/server-runtime@2.11.0v2.10.3Compare Source
Patch Changes
@remix-run/node@2.10.3@remix-run/server-runtime@2.10.3v2.10.2Compare Source
Patch Changes
@remix-run/server-runtime@2.10.2@remix-run/node@2.10.2v2.10.1Compare Source
Patch Changes
@remix-run/node@2.10.1@remix-run/server-runtime@2.10.1v2.10.0Compare Source
Patch Changes
expressdependency to^4.19.2(#9184)@remix-run/server-runtime@2.10.0@remix-run/node@2.10.0v2.9.2Compare Source
Patch Changes
dest already existserror when runningremix vite:build(#9305)@remix-run/nodefrom Vite plugin'soptimizeDeps.includelist since it was unnecessary and resulted in Vite warnings when not depending on this package. (#9287)?client-route=1imports in development (#9395)react-refreshBabel transform within the Remix Vite plugin (#9241)@remix-run/server-runtime@2.9.2@remix-run/node@2.9.2v2.9.1Compare Source
Patch Changes
ssr.noExternaloption were being overridden by the Remix Vite plugin adding Remix packages to Vite'sssr.externaloption (#9301)@remix-run/node@2.9.1@remix-run/server-runtime@2.9.1v2.9.0Compare Source
Minor Changes
New
future.unstable_singleFetchflag (#8773)turbo-streamsoDate's will becomeDatethroughuseLoaderData()Promise's without needing to usedefer()- including nestedPromise'sdeferutility<RemixServer abortDelay>is no longer used. Instead, you shouldexport const streamTimeoutfromentry.server.tsxand the remix server runtime will use that as the delay to abort the streamed responserenderToPipeableStream. You should always ensure that react is aborted afer the stream is aborted so that abort rejections can be flushed downfuture.unstable_skipActionErrorRevalidationflag) - you can return a 2xx to opt-into revalidation or useshouldRevalidatePatch Changes
getDependenciesToBundleresolution in monorepos (#8848)@remix-run/node@2.9.0@remix-run/server-runtime@2.9.0v2.8.1Compare Source
Patch Changes
remix revealandremix routesCLI commands (#8916)--helpoutput (#8939)build.sourcemapoption in Vite config (#8965)server.fs.allowoption without a client entry file (#8966)@remix-run/node@2.8.1@remix-run/server-runtime@2.8.1v2.8.0Compare Source
Minor Changes
viteConfigto Remix Vite plugin'sbuildEndhook (#8885)Patch Changes
Layoutas browser safe route export inesbuildcompiler (#8842)serverBundlesissue where multiple browser manifests are generated (#8864)build.assetsDiroption (#8843)@remix-run/node@2.8.0@remix-run/server-runtime@2.8.0v2.7.2Compare Source
Patch Changes
.css?urlimports (#8829)@remix-run/node@2.7.2@remix-run/server-runtime@2.7.2v2.7.1Compare Source
Patch Changes
@remix-run/node@2.7.1@remix-run/server-runtime@2.7.1v2.7.0Compare Source
Minor Changes
Allow an optional
Layoutexport from the root route (#8709)Vite: Cloudflare Proxy as a Vite plugin (#8749)
This is a breaking change for projects relying on Cloudflare support from the unstable Vite plugin
The Cloudflare preset (
unstable_cloudflarePreset) as been removed and replaced with a new Vite plugin:import { unstable_vitePlugin as remix, - unstable_cloudflarePreset as cloudflare, + cloudflareDevProxyVitePlugin as remixCloudflareDevProxy, } from "@​remix-run/dev"; import { defineConfig } from "vite"; export default defineConfig({ plugins: [ + remixCloudflareDevProxy(), + remix(), - remix({ - presets: [cloudflare()], - }), ], - ssr: { - resolve: { - externalConditions: ["workerd", "worker"], - }, - }, });remixCloudflareDevProxymust come before theremixplugin so that it can override Vite's dev server middleware to be compatible with Cloudflare's proxied environment.Because it is a Vite plugin,
remixCloudflareDevProxycan setssr.resolve.externalConditionsto beworkerd-compatible for you.remixCloudflareDevProxyaccepts agetLoadContextfunction that replaces the oldgetRemixDevLoadContext.If you were using a
nightlyversion that requiredgetBindingsProxyorgetPlatformProxy, that is no longer required.Any options you were passing to
getBindingsProxyorgetPlatformProxyshould now be passed toremixCloudflareDevProxyinstead.This API also better aligns with future plans to support Cloudflare with a framework-agnostic Vite plugin that makes use of Vite's (experimental) Runtime API.
Vite: Stabilize the Remix Vite plugin, Cloudflare preset, and all related types by removing all
unstable_/Unstable_prefixes. (#8713)While this is a breaking change for existing Remix Vite plugin consumers, now that the plugin has stabilized, there will no longer be any breaking changes outside of a major release. Thank you to all of our early adopters and community contributors for helping us get here! 🙏
Vite: Stabilize "SPA Mode" by renaming the Remix vite plugin config from
unstable_ssr -> ssr(#8692)Vite: Add a new
basenameoption to the Vite plugin, allowing users to set the internal React Routerbasenamein order to to serve their applications underneath a subpath (#8145)Patch Changes
Vite: fix server exports dead-code elimination for routes outside of app directory (#8795)
Always prepend DOCTYPE in SPA mode entry.server.tsx, can opt out via remix reveal (#8725)
Fix build issue in SPA mode when using a
basename(#8720)Vite: Validate that the MDX Rollup plugin, if present, is placed before Remix in Vite config (#8690)
Vite: reliably detect non-root routes in Windows (#8806)
Sometimes route
filewill be unnormalized Windows path with\instead of/.Vite: Pass
remixUserConfigto presetremixConfighook (#8797)Vite: Fix issue resolving critical CSS during development when the current working directory differs from the project root (#8752)
Vite: Ensure CSS file URLs that are only referenced in the server build are available on the client (#8796)
Vite: Require version 5.1.0 to support
.css?urlimports (#8723)Fix type error in Remix config for synchronous
routesfunction (#8745)Vite: Support Vite v5.1.0's
.css?urlimports (#8684)Always ignore route files starting with
.(#8801)Vite: Enable use of
vite previewto preview Remix SPA applications (#8624)npm run starthas been renamed tonpm run previewwhich usesvite previewinstead of a standalone HTTP server such ashttp-serverorserv-cliVite: Remove the ability to pass
publicPathas an option to the Remix vite plugin (#8145)publicPathbaseconfig so we now set the RemixpublicPathfrom the VitebaseconfigVite: Fix issue where client route file requests fail if search params have been parsed and serialized before reaching the Remix Vite plugin (#8740)
Vite: Enable HMR for .md and .mdx files (#8711)
Updated dependencies:
@remix-run/server-runtime@2.7.0@remix-run/node@2.7.0v2.6.0Compare Source
Minor Changes
future.v3_throwAbortReasonflag to throwrequest.signal.reasonwhen a request is aborted instead of anErrorsuch asnew Error("query() call aborted: GET /path")(#8251)Patch Changes
Vite: Add
manifestoption to Vite plugin to enable writing a.remix/manifest.jsonfile to the build directory (#8575)This is a breaking change for consumers of the Vite plugin's "server bundles" feature.
The
build/server/bundles.jsonfile has been superseded by the more generalbuild/.remix/manifest.json. While the old server bundles manifest was always written to disk when generating server bundles, the build manifest file must be explicitly enabled via themanifestoption.Vite: Provide
Unstable_ServerBundlesFunctionandUnstable_VitePluginConfigtypes (#8654)Vite: add
--sourcemapClientand--sourcemapServerflags toremix vite:build(#8613)--sourcemapClient--sourcemapClient=inline--sourcemapClient=hidden--sourcemapServer--sourcemapServer=inline--sourcemapServer=hiddenSee https://vitejs.dev/config/build-options.html#build-sourcemap
Vite: Validate IDs returned from the
serverBundlesfunction to ensure they only contain alphanumeric characters, hyphens and underscores (#8598)Vite: fix "could not fast refresh" false alarm (#8580)
HMR is already functioning correctly but was incorrectly logging that it "could not fast refresh" on internal client routes.
Now internal client routes correctly register Remix exports like
metafor fast refresh,which removes the false alarm.
Vite: Cloudflare Pages support (#8531)
To get started with Cloudflare, you can use the [
unstable-vite-cloudflare][template-vite-cloudflare] template:Or read the new docs at Future > Vite > Cloudflare and
Future > Vite > Migrating > Migrating Cloudflare Functions.
Vite: Remove undocumented backwards compatibility layer for Vite v4 (#8581)
Vite: rely on Vite plugin ordering (#8627)
This is a breaking change for projects using the unstable Vite plugin.
The Remix plugin expects to process JavaScript or TypeScript files, so any transpilation from other languages must be done first.
For example, that means putting the MDX plugin before the Remix plugin:
import mdx from "@​mdx-js/rollup"; import { unstable_vitePlugin as remix } from "@​remix-run/dev"; import { defineConfig } from "vite"; export default defineConfig({ plugins: [ + mdx(), remix() - mdx(), ], });Previously, the Remix plugin misused
enforce: "post"from Vite's plugin API to ensure that it ran last.However, this caused other unforeseen issues.
Instead, we now rely on standard Vite semantics for plugin ordering.
The official Vite React SWC plugin also relies on plugin ordering for MDX.
Vite: Add
presetsoption to ease integration with different platforms and tools. (#8514)Vite: Remove interop with
<LiveReload />, rely on<Scripts />instead (#8636)This is a breaking change for projects using the unstable Vite plugin.
Vite provides a robust client-side runtime for development features like HMR,
making the
<LiveReload />component obsolete.In fact, having a separate dev scripts component was causing issues with script execution order.
To work around this, the Remix Vite plugin used to override
<LiveReload />into a bespokeimplementation that was compatible with Vite.
Instead of all this indirection, now the Remix Vite plugin instructs the
<Scripts />componentto automatically include Vite's client-side runtime and other dev-only scripts.
import { - LiveReload, Outlet, Scripts, } export default function App() { return ( <html> <head> </head> <body> <Outlet /> <Scripts /> - <LiveReload /> </body> </html> ) }Vite: Add
buildEndhook (#8620)Vite: add dev load context option to Cloudflare preset (#8649)
Vite: Add
modefield into generated server build (#8539)Vite: Only write Vite manifest files if
build.manifestis enabled within the Vite config (#8599)This is a breaking change for consumers of Vite's
manifest.jsonfiles.To explicitly enable generation of Vite manifest files, you must set
build.manifesttotruein your Vite config.Vite: reduce network calls for route modules during HMR (#8591)
Vite: Add new
buildDirectoryoption with a default value of"build". This replaces the oldassetsBuildDirectoryandserverBuildDirectoryoptions which defaulted to"build/client"and"build/server"respectively. (#8575)This is a breaking change for consumers of the Vite plugin that were using the
assetsBuildDirectoryandserverBuildDirectoryoptions.The Remix Vite plugin now builds into a single directory containing
clientandserverdirectories. If you've customized your build output directories, you'll need to migrate to the newbuildDirectoryoption, e.g.import { unstable_vitePlugin as remix } from "@​remix-run/dev"; import { defineConfig } from "vite"; export default defineConfig({ plugins: [ remix({ - serverBuildDirectory: "dist/server", - assetsBuildDirectory: "dist/client", + buildDirectory: "dist", }) ], });Vite: Remove
unstableprefix fromserverBundlesoption. (#8596)Vite: Write Vite manifest files to
build/.vitedirectory rather than being nested withinbuild/clientandbuild/serverdirectories. (#8599)This is a breaking change for consumers of Vite's
manifest.jsonfiles.Vite manifest files are now written to the Remix build directory. Since all Vite manifests are now in the same directory, they're no longer named
manifest.json. Instead, they're namedbuild/.vite/client-manifest.jsonandbuild/.vite/server-manifest.json, orbuild/.vite/server-{BUNDLE_ID}-manifest.jsonwhen using server bundles.Updated dependencies:
@remix-run/server-runtime@2.6.0@remix-run/node@2.6.0v2.5.1Compare Source
Patch Changes
isSpaModeto@remix-run/dev/server-buildvirtual module (#8492)<!DOCTYPE html>if not present to fix quirks mode warnings for SPA template (#8495)remix vite:build --profileto generate a.cpuprofilethat can be shared or uploaded to speedscope.appp + enterto start a new profiling session or stop the current sessionremix vite:dev --profileto initialize the dev server with a running profiling session@remix-run/node@2.5.1@remix-run/server-runtime@2.5.1v2.5.0Compare Source
Minor Changes
Add unstable support for "SPA Mode" (#8457)
You can opt into SPA Mode by setting
unstable_ssr: falsein your Remix Vite plugin config:Development in SPA Mode is just like a normal Remix app, and still uses the Remix dev server for HMR/HDR:
Building in SPA Mode will generate an
index.htmlfile in your client assets directory:To run your SPA, you serve your client assets directory via an HTTP server:
For more information, please refer to the SPA Mode docs.
Add
unstable_serverBundlesoption to Vite plugin to support splitting server code into multiple request handlers. (#8332)This is an advanced feature designed for hosting provider integrations. When compiling your app into multiple server bundles, there will need to be a custom routing layer in front of your app directing requests to the correct bundle. This feature is currently unstable and only designed to gather early feedback.
Example usage:
Patch Changes
Fix issue with
isbotv4 released on 1/1/2024 (#8415)remix devwill now add"isbot": "^4"topackage.jsoninstead of usinglatestentry.serverfiles to work with bothisbot@3andisbot@4for backwards-compatibility with Remix apps that have pinnedisbotto v3isbot@4moving forward viacreate-remixVite: Fix HMR issues when altering exports for non-rendered routes (#8157)
Vite: Default
NODE_ENVto"production"when runningremix vite:buildcommand (#8405)Vite: Remove Vite plugin config option
serverBuildPathin favor of separateserverBuildDirectoryandserverBuildFileoptions (#8332)Vite: Loosen strict route exports restriction, reinstating support for non-Remix route exports (#8420)
Updated dependencies:
@remix-run/server-runtime@2.5.0@remix-run/node@2.5.0v2.4.1Compare Source
Patch Changes
Vite: Error messages when
.serverfiles are referenced by client (#8267).servermodule from client code resulted in an error message like:The requested module '/app/models/answer.server.ts' does not provide an export named 'isDateType'answer.server.tsdoes provide theisDateTypeexport, but Remix was replacing.servermodules with empty modules (export {}) for the client build.servermodule is referenced from client code and includes dedicated error messages depending on whether the import occurs in a route or a non-route moduleRemove
unstable_viteServerBuildModuleIdin favor of manually referencing virtual module name"virtual:remix/server-build". (#8264)This is a breaking change for projects using the unstable Vite plugin with a custom server.
This change was made to avoid issues where
@remix-run/devcould be inadvertently required in your server's production dependencies.Instead, you should manually write the virtual module name
"virtual:remix/server-build"when callingssrLoadModulein development.Vite: Fix errors for non-existent
index.htmlimporter (#8353)Add
vite:devandvite:buildcommands to the Remix CLI. (#8211)In order to handle upcoming Remix features where your plugin options can impact the number of Vite builds required, you should now run your Vite
devandbuildprocesses via the Remix CLI.{ "scripts": { - "dev": "vite dev", - "build": "vite build && vite build --ssr" + "dev": "remix vite:dev", + "build": "remix vite:build" } }Vite: Preserve names for exports from
.clientmodules (#8200)Unlike
.servermodules, the main idea is not to prevent code from leaking into the server buildsince the client build is already public. Rather, the goal is to isolate the SSR render from client-only code.
Routes need to import code from
.clientmodules without compilation failing and then rely on runtime checksor otherwise ensure that execution only happens within a client-only context (e.g. event handlers,
useEffect).Replacing
.clientmodules with empty modules would cause the build to fail as ESM named imports are statically analyzed.So instead, we preserve the named export but replace each exported value with
undefined.That way, the import is valid at build time and standard runtime checks can be used to determine if the
code is running on the server or client.
Disable watch mode in Vite child compiler during build (#8342)
Vite: Show warning when source maps are enabled in production build (#8222)
Updated dependencies:
@remix-run/server-runtime@2.4.1@remix-run/node@2.4.1v2.4.0Compare Source
Minor Changes
Vite: exclude modules within
.serverdirectories from client build (#8154)Add support for
clientLoader/clientAction/HydrateFallbackroute exports (RFC) (#8173)Remix now supports loaders/actions that run on the client (in addition to, or instead of the loader/action that runs on the server). While we still recommend server loaders/actions for the majority of your data needs in a Remix app - these provide some levers you can pull for more advanced use-cases such as:
localStorage)IndexedDB)By default,
clientLoaderwill not run on hydration, and will only run on subsequent client side navigations.If you wish to run your client loader on hydration, you can set
clientLoader.hydrate=trueto force Remix to execute it on initial page load. Keep in mind that Remix will still SSR your route component so you should ensure that there is no new required data being added by yourclientLoader.If your
clientLoaderneeds to run on hydration and adds data you require to render the route component, you can export aHydrateFallbackcomponent that will render during SSR, and then your route component will not render until theclientLoaderhas executed on hydration.clientActionis simpler thanclientLoaderbecause it has no hydration use-cases.clientActionwill only run on client-side navigations.For more information, please refer to the
clientLoaderandclientActiondocumentation.Vite: Strict route exports (#8171)
With Vite, Remix gets stricter about which exports are allowed from your route modules.
Previously, the Remix compiler would allow any export from routes.
While this was convenient, it was also a common source of bugs that were hard to track down because they only surfaced at runtime.
For more, see https://remix.run/docs/en/main/future/vite#strict-route-exports
Add a new
future.v3_relativeSplatPathflag to implement a breaking bug fix to relative routing when inside a splat route. For more information, please see the React Router6.21.0Release Notes and theuseResolvedPathdocs. (#8216)Patch Changes
Upgrade Vite peer dependency range to v5 (#8172)
Support HMR for routes with
handleexport in Vite dev (#8022)Fix flash of unstyled content for non-Express custom servers in Vite dev (#8076)
Bundle CSS imported in client entry file in Vite plugin (#8143)
Change Vite build output paths to fix a conflict between how Vite and the Remix compiler each manage the
publicdirectory. (#8077)This is a breaking change for projects using the unstable Vite plugin.
The server is now compiled into
build/serverrather thanbuild, and the client is now compiled intobuild/clientrather thanpublic.For more information on the changes and guidance on how to migrate your project, refer to the updated Remix Vite documentation.
Remove undocumented
legacyCssImportsoption from Vite plugin due to issues with?urlimports of CSS files not being processed correctly in Vite (#8096)Vite: fix access to default
entry.{client,server}.tsxwithin pnpm workspace on Windows (#8057)Remove
unstable_createViteServerandunstable_loadViteServerBuildwhich were only minimal wrappers around Vite'screateServerandssrLoadModulefunctions when using a custom server. (#8120)This is a breaking change for projects using the unstable Vite plugin with a custom server.
Instead, we now provide
unstable_viteServerBuildModuleIdso that custom servers interact with Vite directly rather than via Remix APIs, for example:Creating the Vite server in middleware mode:
const vite = process.env.NODE_ENV === "production" ? undefined - : await unstable_createViteServer(); + : await import("vite").then(({ createServer }) => + createServer({ + server: { + middlewareMode: true, + }, + }) + );Loading the Vite server build in the request handler:
app.all( "*", createRequestHandler({ build: vite - ? () => unstable_loadViteServerBuild(vite) + ? () => vite.ssrLoadModule(unstable_viteServerBuildModuleId) : await import("./build/server/index.js"), }) );Pass request handler errors to
vite.ssrFixStacktracein Vite dev to ensure stack traces correctly map to the original source code (#8066)Vite: Preserve names for exports from .client imports (#8200)
Unlike
.servermodules, the main idea is not to prevent code from leaking into the server buildsince the client build is already public. Rather, the goal is to isolate the SSR render from client-only code.
Routes need to import code from
.clientmodules without compilation failing and then rely on runtime checksto determine if the code is running on the server or client.
Replacing
.clientmodules with empty modules would cause the build to fail as ESM named imports are statically analyzed.So instead, we preserve the named export but replace each exported value with an empty object.
That way, the import is valid at build time and the standard runtime checks can be used to determine if then
code is running on the server or client.
Add
@remix-run/nodeto Vite'soptimizeDeps.includearray (#8177)Improve Vite plugin performance (#8121)
server.preTransformRequestsin Vite child compiler since it's only used to process route modulesRemove automatic global Node polyfill installation from the built-in Vite dev server and instead allow explicit opt-in. (#8119)
This is a breaking change for projects using the unstable Vite plugin without a custom server.
If you're not using a custom server, you should call
installGlobalsin your Vite config instead.import { unstable_vitePlugin as remix } from "@​remix-run/dev"; +import { installGlobals } from "@​remix-run/node"; import { defineConfig } from "vite"; +installGlobals(); export default defineConfig({ plugins: [remix()], });Vite: Errors at build-time when client imports .server default export (#8184)
Remix already stripped .server file code before ensuring that server code never makes it into the client.
That results in errors when client code tries to import server code, which is exactly what we want!
But those errors were happening at runtime for default imports.
A better experience is to have those errors happen at build-time so that you guarantee that your users won't hit them.
Fix
request instanceof Requestchecks when using Vite dev server (#8062)Updated dependencies:
@remix-run/server-runtime@2.4.0@remix-run/node@2.4.0v2.3.1Compare Source
Patch Changes
nonceprop onLiveReloadcomponent in Vite dev (#8014)publicdirectory in Vite build (#8039)assetsBuildDirectorywas deeply nested within thepublicdirectory@remix-run/node@2.3.1@remix-run/server-runtime@2.3.1v2.3.0Compare Source
Patch Changes
LiveReloadcomponent afterScriptsin Vite dev (#7919).jsxfiles without manualReactimport in Vite (#7888)LiveReloadcomponent in Vite dev (#7919)developmentandproductionmodes are present, e.g.@mdx-js/rollup. (#7911)process.env.NODE_ENVvalues other than"development"in Vite dev (#7980)/@​fs(#7913)server.fs.allow.@remix-run/react(#7926)node_modules.Error: You must render this element inside a <Remix> element.deferin Vite dev server (#7842)8cd31d65)process.envfrom.envfiles on the server in Vite dev (#7958)FutureConfigtype ([#7895](https://Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.