From ba45adc378c173a1e704a61e34f22920db631f29 Mon Sep 17 00:00:00 2001 From: Dominik Milacher Date: Fri, 13 Jun 2025 16:27:59 +0200 Subject: [PATCH] Improve monorepo --- apps/panoramablick/app.vue | 9 ++++----- apps/panoramablick/layouts/default.vue | 5 +++++ apps/panoramablick/nuxt.config.ts | 2 +- apps/panoramablick/package.json | 3 ++- apps/panoramablick/tsconfig.json | 2 +- packages/tsconfig/base.json | 17 +++++++++++++++++ packages/tsconfig/nuxt.json | 4 ++++ packages/tsconfig/package.json | 12 ++++++++++++ packages/tsconfig/vue.json | 4 ++++ packages/ui/package.json | 11 +++++++---- packages/ui/src/module.ts | 16 +++++++++------- packages/ui/src/runtime/components/WDummy.vue | 3 +++ packages/ui/src/runtime/plugin.ts | 5 ----- packages/ui/tsconfig.json | 2 +- pnpm-lock.yaml | 18 +++++++++++++++++- 15 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 apps/panoramablick/layouts/default.vue create mode 100644 packages/tsconfig/base.json create mode 100644 packages/tsconfig/nuxt.json create mode 100644 packages/tsconfig/package.json create mode 100644 packages/tsconfig/vue.json create mode 100644 packages/ui/src/runtime/components/WDummy.vue delete mode 100644 packages/ui/src/runtime/plugin.ts diff --git a/apps/panoramablick/app.vue b/apps/panoramablick/app.vue index 09f935b..f296e91 100644 --- a/apps/panoramablick/app.vue +++ b/apps/panoramablick/app.vue @@ -1,6 +1,5 @@ + + + + \ No newline at end of file diff --git a/apps/panoramablick/layouts/default.vue b/apps/panoramablick/layouts/default.vue new file mode 100644 index 0000000..d341e90 --- /dev/null +++ b/apps/panoramablick/layouts/default.vue @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/apps/panoramablick/nuxt.config.ts b/apps/panoramablick/nuxt.config.ts index 7cfe153..da14f31 100644 --- a/apps/panoramablick/nuxt.config.ts +++ b/apps/panoramablick/nuxt.config.ts @@ -2,5 +2,5 @@ export default defineNuxtConfig({ compatibilityDate: '2025-05-15', devtools: { enabled: true }, - modules: ['@nuxt/fonts', '@nuxt/icon', '@nuxt/image', '@nuxt/ui'] + modules: ['@nuxt/fonts', '@nuxt/icon', '@nuxt/image', '@nuxt/ui', '@websites/ui'] }) \ No newline at end of file diff --git a/apps/panoramablick/package.json b/apps/panoramablick/package.json index 0470355..53a90a5 100644 --- a/apps/panoramablick/package.json +++ b/apps/panoramablick/package.json @@ -10,7 +10,8 @@ "postinstall": "nuxt prepare" }, "dependencies": { - "@websites/ui": "0.0.0", + "@websites/ui": "workspace:*", + "@websites/tsconfig": "workspace:*", "@nuxt/fonts": "0.11.4", "@nuxt/icon": "1.13.0", "@nuxt/image": "1.10.0", diff --git a/apps/panoramablick/tsconfig.json b/apps/panoramablick/tsconfig.json index a746f2a..31f9914 100644 --- a/apps/panoramablick/tsconfig.json +++ b/apps/panoramablick/tsconfig.json @@ -1,4 +1,4 @@ { // https://nuxt.com/docs/guide/concepts/typescript - "extends": "./.nuxt/tsconfig.json" + "extends": "@websites/tsconfig/base.json" } diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json new file mode 100644 index 0000000..3cc6a22 --- /dev/null +++ b/packages/tsconfig/base.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "composite": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true + }, + "exclude": ["node_modules"] +} diff --git a/packages/tsconfig/nuxt.json b/packages/tsconfig/nuxt.json new file mode 100644 index 0000000..2effd1a --- /dev/null +++ b/packages/tsconfig/nuxt.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": ["./base.json"] +} diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json new file mode 100644 index 0000000..4bab677 --- /dev/null +++ b/packages/tsconfig/package.json @@ -0,0 +1,12 @@ +{ + "name": "@websites/tsconfig", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "@vue/tsconfig": "^0.5.1" + } +} diff --git a/packages/tsconfig/vue.json b/packages/tsconfig/vue.json new file mode 100644 index 0000000..597d6bc --- /dev/null +++ b/packages/tsconfig/vue.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": ["./base.json", "@vue/tsconfig/tsconfig.dom.json"] +} diff --git a/packages/ui/package.json b/packages/ui/package.json index f93a8f5..5ca3b5a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -5,17 +5,19 @@ "repository": "your-org/my-module", "license": "MIT", "type": "module", + "main": "./src/module.ts", "exports": { ".": { - "types": "./dist/types.d.mts", - "import": "./dist/module.mjs" + "import": "./src/module.ts", + "require": "./src/module.ts", + "default": "./src/module.ts", + "types": "./src/module.ts" } }, - "main": "./dist/module.mjs", "typesVersions": { "*": { ".": [ - "./dist/types.d.mts" + "./src/modules.ts" ] } }, @@ -41,6 +43,7 @@ "nuxt": "^3.17.5" }, "devDependencies": { + "@websites/tsconfig": "workspace:*", "@nuxt/devtools": "^2.5.0", "@nuxt/eslint-config": "^1.4.1", "@nuxt/fonts": "0.11.4", diff --git a/packages/ui/src/module.ts b/packages/ui/src/module.ts index 7d9c192..832a0a6 100644 --- a/packages/ui/src/module.ts +++ b/packages/ui/src/module.ts @@ -1,19 +1,21 @@ -import { defineNuxtModule, addPlugin, createResolver } from '@nuxt/kit' +import { defineNuxtModule, createResolver, addComponentsDir } from '@nuxt/kit' // Module options TypeScript interface definition export interface ModuleOptions {} export default defineNuxtModule({ meta: { - name: 'my-module', - configKey: 'myModule', + name: 'websites', + configKey: 'websites', }, - // Default configuration options of the Nuxt module defaults: {}, setup(_options, _nuxt) { const resolver = createResolver(import.meta.url) - - // Do not add the extension since the `.ts` will be transpiled to `.mjs` after `npm run prepack` - addPlugin(resolver.resolve('./runtime/plugin')) + addComponentsDir({ + path: resolver.resolve('./runtime/components'), + pathPrefix: false, + prefix: '', + global: true, + }) }, }) diff --git a/packages/ui/src/runtime/components/WDummy.vue b/packages/ui/src/runtime/components/WDummy.vue new file mode 100644 index 0000000..529005e --- /dev/null +++ b/packages/ui/src/runtime/components/WDummy.vue @@ -0,0 +1,3 @@ + diff --git a/packages/ui/src/runtime/plugin.ts b/packages/ui/src/runtime/plugin.ts deleted file mode 100644 index df7fd87..0000000 --- a/packages/ui/src/runtime/plugin.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { defineNuxtPlugin } from '#app' - -export default defineNuxtPlugin((_nuxtApp) => { - console.log('Plugin injected by my-module!') -}) diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 59ad4a8..02f1206 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "./.nuxt/tsconfig.json", + "extends": "@websites/tsconfig/base.json", "exclude": [ "dist", "node_modules", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60b323e..b28b041 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,8 +29,11 @@ importers: '@nuxt/ui': specifier: 3.1.3 version: 3.1.3(embla-carousel@8.6.0)(typescript@5.8.3)(vite@6.3.5)(vue-router@4.5.1)(vue@3.5.16) + '@websites/tsconfig': + specifier: workspace:* + version: link:../../packages/tsconfig '@websites/ui': - specifier: 0.0.0 + specifier: workspace:* version: link:../../packages/ui nuxt: specifier: ^3.17.5 @@ -45,6 +48,12 @@ importers: specifier: ^4.5.1 version: 4.5.1(vue@3.5.16) + packages/tsconfig: + devDependencies: + '@vue/tsconfig': + specifier: ^0.5.1 + version: 0.5.1 + packages/ui: dependencies: '@nuxt/kit': @@ -81,6 +90,9 @@ importers: '@types/node': specifier: latest version: 24.0.1 + '@websites/tsconfig': + specifier: workspace:* + version: link:../tsconfig changelogen: specifier: ^0.6.1 version: 0.6.1 @@ -3079,6 +3091,10 @@ packages: /@vue/shared@3.5.16: resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==} + /@vue/tsconfig@0.5.1: + resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} + dev: true + /@vueuse/core@10.11.1(vue@3.5.16): resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} dependencies: