This is a monorepo starter powered by:
$base
links so stand-alone app links will workv0.11.7
plop app
to work w/ new layout structure^1.0.0-next.570
^3.1.8
@packages/*
between @apps/*
pnpm clean
scriptpnpm dev
pnpm build
(turborepo build under hood)pnpm preview
dev
, beta
, and prod
to real web hostenv
variables shared in packages
@oneezy/components
GitHub repo + NPM package for sharing components between projectswebsites and webapps live in the ./apps
folder. They all live at the same level but the app routes are symlinked into the +app (main app) directory so they inherit Sveltekit's SPA routing system (Single Page Application).
libraries, configs and components live in the ./packages
folder.
dependencies
and devDependencies
between alls appsPrereqs
node v18.8.0 (or later)
pnpm v7 (or later)image.png
Installation
degit oneezy/monorepo my-app
pnpm i
+ start all apps
pnpm dev
+ start single app
pnpm dev --filter @apps/site
+ production build all apps
pnpm build
+ production preview all apps
pnpm preview
+ production preview single app
pnpm preview --filter @apps/dev
This monorepo makes use of symlinks to handle 2 separate scenarios. if you plan on using either you will need to follow the steps below for your app(s) to work properly. Learn more about symlinks by clicking here.
PROTIP: Quickly generate an app using plop !
pnpm plop app
symlink static assets
this monorepo only uses one folder for static assets located at ./apps/+app/static
so you will need to symlink that static
folder into every app you add to the apps/*
folder to get static assets working (this may change in the future but this is how we're handling it at the moment).
This is automatically handled for you when you
pnpm i
anywhere.
symlink app routes
if you want to link entire apps together as routes you will need to symlink your ./apps/my-app/src/routes
directory into the main ./apps/+app/src/routes
directory.
This is automatically handled for you when you
pnpm i
anywhere.
Components are the building blocks of your apps.
PROTIP: Quickly generate a component using plop !
pnpm plop component
or do it manually...
create new component in ./packages/components/src
directory
export new component from ./packages/components/index.js
file
use component in an app ./apps/site/src/routes/index.svelte
```html
./apps
(i.e. docs
)./packages
(i.e. components
)components
folder and create package.json
with proper namespace{
"name": "@packages/components",
"version": "0.0.0",
"type": "module",
"main": "index.js"
}
pnpm add
commandcd apps/docs
pnpm add @packages/components
pnpm adds the workspace at the bottom of your
docs/package.json
"dependencies": {
"@packages/components": "workspace:*"
}
package.json
Make sure to modify the contents in the project's root package json to fit your needs.
Package.json
inheritance from @packages/dependencies
You can create base package.json
's to inherit from each other.
i.e.
packages/dependencies/package.shared.json
{
"devDependencies": {
"svrollbar": "^0.12.0",
"svelte-accessible-accordion": "^2.1.0"
},
"dependencies": {
"@packages/config": "workspace:*",
"@packages/metadata": "workspace:*",
"@packages/components": "workspace:*"
}
}
And then add it to the app's package.json
like...
"name": "@apps/site",
"inherits": [
"@packages/dependencies/package.svelte.json",
"@packages/dependencies/package.shared.json"
],
If you want to run multiple dev enviornments in parallel, you will have to define different ports in each of your apps package.json
npm scripts (i.e. -p 4000
). Each apps port will need to be different.
"name": "@apps/docs",
"version": "0.0.0",
"scripts": {
"dev": "vite dev --port 4000",
"build": "vite build",
"preview": "vite preview --port 4000"
},
You have 1 of 3 options. If you try to create a symlink without one of these, you will see:
Failed to create symbolic link 'link' : Operation not permitted
When you make a symlink this way, you'll always need to open up the terminal as an Administrator
.
This is the easiest way but not the safest (security risk).
On
.Create symbolic links
```diffCommand Prompt
, Git Bash
or WSL
cd
to go into your project where you want to add the symlink
cd C:\Users\oneezy\Desktop\sveltekit-symlinks\src\routes
symlink
(not absolute!) to a directory folder (not a file!)mklink /D my-new-symlink ..\..\symlinked-docs
In your terminal you'll need to write the following command every time you restart git bash.
export MSYS=winsymlinks:nativestrict
System variables
section and click the New buttonname
and value
and click the OK button.Variable name: MSYS
Variable value: winsymlinks:nativestrict
You may also need to enable symlinks in your .gitconfig
user profile.
git config --global core.symlinks true
This will add the
symlinks = true
toC:\Users\username\.gitconfig
[core]
symlinks = true
You may also need to manually add symlinks = true
to the gitconfig inside C:\Program Files\Git\etc\gitconfig
if it's not there already
[core]
symlinks = true
cd
to go into your project where you want to add the symlink
cd c/users/oneezy/desktop/sveltekit-symlinks/src/routes
symlink
(not absolute!) to a directory folder (not a file!)ln -s ../../../docs docs
PROTIP: To see a list of your symlinks use the
ls -l
command
oneezy@oneezy MINGW64 ~/Desktop/sveltekit-symlinks/src/routes (main)
$ ls -l
rw-r--r-- 1 oneezy 197609 1354 Jun 1 13:00 index.svelte
+lrwxrwxrwx 1 oneezy 197609 20 Jun 1 20:45 docs -> ../../docs/
This uses Sveltkits adapter-auto
and is being deployed to Vercel but you may need to change it depending on how you want to deploy.
BUILD COMMAND
pnpm build --filter @apps/app
ROOD DIRECTORY
apps/+app
Monorepo
Docs Starters
Blog Starters
Tailwind UI
Svelte Themes
Full-Stack Sveltekit