I recently updated Next.js to version 12.2.3 and I found out that next-compose-plugins do not work anymore. After peek at GitHub issue and I was able to copy and paste working solution:
/**
* @type {import('next').NextConfig}
*/
module.exports = () => {
const plugins = [withTM, withVanillaExtract, withSentryConfig];
return plugins.reduce((acc, next) => next(acc), {
i18n: {
locales: ["en-US", "nl-BE", "pl-PL"],
defaultLocale: "en-US",
},
});
};
It worked fine but I wanted to pass argument to withSentryConfig
- i turns out that I need to pass it as another argument to next
function in reduce:
return plugins.reduce((acc, next) => {
if (next.name === 'withSentryConfig') {
return next(acc, {silent: true });
}
return next(acc);
}, {
// the rest of next.js config
});
Changelog
- Update the last snippet after feedback from Miguel Leite
Top comments (5)
You need to be careful about the final
reduce
, since you're passing thesilent
property to every single plugin. You're also missing a closing parenthesis on thenext()
call.How about this? 👆
@miguelacleite thanks for catching that - I'll update the code 🙇🏻
Please have a look at the successor of
next-compose-plugins
which is next-recompose-plugins. This package provides a clean and easy API for Next.js's plugins configuration and composition.Here is a sneak peek:
I highly recommend this package because it allows us to apply plugins seamlessly, the plugin application is less error prone, and the final code looks clean and consistent.
Hello, I would like to ask a question, in next.js, how to execute the init() of sentry only on the client side, not on the server side, because window is not defined
import { init, WINDOW } from "@sentry/nextjs";