diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index d1049ec59a..842dd7fd93 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -24,6 +24,21 @@ }, "main": "dist/index.js", "module": "dist/redux-toolkit.esm.js", + "exports": { + ".": { + "import": "./dist/redux-toolkit.esm.mjs", + "require": "./dist/index.js" + }, + "./query": { + "import": "./dist/query/rtk-query.esm.mjs", + "require": "./dist/query/index.js" + }, + "./query/react": { + "import": "./dist/query/react/rtk-query-react.esm.mjs", + "require": "./dist/query/react/index.js" + }, + "./*": "./*" + }, "unpkg": "dist/redux-toolkit.umd.min.js", "types": "dist/index.d.ts", "devDependencies": { diff --git a/packages/toolkit/scripts/build.ts b/packages/toolkit/scripts/build.ts index d36a1d1cc0..8744726921 100644 --- a/packages/toolkit/scripts/build.ts +++ b/packages/toolkit/scripts/build.ts @@ -53,6 +53,14 @@ const buildTargets: BuildOptions[] = [ minify: false, env: '', }, + // ESM, embedded `process`, ES5 syntax: typical Webpack dev, mjs extension + { + format: 'esm', + name: 'esm', + minify: false, + env: '', + extension: 'mjs', + }, // ESM, embedded `process`, ES2017 syntax: modern Webpack dev { format: 'esm', @@ -134,10 +142,11 @@ async function bundle(options: BuildOptions & EntryPointOptions) { name, target = 'es2015', entryPoint, + extension = 'js', } = options const outputFolder = path.join('dist', folder) - const outputFilename = `${prefix}.${name}.js` + const outputFilename = `${prefix}.${name}.${extension}` const outputFilePath = path.join(outputFolder, outputFilename) const result = await build({ diff --git a/packages/toolkit/scripts/types.ts b/packages/toolkit/scripts/types.ts index 31f2fbe9b9..baf6de74cc 100644 --- a/packages/toolkit/scripts/types.ts +++ b/packages/toolkit/scripts/types.ts @@ -12,6 +12,7 @@ export interface BuildOptions { minify: boolean env: 'development' | 'production' | '' target?: 'es2017' + extension?: 'js' | 'mjs' } export interface EntryPointOptions {