From 948d3c53c37df9c0ea29134c95219430490a0727 Mon Sep 17 00:00:00 2001 From: Dominik Milacher Date: Sun, 5 Oct 2025 12:20:39 +0200 Subject: [PATCH] Create base layer --- packages/layers/base/.editorconfig | 12 +++ packages/layers/base/.gitignore | 24 ++++++ packages/layers/base/.npmrc | 2 + packages/layers/base/.nuxtrc | 1 + .../layers/base/.playground/app.config.ts | 5 ++ .../layers/base/.playground/nuxt.config.ts | 12 +++ packages/layers/base/README.md | 73 +++++++++++++++++++ packages/layers/base/app.config.ts | 14 ++++ packages/layers/base/app.vue | 3 + .../layers/base/components/HelloWorld.vue | 10 +++ packages/layers/base/eslint.config.js | 3 + packages/layers/base/nuxt.config.ts | 4 + packages/layers/base/package.json | 21 ++++++ packages/layers/base/tsconfig.json | 3 + 14 files changed, 187 insertions(+) create mode 100644 packages/layers/base/.editorconfig create mode 100644 packages/layers/base/.gitignore create mode 100644 packages/layers/base/.npmrc create mode 100644 packages/layers/base/.nuxtrc create mode 100644 packages/layers/base/.playground/app.config.ts create mode 100644 packages/layers/base/.playground/nuxt.config.ts create mode 100644 packages/layers/base/README.md create mode 100644 packages/layers/base/app.config.ts create mode 100644 packages/layers/base/app.vue create mode 100644 packages/layers/base/components/HelloWorld.vue create mode 100644 packages/layers/base/eslint.config.js create mode 100644 packages/layers/base/nuxt.config.ts create mode 100644 packages/layers/base/package.json create mode 100644 packages/layers/base/tsconfig.json diff --git a/packages/layers/base/.editorconfig b/packages/layers/base/.editorconfig new file mode 100644 index 0000000..007463b --- /dev/null +++ b/packages/layers/base/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_size = 2 +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/layers/base/.gitignore b/packages/layers/base/.gitignore new file mode 100644 index 0000000..259809b --- /dev/null +++ b/packages/layers/base/.gitignore @@ -0,0 +1,24 @@ +node_modules +*.log +.nuxt +nuxt.d.ts +.output +.data +.env +package-lock.json +framework +dist +.DS_Store + +# Yarn +.yarn/cache +.yarn/*state* + +# Local History +.history + +# VSCode +.vscode/ + +# JetBrains/WebStorm +.idea/ diff --git a/packages/layers/base/.npmrc b/packages/layers/base/.npmrc new file mode 100644 index 0000000..cf04042 --- /dev/null +++ b/packages/layers/base/.npmrc @@ -0,0 +1,2 @@ +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/packages/layers/base/.nuxtrc b/packages/layers/base/.nuxtrc new file mode 100644 index 0000000..9eb49a5 --- /dev/null +++ b/packages/layers/base/.nuxtrc @@ -0,0 +1 @@ +typescript.includeWorkspace = true diff --git a/packages/layers/base/.playground/app.config.ts b/packages/layers/base/.playground/app.config.ts new file mode 100644 index 0000000..2e818ca --- /dev/null +++ b/packages/layers/base/.playground/app.config.ts @@ -0,0 +1,5 @@ +export default defineAppConfig({ + myLayer: { + name: 'My amazing Nuxt layer (overwritten)' + } +}) diff --git a/packages/layers/base/.playground/nuxt.config.ts b/packages/layers/base/.playground/nuxt.config.ts new file mode 100644 index 0000000..969a646 --- /dev/null +++ b/packages/layers/base/.playground/nuxt.config.ts @@ -0,0 +1,12 @@ +import { fileURLToPath } from 'node:url' + +export default defineNuxtConfig({ + extends: ['..'], + modules: ['@nuxt/eslint'], + eslint: { + config: { + // Use the generated ESLint config for lint root project as well + rootDir: fileURLToPath(new URL('..', import.meta.url)) + } + } +}) diff --git a/packages/layers/base/README.md b/packages/layers/base/README.md new file mode 100644 index 0000000..8a884c0 --- /dev/null +++ b/packages/layers/base/README.md @@ -0,0 +1,73 @@ +# Nuxt Layer Starter + +Create Nuxt extendable layer with this GitHub template. + +## Setup + +Make sure to install the dependencies: + +```bash +pnpm install +``` + +## Working on your layer + +Your layer is at the root of this repository, it is exactly like a regular Nuxt project, except you can publish it on NPM. + +The `.playground` directory should help you on trying your layer during development. + +Running `pnpm dev` will prepare and boot `.playground` directory, which imports your layer itself. + +## Distributing your layer + +Your Nuxt layer is shaped exactly the same as any other Nuxt project, except you can publish it on NPM. + +To do so, you only have to check if `files` in `package.json` are valid, then run: + +```bash +npm publish --access public +``` + +Once done, your users will only have to run: + +```bash +npm install --save your-layer +``` + +Then add the dependency to their `extends` in `nuxt.config`: + +```ts +defineNuxtConfig({ + extends: 'your-layer' +}) +``` + +## Development Server + +Start the development server on http://localhost:3000 + +```bash +pnpm dev +``` + +## Production + +Build the application for production: + +```bash +pnpm build +``` + +Or statically generate it with: + +```bash +pnpm generate +``` + +Locally preview production build: + +```bash +pnpm preview +``` + +Checkout the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. diff --git a/packages/layers/base/app.config.ts b/packages/layers/base/app.config.ts new file mode 100644 index 0000000..e3276b7 --- /dev/null +++ b/packages/layers/base/app.config.ts @@ -0,0 +1,14 @@ +export default defineAppConfig({ + myLayer: { + name: 'Hello from Nuxt layer' + } +}) + +declare module '@nuxt/schema' { + interface AppConfigInput { + myLayer?: { + /** Project name */ + name?: string + } + } +} diff --git a/packages/layers/base/app.vue b/packages/layers/base/app.vue new file mode 100644 index 0000000..f9b5dfc --- /dev/null +++ b/packages/layers/base/app.vue @@ -0,0 +1,3 @@ + diff --git a/packages/layers/base/components/HelloWorld.vue b/packages/layers/base/components/HelloWorld.vue new file mode 100644 index 0000000..937eedb --- /dev/null +++ b/packages/layers/base/components/HelloWorld.vue @@ -0,0 +1,10 @@ + + + diff --git a/packages/layers/base/eslint.config.js b/packages/layers/base/eslint.config.js new file mode 100644 index 0000000..be2024e --- /dev/null +++ b/packages/layers/base/eslint.config.js @@ -0,0 +1,3 @@ +import withNuxt from './.playground/.nuxt/eslint.config.mjs' + +export default withNuxt() diff --git a/packages/layers/base/nuxt.config.ts b/packages/layers/base/nuxt.config.ts new file mode 100644 index 0000000..9d825c4 --- /dev/null +++ b/packages/layers/base/nuxt.config.ts @@ -0,0 +1,4 @@ +// https://nuxt.com/docs/api/configuration/nuxt-config +export default defineNuxtConfig({ + devtools: { enabled: true }, +}) diff --git a/packages/layers/base/package.json b/packages/layers/base/package.json new file mode 100644 index 0000000..4d91ff0 --- /dev/null +++ b/packages/layers/base/package.json @@ -0,0 +1,21 @@ +{ + "name": "@webapps/layers/base", + "type": "module", + "version": "0.0.1", + "main": "./nuxt.config.ts", + "scripts": { + "dev": "nuxi dev .playground", + "dev:prepare": "nuxt prepare .playground", + "build": "nuxt build .playground", + "generate": "nuxt generate .playground", + "preview": "nuxt preview .playground", + "lint": "eslint ." + }, + "devDependencies": { + "@nuxt/eslint": "latest", + "eslint": "^9.36.0", + "nuxt": "^4.1.2", + "typescript": "^5.9.2", + "vue": "latest" + } +} diff --git a/packages/layers/base/tsconfig.json b/packages/layers/base/tsconfig.json new file mode 100644 index 0000000..1d746c1 --- /dev/null +++ b/packages/layers/base/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./.playground/.nuxt/tsconfig.json" +}