Coder Social home page Coder Social logo

danielkolbespecial / monorepo-typescript-next-the-sane-way Goto Github PK

View Code? Open in Web Editor NEW

This project forked from martpie/monorepo-typescript-next-the-sane-way

0.0 0.0 0.0 821 KB

A monorepo example using TypeScript and Next.js

License: MIT License

JavaScript 28.03% TypeScript 71.97%

monorepo-typescript-next-the-sane-way's Introduction

Monorepo + TypeScript + Next.js: The Sane Way

This repo is an experiment to set-up a monorepo for a Next.js project using modules located in other directories. Everything is not perfect and "real-world" ready, but it should be a good first step.

  • Strict TypeScript: potential bugs are not an option
  • Transpiled server-side code: needed if you are going to re-use modules for both client and server-side Not anymore, Next.js is plenty powerful now and does not need it anymore in 99% of the cases
  • Jest
  • TypeScript
  • ESLint (now included in Next.js 10)
  • Transpile local packages with Next.js on-demand + HMR

My approach completely changed after a couple of projects, I realised the previous approach of having common configuration files was a bad practice:

  • Not a true monorepo where every subfolder is a separate app
  • Difficult to deploy and test on CI

Now, configuration files are repeated in each sub-folders, which means you need to be more careful regarding config and dependencies versions, but things are much easier to manage for developers and text editors.

Todos

  • GitHub actions sample
  • ESLint + Jest everywhere

More in details

TypeScript

The config is at the root of each project: <root>/<sub-project>/tsconfig.json.

Unit-tests

Jest is used for unit tests and all test files should be put in __tests__ folders to match the Jest philosophy and not pollute your directories too much.

The config is at the root of each project: <root>/<sub-project>/jest.config.js and all the tests can be run with npm run test:unit in each folder.

Linting

npm run test:lint

Root folder

Put everything you want there, a Next app, shared code, a react-native app, a CRA, even Wordpress if you want.

Next.js and local modules

Next.js will transpile modules thanks to the next-transpile-modules package. Transpiled modules can be changed by editing the transpileModules option in website/next.config.js.

This setup works thanks to npm symlinking local dependencies in website/'s node_modules folder. Yarn workspaces would work as well (though requiring some adaptation from this bolerplate).

monorepo-typescript-next-the-sane-way's People

Contributors

martpie avatar stigkj avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.