This major release:
- Updates the packaging for better ESM/CJS compatibility
- Changes the package to use named exports instead of a default export
This release has breaking changes. (Note: this actually points to v3.1.0, which includes a hotfix that was meant for 3.0.0.)
This release is part of a wave of major versions of all the Redux packages: Redux Toolkit 2.0, Redux core 5.0, React-Redux 9.0, Reselect 5.0, and Redux Thunk 3.0.
For full details on all of the breaking changes and other significant changes to all of those packages, see the "Migrating to RTK 2.0 and Redux 5.0" migration guide in the Redux docs.
Note
The Redux core, Reselect, and Redux Thunk packages are included as part of Redux Toolkit, and RTK users do not need to manually upgrade them - you'll get them as part of the upgrade to RTK 2.0. (If you're not using Redux Toolkit yet, please start migrating your existing legacy Redux code to use Redux Toolkit today!)
# RTK
npm install @reduxjs/toolkit
yarn add @reduxjs/toolkit
# Standalone
npm install redux-thunk
yarn add redux-thunk
Changelog
Named Exports Instead of Default Exports
The redux-thunk
package previously used a single default export that was the thunk middleware, with an attached field named withExtraArgument
that allowed customization.
The default export has been removed. There are now two named exports: thunk
(the basic middleware) and withExtraArgument
.
If you are using Redux Toolkit, this should have no effect, as RTK already handles this inside of configureStore
.
ESM/CJS Package Compatibility
The biggest theme of the Redux v5 and RTK 2.0 releases is trying to get "true" ESM package publishing compatibility in place, while still supporting CJS in the published package.
The primary build artifact is now an ESM file, dist/redux-thunk.mjs
. Most build tools should pick this up. There's also a CJS artifact, and a second copy of the ESM file named redux-thunk.legacy-esm.js
to support Webpack 4 (which does not recognize the exports
field in package.json
).
Build Tooling
We're now building the package using https://github.com/egoist/tsup. We also now include sourcemaps for the ESM and CJS artifacts.
The repo has been updated to use Yarn 3 for dependencies and Vitest for running tests.
Dropping UMD Builds
Redux has always shipped with UMD build artifacts. These are primarily meant for direct import as script tags, such as in a CodePen or a no-bundler build environment.
For now, we're dropping those build artifacts from the published package, on the grounds that the use cases seem pretty rare today.
Since the code is so simple, the ESM artifact can be used directly in the browser via Unpkg.
If you have strong use cases for us continuing to include UMD build artifacts, please let us know!
extend-redux
Typedefs Removed
Redux Thunk 2.x included a redux-thunk/extend-redux
TS-only entry point, which extended the types of dispatch
and bindActionCreators
to globally give them knowledge of the thunk types. We feel that global overrides from a library are an anti-pattern, and we've removed this entry point. (Note: this ended up being released in 3.1.0, as it was missed in the original 3.0.0 release.)
Please follow our TS setup guidelines to infer the correct type of dispatch
for your store.
What's Changed
- Migrate thunk package to ESM by @markerikson in #340
- Switch package manager to Yarn 3 and update CI jobs by @markerikson in #341
- Run RTK publish CI examples on built artifact by @markerikson in #342
- Rewrite build/test setup and hopefully fix ESM compat by @markerikson in #344
- Change artifact names to be
redux-thunk
by @markerikson in #345 - Support Webpack 4 with a "legacy ESM" artifact by @markerikson in #346
- update README and types to match named export by @EskiMojo14 in #347
- Bump Redux peer dep for RC and update build tooling by @markerikson in #356
- Drop the extend-redux addition by @markerikson in #357
Full Changelog: v2.4.2...v3.1.0