v1.4.0
In this release, we have decided on what we think is a better way to implement or to import our modules in your Remix projects. What exactly does this mean?
Upcoming changes to module imports
Today you can import all Remix modules from the remix
package, whether they are server side or client side, node.js or cloudflare:
import { Link, json } from "remix";
Link
is actually coming from@remix-run/react
json
is coming from either@remix-run/node
or@remix-run/cloudflare
We call these "magic imports" because they work with a bit of magic in the remix setup
script.
In this release, we are encouraging you to update your imports to the actual packages that the modules come from with a migrate
script that will do the work for you:
- import { Link, json } from "remix"
+ import { Link } from "@remix-run/react"
+ import { json } from "@remix-run/node"
What do I do next?
This release doesn't break your existing code. Your old imports are still supported. Because magic imports will eventually be deprecated, this release includes a migrate
script to get your code updated beforehand. This script will:
- update your imports to the proper packages
- make any Remix-specific changes to your package.json
- outline any manual work that might be needed on your part
To execute the script in your project:
- Upgrade
@remix-run/dev
to v1.4.0 (should be in yourdevDependencies
) - Run
npx @remix-run/dev@latest migrate
from your project root and follow the prompts
That's it, you're done!
Background
Because Remix runs in multiple platforms as well as in the browser, we thought it would make development easier to not have to worry about the server environment or browser when importing modules: everything could be imported from remix
.
To make this work, the remix setup
script copied the exports from @remix-run/react
and @remix-run/{runtime}
( @remix-run/node
, @remix-run/cloudflare
, @remix-run/deno
) to node_modules/remix
. This way it didn't matter which environment you were deploying to, everything came from remix
.
While this is nice when importing modules, it has a number of problems:
- Various deploy targets use
node_modules
differently, and getting things to "just work" has created issues with deploying to those platforms - It breaks alternative package managers like pnpm and Yarn PnP
- We're all running
remix setup
manually way more often than we'd like
Because of this, we'll soon be deprecating the "magic imports". This release does not deprecate them, it simply provides the migration script so you can move off of magic imports sooner than later.
What's Changed
✨ Features
@remix-run/dev
: Introduce themigrate
command to replaceremix
imports with specific@remix-run
modules (#2670)
🐛 Bug fixes
- Auto-detect package manager when installing via
create-remix
(#2562) - Fix Remix templates
create-remix
when the conflict with local files with the same name (#2733)
💅 Enhancements
- Improvements to
remix-serve
to prevent crashing on various Node signals (#2528, #1822) - Make
getDependenciesToBundle
more resilient to misconfiguredpackages.json
(#2593)
New Contributors
- @XiNiHa made their first contribution in #2695
- @amorriscode made their first contribution in #2717
- @athongsavath made their first contribution in #2721
- @bolchowka made their first contribution in #2705
- @accidentaldeveloper made their first contribution in #2710
- @jodygeraldo made their first contribution in #2727
- @gmaliar made their first contribution in #1822
- @illright made their first contribution in #2562
Full Changelog: v1.3.5...v1.4.0