Does Next js production build need node_modules folder in the server?

Viewed 6759

I am fairly new to Next js and its deployment process. I have recently converted one of my react js projects to Next js in order to advantage of the server-side rendering feature Next js offers. Now comes the deployment time, I figured out the Next build won't deploy without the node_modules folder present in the server. I use getServerSideProps in my pages and build with "build": "next build" command in package.json. The problem is my node_modules folder is close to 300MB (.next build adds about another 10MB) and I don't think it is the best practice to accompany this much weight with each deployment (I intend to have different instances of this build deployed, therefore 310MB X number of instances) in the server. Am I doing something wrong here or is this the only way to accomplish this? I appreciate any answers. Thanks...

3 Answers

After a bit of research, I am answering my own question. If you use getServerSideProps you cannot static export your project. Therefore the node_modules folder is required to deploy the project on the server. That doesn't mean you have to FTP the node_modules, you can do the npm build on the server-side which will download node_modules to the deployment folder. In my case, the deployment folder weighs around 310MB where the node_modules folder itself is around 300MB.

The latest Next.js documentation has a good example about how to create a standalone build with an excellent example of how to accomplish it with docker. As of now, the feature is experimental.

// next.config.js
module.exports = {
  experimental: {
    outputStandalone: true,
  },
}

No, you don't need to add your node_modules.

Would recommend you check out the docs about how to go about deploying your Next.js application, but in essence:

  • run next build
  • run next export
  • deploy your out folder (default output folder, can be changed)

Alternatively, you can also use Netlify to deploy and host your application.

Related