In this project I would like to explain how to convert your Next.js project to monorepository project within 10 minutes.
.
|-- apps
|-- project-one
|-- pages
|-- next.config.js
|-- tsconfig.json
|-- project-two
|-- pages
|-- next.config.js
|-- tsconfig.json
|-- libs
|-- common-component
|-- common-component.tsx
|-- package.json
|-- tsconfig.json
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"@common/common-component": ["libs/common-component"]
}
}
}
3. Add to project nextjs-monorepo-tools package as dependency.
const { patchWebpackConfig } = require("nextjs-monorepo-tools");
const config = {
webpack: patchWebpackConfig({
commonDirs: ["libs"], // "libs" is directory for shared modules
}),
};
module.exports = config;
That should be done for every project in your monorepo.
Because how we have two projects we have to update package.json
to have dev
, build
, start
commands for each project.
"scripts": {
"dev:project-one": "next dev apps/project-one",
"dev:project-two": "next dev apps/project-two",
"build:project-one": "next build apps/project-one",
"build:project-two": "next build apps/project-two",
"start:project-one": "next start apps/project-one",
"start:project-two": "next start apps/project-two"
}
That's all!
Just create new directory in libs
and add new section in tsconfig.json
.
{
"compilerOptions": {
// ...
"paths": {
"@common/common-component": ["libs/common-component"],
"@common/common-component-two": ["libs/common-component-two"],
}
}
}