From e4d872e4691d214e78c44d080750e53daa4bc946 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 12:24:29 +0200 Subject: [PATCH 1/4] feat(nuxi): use listen 0.3.x for `nuxi dev` with better https support --- packages/nuxi/package.json | 2 +- packages/nuxi/src/commands/dev.ts | 3 +-- yarn.lock | 27 +++++++++++++++++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/nuxi/package.json b/packages/nuxi/package.json index 4b9272727d8..e9ec94be284 100644 --- a/packages/nuxi/package.json +++ b/packages/nuxi/package.json @@ -36,7 +36,7 @@ "flat": "^5.0.2", "giget": "^0.1.6", "jiti": "^1.15.0", - "listhen": "^0.2.15", + "listhen": "^0.3.0", "mlly": "^0.5.14", "mri": "^1.2.0", "pathe": "^0.3.7", diff --git a/packages/nuxi/src/commands/dev.ts b/packages/nuxi/src/commands/dev.ts index bd01df9b77d..05ee66e34ea 100644 --- a/packages/nuxi/src/commands/dev.ts +++ b/packages/nuxi/src/commands/dev.ts @@ -48,8 +48,7 @@ export default defineNuxtCommand({ open: args.open || args.o, port: args.port || args.p || process.env.NUXT_PORT, hostname: args.host || args.h || process.env.NUXT_HOST, - https: Boolean(args.https), - certificate: (args['ssl-cert'] && args['ssl-key']) && { + https: args.https && { cert: args['ssl-cert'], key: args['ssl-key'] } diff --git a/yarn.lock b/yarn.lock index 26269cd1f6b..aaa0d352baa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8337,6 +8337,13 @@ __metadata: languageName: node linkType: hard +"ip-regex@npm:^5.0.0": + version: 5.0.0 + resolution: "ip-regex@npm:5.0.0" + checksum: 4098b2df89c015f1484a5946e733ec126af8c1828719d90e09f04af23ce487e1a852670e4d3f51b0dc6dfbaf7d8bfab23fd7893ca60e69833da99b7b1ee3623b + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -9081,6 +9088,22 @@ __metadata: languageName: node linkType: hard +"listhen@npm:^0.3.0": + version: 0.3.0 + resolution: "listhen@npm:0.3.0" + dependencies: + clipboardy: ^3.0.0 + colorette: ^2.0.19 + defu: ^6.1.0 + get-port-please: ^2.6.1 + http-shutdown: ^1.2.2 + ip-regex: ^5.0.0 + node-forge: ^1.3.1 + ufo: ^0.8.5 + checksum: 4b34a6ef14e2bd91325275df567df6592233419f2bfc34195b565e29fa642ad74ffbeab3bcf524c314f4128ce0129d0d443b460c8bc0d1090f888c08cdf970ce + languageName: node + linkType: hard + "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" @@ -10117,7 +10140,7 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1": +"node-forge@npm:^1, node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 @@ -10431,7 +10454,7 @@ __metadata: fsevents: ~2.3.2 giget: ^0.1.6 jiti: ^1.15.0 - listhen: ^0.2.15 + listhen: ^0.3.0 mlly: ^0.5.14 mri: ^1.2.0 pathe: ^0.3.7 From e506be83b267343cfdaa472c9106dfd6c4794ea3 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 12:49:49 +0200 Subject: [PATCH 2/4] fix(vite-node): work with self-signed certificates out of the box --- packages/vite/src/runtime/client.manifest.mjs | 7 ++----- packages/vite/src/runtime/vite-node-shared.mjs | 14 +++++++++++--- packages/vite/src/runtime/vite-node.mjs | 12 +++--------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/vite/src/runtime/client.manifest.mjs b/packages/vite/src/runtime/client.manifest.mjs index f33e3b2a794..a30f3949603 100644 --- a/packages/vite/src/runtime/client.manifest.mjs +++ b/packages/vite/src/runtime/client.manifest.mjs @@ -1,6 +1,3 @@ -import { $fetch } from 'ohmyfetch' -import { getViteNodeOptions } from './vite-node-shared.mjs' +import { viteNodeFetch } from './vite-node-shared.mjs' -const viteNodeOptions = getViteNodeOptions() - -export default () => $fetch('/manifest', { baseURL: viteNodeOptions.baseURL }) +export default () => viteNodeFetch('/manifest') diff --git a/packages/vite/src/runtime/vite-node-shared.mjs b/packages/vite/src/runtime/vite-node-shared.mjs index 509063e6c66..ebe6fe45011 100644 --- a/packages/vite/src/runtime/vite-node-shared.mjs +++ b/packages/vite/src/runtime/vite-node-shared.mjs @@ -1,3 +1,11 @@ -export function getViteNodeOptions () { - return JSON.parse(process.env.NUXT_VITE_NODE_OPTIONS || '{}') -} +import { Agent as HTTPSAgent } from 'node:https' +import { $fetch } from 'ohmyfetch' + +export const viteNodeOptions = JSON.parse(process.env.NUXT_VITE_NODE_OPTIONS || '{}') + +export const viteNodeFetch = $fetch.create({ + baseURL: viteNodeOptions.baseURL, + agent: viteNodeOptions.baseURL.startsWith('https://') + ? new HTTPSAgent({ rejectUnauthorized: false }) + : null +}) diff --git a/packages/vite/src/runtime/vite-node.mjs b/packages/vite/src/runtime/vite-node.mjs index dab7b3d5a1b..0784d29d8a3 100644 --- a/packages/vite/src/runtime/vite-node.mjs +++ b/packages/vite/src/runtime/vite-node.mjs @@ -1,11 +1,9 @@ import { performance } from 'node:perf_hooks' import { createError } from 'h3' import { ViteNodeRunner } from 'vite-node/client' -import { $fetch } from 'ohmyfetch' import consola from 'consola' -import { getViteNodeOptions } from './vite-node-shared.mjs' +import { viteNodeOptions, viteNodeFetch } from './vite-node-shared.mjs' -const viteNodeOptions = getViteNodeOptions() const runner = createRunner() let render @@ -15,9 +13,7 @@ export default async (ssrContext) => { process.server = true // Invalidate cache for files changed since last rendering - const invalidates = await $fetch('/invalidates', { - baseURL: viteNodeOptions.baseURL - }) + const invalidates = await viteNodeFetch('/invalidates') const updates = runner.moduleCache.invalidateDepTree(invalidates) // Execute SSR bundle on demand @@ -39,9 +35,7 @@ function createRunner () { async fetchModule (id) { // TODO: fix in vite-node id = id.replace(/\/\//g, '/') - return await $fetch('/module/' + encodeURI(id), { - baseURL: viteNodeOptions.baseURL - }).catch((err) => { + return await viteNodeFetch('/module/' + encodeURI(id)).catch((err) => { const errorData = err?.data?.data if (!errorData) { throw err From 33cf8d71bda80bc38abe5dd03a262b5448aede18 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 12:57:29 +0200 Subject: [PATCH 3/4] add edge notes --- docs/content/3.api/5.commands/dev.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/content/3.api/5.commands/dev.md b/docs/content/3.api/5.commands/dev.md index ef603dbbc85..7f6ee26a062 100644 --- a/docs/content/3.api/5.commands/dev.md +++ b/docs/content/3.api/5.commands/dev.md @@ -25,3 +25,7 @@ This command sets `process.env.NODE_ENV` to `development`. ::alert{type="info"} If you are using a self-signed certificate in development, you will need to set `NODE_TLS_REJECT_UNAUTHORIZED=0` in your environment. :: + +::stabilityEdge{title="Improved SSL Handling"} +With next releases, `NODE_TLS_REJECT_UNAUTHORIZED` is no longer required. You can try this on edge channel using `npx nuxi-edge@latest dev --https` +:: From 5739630155f6c656ab7cd0ecba515b8964244744 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 12:59:21 +0200 Subject: [PATCH 4/4] update docs --- docs/content/3.api/5.commands/dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/3.api/5.commands/dev.md b/docs/content/3.api/5.commands/dev.md index 7f6ee26a062..06d550f6d87 100644 --- a/docs/content/3.api/5.commands/dev.md +++ b/docs/content/3.api/5.commands/dev.md @@ -26,6 +26,6 @@ This command sets `process.env.NODE_ENV` to `development`. If you are using a self-signed certificate in development, you will need to set `NODE_TLS_REJECT_UNAUTHORIZED=0` in your environment. :: -::stabilityEdge{title="Improved SSL Handling"} +::stabilityEdge{title="Improved HTTPS Support"} With next releases, `NODE_TLS_REJECT_UNAUTHORIZED` is no longer required. You can try this on edge channel using `npx nuxi-edge@latest dev --https` ::