This is a monorepo starter powered by:
$base links so stand-alone app links will workv0.11.7plop app to work w/ new layout structure^1.0.0-next.570^3.1.8@packages/* between @apps/*pnpm clean scriptpnpm devpnpm build (turborepo build under hood)pnpm previewdev, beta, and prod to real web hostenv variables shared in packages@oneezy/componentsGitHub 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 ianywhere.
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 ianywhere.
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.jsonMake sure to modify the contents in the project's root package json to fit your needs.
Package.json inheritance from @packages/dependenciesYou 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 WSLcd to go into your project where you want to add the symlinkcd 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 = truetoC:\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 symlinkcd 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 -lcommand
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