To use a shared package in your app:
- Add a workspace dependency: "@devographics/core-models":"workspace:*"
- When deploying, configure the host to load the whole monorepo (eg on Vercel)
- If the shared code is not bundled, eg written in pure TypeScript, include it in the app bundle. In Next.js this is done via next-transpile-modules in next.config.js
Just is similar to NPM scripts or makefile, but language agnostic, simple and powerful.
Recommended installation with asdf:
asdf plugin add just
asdf install just latest
asdf global just latest
You might need to create the relevant .tool-versions
files, that defines the
version of Node used by asdf
(similarly to what .nvmrc do for NVM).
- Run redis (for external and internal API):
just redis
- Run mongo (for Next and APIs):
just mongo
The monorepo uses PNPM as its primary package manager.
Since we rely on Node 16+, you can use yarn
and pnpm
by enabling the Corepack feature of Node:
# If you have Node 16 installed, this will just work
corepack enable
- If you import a subdependency of a direct dependency, you need to install it explicitelyas well.
For example,
apollo-server-express
depens onapollo-server-core
. But if you want to useapollo-server-core
directly in your code, it must be installed. Yarn and NPM were more flexible (but also less reliable). - The
node_modules
folder structure is altered. This might trick Webpack cache (see the PNPM plugin used for Gatsby) and also our Apollo patch. Subdependencies are located innode_modules/.pnpm/node_modules
, only direct dependencies of the project are located innode_modules
(but they also link towards PNPM shared cache) - You need
preserveSymlinks: true
in tsconfig.
-
Apollo Studio for graqphl debugging: https://studio.apollographql.com/
-
Sentry for debugging: https://sentry.io/organizations/devographics
-
ScaleGrid for database hosting: https://scalegrid.io/ 11/2022: running on Mongo v4, be careful with compatibility matrix: https://www.mongodb.com/docs/drivers/node/current/compatibility/#mongodb-compatibility https://mongoosejs.com/docs/compatibility.html
-
Render.com for long running: APIs, admin form You can configure folders that are relevant for an app (eg "surveyadmin" & "shared") from the UI
Admin area: https://surveyadmin.onrender.com
-
Vercel for serverless (surveyform): https://vercel.com/devographics You can configure folders that are relevant for an app (eg "surveyform" & "shared") via "vercel.json" @see https://vercel.com/guides/how-do-i-use-the-ignored-build-step-field-on-vercel
-
Stellate for graphql caching: https://stellate.co/