next.js: Custom .babelrc file not being loaded after upgrading to Next.js 11
What version of Next.js are you using?
11.0.1
What version of Node.js are you using?
12.16.1
What browser are you using?
Chrome
What operating system are you using?
macOS
How are you deploying your application?
Other platform
Describe the Bug
Before upgrading to Next.js 11, my custom .babelrc file (which sits in the project’s root directory) would be picked up by and used. When I booted up the project, I would always receive this message:
However, after upgrading to 11, I no longer get this message when booting up the application and Emotion started complaining about some features that require the usage of their @emotion/babel-plugin which leads me to believe that the Babel custom configuration is not being picked up. I do have a custom server and my .babelrc looks like this:
{
  "plugins": ["@emotion/babel-plugin"],
  "presets": [
    [
      "next/babel",
      {
        "preset-react": {
          "runtime": "automatic",
          "importSource": "@emotion/react"
        }
      }
    ]
  ],
  "env": {
    "test": {
      "plugins": ["babel-plugin-dynamic-import-node"]
    }
  }
}
Expected Behavior
Next.js application would pick up the .babelrc file like it’s stated in its documentation and like it happened in v10.
To Reproduce
https://stackblitz.com/edit/nextjs-h1ihd3
In here I added a simple custom server that I took directly from your documentation and you can see that the message about the custom .babelrc being picked up, does not appear. You just need to run node server.js in the terminal.
About this issue
- Original URL
 - State: open
 - Created 3 years ago
 - Reactions: 5
 - Comments: 20 (2 by maintainers)
 
Commits related to this issue
- Add back logging when a custom babelrc is loaded Partially solves #26539 by adding back the log output when a config file is used — committed to timneutkens/next.js by timneutkens 3 years ago
 - Add logging when a custom babelrc is loaded (#26570) Partially solves #26539 by adding back the log output when a config file is used ## Bug - [ ] Related issues linked using `fixes #number` - [ ... — committed to vercel/next.js by timneutkens 3 years ago
 - Add example notion (#1) * [WIP] Add cms notion integration example - index page * Add cover images for pages * Add post page * Remove preview functionality * Add module.exports to securit... — committed to leimonio/next.js by leimonio 3 years ago
 - Add logging when a custom babelrc is loaded (#26570) Partially solves #26539 by adding back the log output when a config file is used ## Bug - [ ] Related issues linked using `fixes #number` - [ ... — committed to blitz-js/next.js by timneutkens 3 years ago
 
@MegaCookie @timneutkens Managed to find out what the issue was. In my custom server I was changing the
dirproperty which was not the same directory as the.babelrclives in. Last version this was not an issue but on this major one, thegetBaseWebpackConfigmethod looks for the custom Babel files inside thisdirproperty. I don’t know if this was an intentional change or if in the last version, I was taking advantage of an unexpected behaviour but these are my findings.If I move theOther solution which seems less contrived would be to just point theserver.tsfile into the root directory (it was in thesrc/serverdirectory with thedirproperty pointing one folder above to thesrc/ folder) and remove thediroverride, everything works as expected. And I think I’ll leave it like this and just change my build process.dirproperty to the correct folder while maintaining the rest of the project intact.So basically what I found is that on Next.js 10 having the
dirproperty not pointing to the folder where the.babelrcis, works unlike in Next.js 11.Ah nice finding! I will also try it this weekend, and let you all know.
It is quite interesting. I finally got version 11 to work in my project again. I had a
next.config.jsinside thesrcfolder, but found out by the docs (https://nextjs.org/docs/advanced-features/src-directory) that it should actually be in the root directory. Then still my.babelrcfile wasn’t picked up by Next. When I placed it inside thesrcdirectory it started to actually pickup the.babelrcfile.This was the case in which I used Next in combination with a Custom (express) server. So in my case the
dirproperty of the nextApp was pointing to the wrong folder (in my case I added the/srcin thediroption, but when removing this appendix, it had picked up the.babelrcfile). And also make sure yournext.config.jsis not in thesrcdirectory and change thedistDirto just.nextif needed. And additionally if you have a monorepo structure like me with a server and client repo, then all the babel plugins needs to be installed in the server repo if they are used by the Next.js client side.It’s a bit stupid but easily overlooked 😬, but I think the version 11 behaviour of only picking up a
.babelrcfile in the right directory makes more sense.Maybe a note of this behaviour change on the upgrade documentation/ custom server docs will be a good addition.
I was running into what I think was the same problem on v12 with custom server. I added an empty-ish file called
babel.config.jsinto my ./srcdirectory and it’s causing my real babel config to get picked up in the root. So the key was to have a config file in both places but put the actual configuring into the root.In my custom server:
const app = next({ dir: "./src", dev: isDev });My root
babel.config.jsis my actual config filled in with stuff about emotion, etc.src/babel.config.js:I’m running into this w/ NextJS 12
I have a
.babelrc.jsfile in the root of my project:When I run
next build/srcI see theWTF??console log, but as you can see, I’ve replaced all the plug names w/ “foo”.Shouldn’t the build fail when babel cannot find a plugin module by the given name??
Seems like the file’s being read, but the exported config isn’t actually being applied to babel upon build
I’ve released a new canary version with my PR: https://github.com/vercel/next.js/releases/tag/v11.0.2-canary.1
You can try it out using
yarn add next@canary(ornpm install next@canary), takes a bit to be published (15-20mins). Let me know if that change helps 👍I also have the same problem that I think my
.babelrcis not loaded with the@emotion/babel-pluginin particular. I debugged it by adding someconsole.logstatements in a.babelrc.jsfile, and that seems to be working. Unfortunately the page is getting no styles as I am relying on@emotion/babel-pluginfor styles.I tried to make a small reproduction example, but my fresh next.js project seems to be working fine. I am not sure what is going wrong then, but got the same problem as @AndreSilva1993.
Yeah, you’re right. Then I’m not exactly sure of what’s happening in my project because I’m getting this error
Component selectors can only be used in conjunction with @emotion/babel-pluginwhich I never faced since I always had the Emotion babel plugin configured. Perhaps I could wait for your PR to be certain that the.babelrcis indeed being loaded or not?