diff --git a/docs/content/1.getting-started/5.routing.md b/docs/content/1.getting-started/5.routing.md index e59a1220360..da260014d36 100644 --- a/docs/content/1.getting-started/5.routing.md +++ b/docs/content/1.getting-started/5.routing.md @@ -134,7 +134,7 @@ definePageMeta({ validate: async (route) => { const nuxtApp = useNuxtApp() // Check if the id is made up of digits - return /^\d+$/.test(params.id) + return /^\d+$/.test(route.params.id) } }) diff --git a/docs/content/3.api/5.commands/build-module.md b/docs/content/3.api/5.commands/build-module.md new file mode 100644 index 00000000000..1445a52c49c --- /dev/null +++ b/docs/content/3.api/5.commands/build-module.md @@ -0,0 +1,16 @@ +# `nuxi build-module` + +```{bash} +npx nuxi build-module [--stub] [rootDir] +``` + +The `build-module` command runs `@nuxt/module-builder` to generate `dist` directory within your `rootDir` that contains the full build for your **nuxt-module**. + +Option | Default | Description +-------------------------|-----------------|------------------ +`rootDir` | `.` | The root directory of the module to bundle. +`--stub` | `false` | Stub out your module for development using [jiti](https://github.com/unjs/jiti#jiti). (**note:** This is mainly for development purposes.) + +::alert +This command is only available when you are using `@nuxt/module-builder` to build your module. Please see [this readme](https://github.com/nuxt/module-builder#-nuxt-module-builder) for more information. +:: diff --git a/packages/nuxi/src/commands/build-module.ts b/packages/nuxi/src/commands/build-module.ts new file mode 100644 index 00000000000..43932c88015 --- /dev/null +++ b/packages/nuxi/src/commands/build-module.ts @@ -0,0 +1,33 @@ +import { execa } from 'execa' +import consola from 'consola' +import { resolve } from 'pathe' +import { tryResolveModule } from '../utils/cjs' +import { defineNuxtCommand } from './index' + +const MODULE_BUILDER_PKG = '@nuxt/module-builder' + +export default defineNuxtCommand({ + meta: { + name: 'build-module', + usage: 'npx nuxi build-module [--stub] [rootDir]', + description: `Helper command for using ${MODULE_BUILDER_PKG}` + }, + async invoke (args) { + // Find local installed version + const rootDir = resolve(args._[0] || '.') + const hasLocal = tryResolveModule(`${MODULE_BUILDER_PKG}/package.json`, rootDir) + + const execArgs = Object.entries({ + '--stub': args.stub + }).filter(([, value]) => value).map(([key]) => key) + + let cmd = 'nuxt-module-build' + if (!hasLocal) { + consola.warn(`Cannot find locally installed version of \`${MODULE_BUILDER_PKG}\` (>=0.2.0). Falling back to \`npx ${MODULE_BUILDER_PKG}\``) + cmd = 'npx' + execArgs.unshift(MODULE_BUILDER_PKG) + } + + await execa(cmd, execArgs, { preferLocal: true, stdio: 'inherit', cwd: rootDir }) + } +}) diff --git a/packages/nuxi/src/commands/index.ts b/packages/nuxi/src/commands/index.ts index 4771e7c4da0..1efc57bced5 100644 --- a/packages/nuxi/src/commands/index.ts +++ b/packages/nuxi/src/commands/index.ts @@ -5,6 +5,7 @@ const _rDefault = (r: any) => r.default || r export const commands = { dev: () => import('./dev').then(_rDefault), build: () => import('./build').then(_rDefault), + 'build-module': () => import('./build-module').then(_rDefault), cleanup: () => import('./cleanup').then(_rDefault), clean: () => import('./cleanup').then(_rDefault), preview: () => import('./preview').then(_rDefault), diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 612624be5ff..b5ddfa983f3 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -58,7 +58,7 @@ "knitwork": "^0.1.2", "magic-string": "^0.26.7", "mlly": "^0.5.16", - "nitropack": "npm:nitropack-edge@0.5.5-27764245.b884d0c", + "nitropack": "npm:nitropack-edge@0.6.0-27765421.6d4b416", "nuxi": "3.0.0-rc.11", "ohash": "^0.1.5", "ohmyfetch": "^0.4.19", diff --git a/packages/webpack/src/plugins/dynamic-base.ts b/packages/webpack/src/plugins/dynamic-base.ts index b51506de060..eba75dedfe1 100644 --- a/packages/webpack/src/plugins/dynamic-base.ts +++ b/packages/webpack/src/plugins/dynamic-base.ts @@ -21,7 +21,7 @@ export const DynamicBasePlugin = createUnplugin((options: DynamicBasePluginOptio return } const s = new MagicString(code) - s.append(`${options.globalPublicPath} = buildAssetsURL();\n`) + s.append(`\n${options.globalPublicPath} = buildAssetsURL();\n`) return { code: s.toString(), map: options.sourcemap diff --git a/test/basic.test.ts b/test/basic.test.ts index 69843ffb232..848989fa1d3 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -234,7 +234,7 @@ describe('pages', () => { expect(html).toContain('
') // ensure components are not rendered server-side expect(html).not.toContain('client only script') - await expectNoClientErrors('/client-only-components') + await expectNoClientErrors('/client-only-explicit-import') }) }) diff --git a/yarn.lock b/yarn.lock index dae6a300684..901cbac69d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2562,9 +2562,9 @@ __metadata: linkType: hard "@types/node@npm:^16.11.65": - version: 16.11.65 - resolution: "@types/node@npm:16.11.65" - checksum: 81d84cb1e7aa305574cd35acf1a5e47f4a7f52783ba096f4bc511314540dee33a27cbd4fddc8bddd4535f1c87a96a76907157bcde093a25c89e8851d6dd63022 + version: 16.11.66 + resolution: "@types/node@npm:16.11.66" + checksum: bf190db14d1f32ab10588dd1a1e30bb2e9ba9b78281fce7a81fa80d914f9b3203d48cf1c6a8f96ef6b0edbba281478d2c68d6ebb7719c896f2dd62429c64ef09 languageName: node linkType: hard @@ -4442,9 +4442,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001407": - version: 1.0.30001419 - resolution: "caniuse-lite@npm:1.0.30001419" - checksum: 7a4dc2794a6773574b5aebcd1c9c0d56159654821714152d8a0b04e261e1522bfd3d86589b8406ce81c7bf5b706118b73b2cb85d577ae433e303dd48ac9ff65f + version: 1.0.30001420 + resolution: "caniuse-lite@npm:1.0.30001420" + checksum: dfa5027b2aeaba3ab1731735a46aecf62f286cdeec7f8ccb0f8cce0a3d02447e640e944d9bf5d9ea98b53fac6c2b168bb18f4c9ad598d92a2da7b05e2aea06e2 languageName: node linkType: hard @@ -4518,19 +4518,20 @@ __metadata: linkType: hard "changelogen@npm:^0.3.2": - version: 0.3.2 - resolution: "changelogen@npm:0.3.2" + version: 0.3.5 + resolution: "changelogen@npm:0.3.5" dependencies: c12: ^0.2.13 consola: ^2.15.3 convert-gitmoji: ^0.1.2 execa: ^6.1.0 mri: ^1.2.0 + pkg-types: ^0.3.5 scule: ^0.3.2 - semver: ^7.3.7 + semver: ^7.3.8 bin: changelogen: dist/cli.mjs - checksum: d09734b44430b69e0d2849fee72fad09d9ea36d0920f5bf617364a04c4126214e42e09edef3543688927a06fc85a04e07053c0ae9cb76923a0dbcfa985214e56 + checksum: ec0bb8eb0a21c6d1ecd2f7faceb997c7a08ac298a5f26520b995933c2668aedd83f8cc54e375a3dbf94adcea1cf458365f8c0e11040593758503782e0e492da5 languageName: node linkType: hard @@ -8027,19 +8028,7 @@ __metadata: languageName: node linkType: hard -"h3@npm:^0.7.12": - version: 0.7.21 - resolution: "h3@npm:0.7.21" - dependencies: - cookie-es: ^0.5.0 - destr: ^1.1.1 - radix3: ^0.1.2 - ufo: ^0.8.5 - checksum: 4c7f7d450ebe802d07e34717353d0a3861b53cca0fa9ffbaa1be5d0e554bdf9cf00a6e91ba07265380960dbca1b34bf7945fb2d2f76a43e9f55b89c2adbe29e4 - languageName: node - linkType: hard - -"h3@npm:^0.8.0, h3@npm:^0.8.1": +"h3@npm:^0.8.1": version: 0.8.1 resolution: "h3@npm:0.8.1" dependencies: @@ -8529,7 +8518,7 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.2.2": +"ioredis@npm:^5.2.3": version: 5.2.3 resolution: "ioredis@npm:5.2.3" dependencies: @@ -9330,21 +9319,6 @@ __metadata: languageName: node linkType: hard -"listhen@npm:^0.2.13": - version: 0.2.15 - resolution: "listhen@npm:0.2.15" - dependencies: - clipboardy: ^3.0.0 - colorette: ^2.0.19 - defu: ^6.0.0 - get-port-please: ^2.6.1 - http-shutdown: ^1.2.2 - selfsigned: ^2.0.1 - ufo: ^0.8.5 - checksum: 6190a0dec7b150698c26b08b429888e6d86a4f81121cd0bc59fe0180097a9ed4e9839bc8bfbe10d1bc7d8a176958fb9ade161e50977275ac73fa536d7656075a - languageName: node - linkType: hard - "listhen@npm:^0.3.4": version: 0.3.4 resolution: "listhen@npm:0.3.4" @@ -10107,6 +10081,13 @@ __metadata: languageName: node linkType: hard +"mkdir@npm:^0.0.2": + version: 0.0.2 + resolution: "mkdir@npm:0.0.2" + checksum: 2b004ee8b847d34d6997a7217f82db854ed9503b6bf8c20df71ab1b235e310ad6317a40bc040ed13d962d121e2075635af7f02fba27827b2a558f658aa64f59b + languageName: node + linkType: hard + "mkdirp-infer-owner@npm:^2.0.0": version: 2.0.0 resolution: "mkdirp-infer-owner@npm:2.0.0" @@ -10280,9 +10261,9 @@ __metadata: languageName: node linkType: hard -"nitropack@npm:nitropack-edge@0.5.5-27764245.b884d0c": - version: 0.5.5-27764245.b884d0c - resolution: "nitropack-edge@npm:0.5.5-27764245.b884d0c" +"nitropack@npm:nitropack-edge@0.6.0-27765421.6d4b416": + version: 0.6.0-27765421.6d4b416 + resolution: "nitropack-edge@npm:0.6.0-27765421.6d4b416" dependencies: "@cloudflare/kv-asset-handler": ^0.2.0 "@netlify/functions": ^1.3.0 @@ -10310,7 +10291,7 @@ __metadata: fs-extra: ^10.1.0 globby: ^13.1.2 gzip-size: ^7.0.0 - h3: ^0.8.0 + h3: ^0.8.1 hookable: ^5.4.1 http-proxy: ^1.18.1 is-primitive: ^3.0.1 @@ -10321,31 +10302,31 @@ __metadata: mime: ^3.0.0 mlly: ^0.5.16 mri: ^1.2.0 - node-fetch-native: ^0.1.7 + node-fetch-native: ^0.1.8 ohash: ^0.1.5 ohmyfetch: ^0.4.19 pathe: ^0.3.9 perfect-debounce: ^0.1.3 pkg-types: ^0.3.5 pretty-bytes: ^6.0.0 - radix3: ^0.2.0 + radix3: ^0.2.1 rollup: ^2.79.1 rollup-plugin-terser: ^7.0.2 - rollup-plugin-visualizer: ^5.8.2 + rollup-plugin-visualizer: ^5.8.3 scule: ^0.3.2 semver: ^7.3.8 serve-placeholder: ^2.0.1 serve-static: ^1.15.0 source-map-support: ^0.5.21 std-env: ^3.3.0 - ufo: ^0.8.5 + ufo: ^0.8.6 unenv: ^0.6.2 unimport: ^0.6.8 - unstorage: ^0.5.6 + unstorage: ^0.6.0 bin: nitro: dist/cli.mjs nitropack: dist/cli.mjs - checksum: 4e044a2afafd5d5c597c672c6ee872bb7411609fb3190d69ce688d05624684ce9adee68a49b125292cf96e37a1d8693b233d9f8d746a8705a027b0af76fb894e + checksum: 39b2b059a9a5785f90c3bfc134e5eaee3af2685bf3aa9eb9405965fcd4ca868ff5593c3ef76477371075d9772e41742de691da3d41f35c82d085de3cb3a87d40 languageName: node linkType: hard @@ -10372,10 +10353,10 @@ __metadata: languageName: node linkType: hard -"node-fetch-native@npm:^0.1.4, node-fetch-native@npm:^0.1.5, node-fetch-native@npm:^0.1.7": - version: 0.1.7 - resolution: "node-fetch-native@npm:0.1.7" - checksum: 0e342f2e26b1c4970fc0c88469661813ad3f755df8ecd42cfacfc781e5a1a5de363fe50b9e9227d98a43368660e791af7a5f7a6566329caaeb7ea21017410539 +"node-fetch-native@npm:^0.1.4, node-fetch-native@npm:^0.1.5, node-fetch-native@npm:^0.1.8": + version: 0.1.8 + resolution: "node-fetch-native@npm:0.1.8" + checksum: 1cea29dc30e9b570b5510656f41050e7d2df70acc41937911d4374c404ac35b4592d6b6959a81f336f00f2d74b321d039b80d8a1b62eaaa395747733bc31c799 languageName: node linkType: hard @@ -10404,7 +10385,7 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1, node-forge@npm:^1.3.1": +"node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 @@ -10824,7 +10805,7 @@ __metadata: knitwork: ^0.1.2 magic-string: ^0.26.7 mlly: ^0.5.16 - nitropack: "npm:nitropack-edge@0.5.5-27764245.b884d0c" + nitropack: "npm:nitropack-edge@0.6.0-27765421.6d4b416" nuxi: 3.0.0-rc.11 ohash: ^0.1.5 ohmyfetch: ^0.4.19 @@ -10962,7 +10943,7 @@ __metadata: languageName: node linkType: hard -"ohmyfetch@npm:^0.4.18, ohmyfetch@npm:^0.4.19": +"ohmyfetch@npm:^0.4.19": version: 0.4.19 resolution: "ohmyfetch@npm:0.4.19" dependencies: @@ -12087,14 +12068,7 @@ __metadata: languageName: node linkType: hard -"radix3@npm:^0.1.2": - version: 0.1.2 - resolution: "radix3@npm:0.1.2" - checksum: 483ecb97ae51e8dbda04e1c393bb001739635799bd1d7a7d1086193458df61d85f9e936c44c7bde81aba370dfd6bce8ccbf0fa691911bb8ba83379c90f96fea4 - languageName: node - linkType: hard - -"radix3@npm:^0.2.0, radix3@npm:^0.2.1": +"radix3@npm:^0.2.1": version: 0.2.1 resolution: "radix3@npm:0.2.1" checksum: 4d7b7360000efb96bf542a7327aafe6f23a21b25add40f173ade2fb1a757be5f3dc4fd2caf6fab746b68d1b0f176d56fc9f529e8493307d69cc3cb4ca4fcb57e @@ -12501,7 +12475,7 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-visualizer@npm:^5.8.2, rollup-plugin-visualizer@npm:^5.8.3": +"rollup-plugin-visualizer@npm:^5.8.3": version: 5.8.3 resolution: "rollup-plugin-visualizer@npm:5.8.3" dependencies: @@ -12543,8 +12517,8 @@ __metadata: linkType: hard "rollup@npm:^3.2.0": - version: 3.2.0 - resolution: "rollup@npm:3.2.0" + version: 3.2.1 + resolution: "rollup@npm:3.2.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -12552,7 +12526,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: b05761daa6cb339cfef19493c31f16a5a4fb234091113c27c48c168afea23106e9730d8f129edf119e2f579b19cd3dd9a0e177a58b303b77c724fe3734004c0a + checksum: 52fa82deb5368c5ad0ef585c6900b782b246834a597b782e648adb3e4b8e458c111b634c358619d6137837fe064e704090d58d84f298d0c508d7a1aef9c0caf3 languageName: node linkType: hard @@ -12700,15 +12674,6 @@ __metadata: languageName: node linkType: hard -"selfsigned@npm:^2.0.1": - version: 2.1.1 - resolution: "selfsigned@npm:2.1.1" - dependencies: - node-forge: ^1 - checksum: aa9ce2150a54838978d5c0aee54d7ebe77649a32e4e690eb91775f71fdff773874a4fbafd0ac73d8ec3b702ff8a395c604df4f8e8868528f36fd6c15076fb43a - languageName: node - linkType: hard - "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": version: 5.7.1 resolution: "semver@npm:5.7.1" @@ -14029,21 +13994,22 @@ __metadata: languageName: node linkType: hard -"unstorage@npm:^0.5.6": - version: 0.5.6 - resolution: "unstorage@npm:0.5.6" +"unstorage@npm:^0.6.0": + version: 0.6.0 + resolution: "unstorage@npm:0.6.0" dependencies: anymatch: ^3.1.2 chokidar: ^3.5.3 destr: ^1.1.1 - h3: ^0.7.12 - ioredis: ^5.2.2 - listhen: ^0.2.13 + h3: ^0.8.1 + ioredis: ^5.2.3 + listhen: ^0.3.4 + mkdir: ^0.0.2 mri: ^1.2.0 - ohmyfetch: ^0.4.18 - ufo: ^0.8.5 - ws: ^8.8.1 - checksum: 2cb0c9b4e5561fbce1a30d0ff724758fed7887f7db9f5d905a3bebb42c7b77b763bf672e9b11cbb82df6bcc6e37d3e2ed8b9bc7214cbb011541ed81a4779b931 + ohmyfetch: ^0.4.19 + ufo: ^0.8.6 + ws: ^8.9.0 + checksum: 27acb13208aafe4224cdd7f3057c848021bccc609532810b1df0d6057234b5596d2fd2c54060ec36fa2bb6c1fa5d2ea2cd5d03665610356f9ca25d71d74a0d9d languageName: node linkType: hard @@ -14813,7 +14779,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.8.1": +"ws@npm:^8.9.0": version: 8.9.0 resolution: "ws@npm:8.9.0" peerDependencies: