From afe877066298bba2e4db0cc912331294f633fc7a Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Wed, 26 Oct 2022 15:15:08 +0200 Subject: [PATCH 1/7] fix(nuxt, nuxi): improve `pages` creation and removal dx --- packages/nuxi/src/commands/dev.ts | 24 +++++++++++++++---- packages/nuxt/src/pages/module.ts | 24 +++++++++++++++---- .../nuxt/src/pages/runtime/page-disabled.ts | 11 +++++++++ 3 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 packages/nuxt/src/pages/runtime/page-disabled.ts diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index 9f6311877bd..9d7193aa697 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -1,5 +1,6 @@ import type { AddressInfo } from 'node:net' import { RequestListener } from 'node:http' +import { readdirSync } from 'node:fs' import { resolve, relative, normalize } from 'pathe' import chokidar from 'chokidar' import { debounce } from 'perfect-debounce' @@ -129,16 +130,29 @@ export default defineNuxtCommand({ const isDirChange = ['addDir', 'unlinkDir'].includes(event) const isFileChange = ['add', 'unlink'].includes(event) - const reloadDirs = [currentNuxt.options.dir.pages, 'components', 'composables'] - .map(d => resolve(currentNuxt.options.srcDir, d)) + const pagesDir = resolve(currentNuxt.options.srcDir, currentNuxt.options.dir.pages) + const reloadDirs = ['components', 'composables'].map(d => resolve(currentNuxt.options.srcDir, d)) if (isDirChange) { if (reloadDirs.includes(file)) { - dLoad(true, `Directory \`${relativePath}/\` ${event === 'addDir' ? 'created' : 'removed'}`) + return dLoad(true, `Directory \`${relativePath}/\` ${event === 'addDir' ? 'created' : 'removed'}`) } - } else if (isFileChange) { + } + + if (isFileChange) { if (file.match(/(app|error|app\.config)\.(js|ts|mjs|jsx|tsx|vue)$/)) { - dLoad(true, `\`${relativePath}\` ${event === 'add' ? 'created' : 'removed'}`) + return dLoad(true, `\`${relativePath}\` ${event === 'add' ? 'created' : 'removed'}`) + } + } + + if (currentNuxt && file.startsWith(pagesDir)) { + const pagesDirFiles = readdirSync(pagesDir) + console.log(file, pagesDirFiles) + if (!currentNuxt.options.pages && pagesDirFiles.length) { + return dLoad(true, 'Enabling pages...') + } + if (currentNuxt.options.pages && !pagesDirFiles.length) { + return dLoad(true, 'Disabling pages...') } } }) diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index a059281e6b0..1d720319101 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -1,4 +1,4 @@ -import { existsSync } from 'node:fs' +import { existsSync, readdirSync } from 'node:fs' import { defineNuxtModule, addTemplate, addPlugin, addVitePlugin, addWebpackPlugin, findPath, addComponent, updateTemplates } from '@nuxt/kit' import { relative, resolve } from 'pathe' import { genString, genImport, genObjectFromRawEntries } from 'knitwork' @@ -18,16 +18,30 @@ export default defineNuxtModule({ layer => resolve(layer.config.srcDir, layer.config.dir?.pages || 'pages') ) - const isRouterOptionsPresent = nuxt.options._layers.some(layer => existsSync(resolve(layer.config.srcDir, 'app/router.options.ts'))) - // Disable module (and use universal router) if pages dir do not exists or user has disabled it - if ((nuxt.options.pages === false || (nuxt.options.pages !== true && !pagesDirs.some(dir => existsSync(dir)))) && !isRouterOptionsPresent) { + const isNonEmptyDir = (dir: string) => existsSync(dir) && readdirSync(dir).length + const checkPagesEnabled = () => { + if (nuxt.options.pages === false) { return false } + if (nuxt.options.pages === true) { return true } + if (nuxt.options._layers.some(layer => + existsSync(resolve(layer.config.srcDir, 'app/router.options.ts')) + )) { return true } + if (pagesDirs.some(dir => isNonEmptyDir(dir))) { + return true + } + return false + } + nuxt.options.pages = checkPagesEnabled() + if (!nuxt.options.pages) { addPlugin(resolve(distDir, 'app/plugins/router')) - // Add vue-router import for `` integration addTemplate({ filename: 'pages.mjs', getContents: () => 'export { useRoute } from \'#app\'' }) + addComponent({ + name: 'NuxtPage', + filePath: resolve(distDir, 'pages/runtime/page-disabled') + }) return } diff --git a/packages/nuxt/src/pages/runtime/page-disabled.ts b/packages/nuxt/src/pages/runtime/page-disabled.ts new file mode 100644 index 00000000000..df0d3945984 --- /dev/null +++ b/packages/nuxt/src/pages/runtime/page-disabled.ts @@ -0,0 +1,11 @@ +import { defineComponent } from 'vue' + +export default defineComponent({ + name: 'NuxtPage', + setup (_, props) { + if (process.dev) { + console.warn('Please create `pages/index.vue` to use ``') + } + return () => props.slots.default?.() + } +}) From 0a18acf618ddff2b469a4821eaa6477d2df2994d Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Wed, 26 Oct 2022 15:26:47 +0200 Subject: [PATCH 2/7] small refactors --- packages/nuxi/src/commands/dev.ts | 7 +++---- packages/nuxt/src/pages/module.ts | 21 ++++++++++++------- .../{page-disabled.ts => page-placeholder.ts} | 0 3 files changed, 16 insertions(+), 12 deletions(-) rename packages/nuxt/src/pages/runtime/{page-disabled.ts => page-placeholder.ts} (100%) diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index 9d7193aa697..38887dafa88 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -145,13 +145,12 @@ export default defineNuxtCommand({ } } - if (currentNuxt && file.startsWith(pagesDir)) { + if (file.startsWith(pagesDir)) { const pagesDirFiles = readdirSync(pagesDir) - console.log(file, pagesDirFiles) - if (!currentNuxt.options.pages && pagesDirFiles.length) { + if (currentNuxt && !currentNuxt.options.pages && pagesDirFiles.length) { return dLoad(true, 'Enabling pages...') } - if (currentNuxt.options.pages && !pagesDirFiles.length) { + if (currentNuxt && currentNuxt.options.pages && !pagesDirFiles.length) { return dLoad(true, 'Disabling pages...') } } diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index 1d720319101..ac3754a5a0e 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -20,18 +20,23 @@ export default defineNuxtModule({ // Disable module (and use universal router) if pages dir do not exists or user has disabled it const isNonEmptyDir = (dir: string) => existsSync(dir) && readdirSync(dir).length - const checkPagesEnabled = () => { - if (nuxt.options.pages === false) { return false } - if (nuxt.options.pages === true) { return true } - if (nuxt.options._layers.some(layer => - existsSync(resolve(layer.config.srcDir, 'app/router.options.ts')) - )) { return true } + const isPagesEnabled = () => { + if (nuxt.options.pages === false) { + return false + } + if (nuxt.options.pages === true) { + return true + } + if (nuxt.options._layers.some(layer => existsSync(resolve(layer.config.srcDir, 'app/router.options.ts')))) { + return true + } if (pagesDirs.some(dir => isNonEmptyDir(dir))) { return true } return false } - nuxt.options.pages = checkPagesEnabled() + nuxt.options.pages = isPagesEnabled() + if (!nuxt.options.pages) { addPlugin(resolve(distDir, 'app/plugins/router')) addTemplate({ @@ -40,7 +45,7 @@ export default defineNuxtModule({ }) addComponent({ name: 'NuxtPage', - filePath: resolve(distDir, 'pages/runtime/page-disabled') + filePath: resolve(distDir, 'pages/runtime/page-placeholder') }) return } diff --git a/packages/nuxt/src/pages/runtime/page-disabled.ts b/packages/nuxt/src/pages/runtime/page-placeholder.ts similarity index 100% rename from packages/nuxt/src/pages/runtime/page-disabled.ts rename to packages/nuxt/src/pages/runtime/page-placeholder.ts From f0b2862357f4a97654090fec009d5617c8db9d3a Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Wed, 26 Oct 2022 15:38:23 +0200 Subject: [PATCH 3/7] Update packages/nuxt/src/pages/module.ts Co-authored-by: Daniel Roe --- packages/nuxt/src/pages/module.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index ac3754a5a0e..b4e5fe7bee0 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -21,11 +21,8 @@ export default defineNuxtModule({ // Disable module (and use universal router) if pages dir do not exists or user has disabled it const isNonEmptyDir = (dir: string) => existsSync(dir) && readdirSync(dir).length const isPagesEnabled = () => { - if (nuxt.options.pages === false) { - return false - } - if (nuxt.options.pages === true) { - return true + if (typeof nuxt.options.pages === 'boolean') { + return nuxt.options.pages } if (nuxt.options._layers.some(layer => existsSync(resolve(layer.config.srcDir, 'app/router.options.ts')))) { return true From eba5337724d77309e99db59c3b98bfbd77e3f6e9 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Wed, 26 Oct 2022 15:41:52 +0200 Subject: [PATCH 4/7] fix: check exists before counting files --- packages/nuxi/src/commands/dev.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index 38887dafa88..eee7dc95fd4 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -1,6 +1,6 @@ import type { AddressInfo } from 'node:net' import { RequestListener } from 'node:http' -import { readdirSync } from 'node:fs' +import { existsSync, readdirSync } from 'node:fs' import { resolve, relative, normalize } from 'pathe' import chokidar from 'chokidar' import { debounce } from 'perfect-debounce' @@ -146,11 +146,11 @@ export default defineNuxtCommand({ } if (file.startsWith(pagesDir)) { - const pagesDirFiles = readdirSync(pagesDir) - if (currentNuxt && !currentNuxt.options.pages && pagesDirFiles.length) { + const hasPages = existsSync(pagesDir) ? readdirSync(pagesDir).length > 0 : false + if (currentNuxt && !currentNuxt.options.pages && hasPages) { return dLoad(true, 'Enabling pages...') } - if (currentNuxt && currentNuxt.options.pages && !pagesDirFiles.length) { + if (currentNuxt && currentNuxt.options.pages && !hasPages) { return dLoad(true, 'Disabling pages...') } } From 131cf3ecd600ebab8f2d266e30e08744b51e24a8 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Thu, 27 Oct 2022 16:27:16 +0200 Subject: [PATCH 5/7] Update packages/nuxt/src/pages/runtime/page-placeholder.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Chopin --- packages/nuxt/src/pages/runtime/page-placeholder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/pages/runtime/page-placeholder.ts b/packages/nuxt/src/pages/runtime/page-placeholder.ts index df0d3945984..c005052bc92 100644 --- a/packages/nuxt/src/pages/runtime/page-placeholder.ts +++ b/packages/nuxt/src/pages/runtime/page-placeholder.ts @@ -4,7 +4,7 @@ export default defineComponent({ name: 'NuxtPage', setup (_, props) { if (process.dev) { - console.warn('Please create `pages/index.vue` to use ``') + console.warn('Create a Vue component in the `pages/` directory to enable ``') } return () => props.slots.default?.() } From 4c796a0836915f8cf60a6f7a4287c7adec0066fd Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 27 Oct 2022 17:49:08 +0200 Subject: [PATCH 6/7] chore: simplify message --- packages/nuxi/src/commands/dev.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index fd5f226c242..8bf606ef34b 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -148,10 +148,10 @@ export default defineNuxtCommand({ if (file.startsWith(pagesDir)) { const hasPages = existsSync(pagesDir) ? readdirSync(pagesDir).length > 0 : false if (currentNuxt && !currentNuxt.options.pages && hasPages) { - return dLoad(true, 'Enabling pages...') + return dLoad(true, 'Pages enabled.') } if (currentNuxt && currentNuxt.options.pages && !hasPages) { - return dLoad(true, 'Disabling pages...') + return dLoad(true, 'Pages disabled.') } } }) From 67a64fed2a3dc4ca210c8b74b47a3300c55a5f18 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 27 Oct 2022 17:50:08 +0200 Subject: [PATCH 7/7] remove extra dot --- packages/nuxi/src/commands/dev.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index 8bf606ef34b..6864894555c 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -148,10 +148,10 @@ export default defineNuxtCommand({ if (file.startsWith(pagesDir)) { const hasPages = existsSync(pagesDir) ? readdirSync(pagesDir).length > 0 : false if (currentNuxt && !currentNuxt.options.pages && hasPages) { - return dLoad(true, 'Pages enabled.') + return dLoad(true, 'Pages enabled') } if (currentNuxt && currentNuxt.options.pages && !hasPages) { - return dLoad(true, 'Pages disabled.') + return dLoad(true, 'Pages disabled') } } })