vite: add https variables
All checks were successful
/ depoly (push) Successful in 1m21s

Personal note from Rubicon: I am unware that I
originally put the localhost.direct cert files
into the repository. All reference to the files
are now removed.

Sorry for the inconvenience.
This commit is contained in:
thislight 2024-10-27 00:22:28 +08:00
parent 4958fb1346
commit 130a989185
No known key found for this signature in database
GPG key ID: A50F9451AC56A63E
4 changed files with 95 additions and 50 deletions

2
.env Normal file
View file

@ -0,0 +1,2 @@
DEV_SERVER_HTTPS_CERT_BASE=
DEV_SERVER_HTTPS_CERT_PASS=

2
.gitignore vendored
View file

@ -1,3 +1,5 @@
node_modules node_modules
dist/ dist/
dev-dist/ dev-dist/
.env.local
.env.*.local

27
docs/dev-https.md Normal file
View file

@ -0,0 +1,27 @@
# Set up HTTPS for the dev server
With a valid HTTP server, you can let the other devices access your dev server, with features only available to HTTPS.
You can use [localhost.direct](https://get.localhost.direct) certificate for set up local HTTPS server. Any vaild certificate is also allowed.
Download the certs and unpack them. In this document we put them under "tools/cert/".
Create or edit the file ".env.local", this file is ignored by git. Copy the content from ".env":
```env
DEV_SERVER_HTTPS_CERT_BASE=
DEV_SERVER_HTTPS_CERT_PASS=
```
The `DEV_SERVER_HTTPS_CERT_BASE` is the basename for your cert. The cert includes two files to work: one's suffix is `.key`, the other is `.crt`. The base is the common part of them.
If you have files "tools/cert/localhost.direct.key" and "tools/cert/localhost.direct.crt", the value you need is "tools/cert/localhost.direct".
The `DEV_SERVER_HTTPS_CERT_PASS` is the password to unlock the key. For the localhost.direct, it's `password`.
Here is an example:
```env
DEV_SERVER_HTTPS_CERT_BASE=tools/cert/localhost.direct
DEV_SERVER_HTTPS_CERT_PASS=localhost
```

View file

@ -1,4 +1,4 @@
import { defineConfig } from "vite"; import { defineConfig, loadEnv } from "vite";
import solid from "vite-plugin-solid"; import solid from "vite-plugin-solid";
import solidStyled from "vite-plugin-solid-styled"; import solidStyled from "vite-plugin-solid-styled";
import suid from "@suid/vite-plugin"; import suid from "@suid/vite-plugin";
@ -45,57 +45,71 @@ const chunkStrs: GetManualChunk = (id, { getModuleInfo }) => {
} }
}; };
const manualChunks: GetManualChunk = (id, meta) => { const manualChunks: GetManualChunk = (id, meta) => {
return chunkStrs(id, meta); return chunkStrs(id, meta);
}; };
export default defineConfig(({ mode }) => ({ export default defineConfig(({ mode }) => {
plugins: [ const devConf = loadEnv(mode, import.meta.dirname, "DEV");
suid(),
solid(), const serverHttpCertBase = devConf["DEV_SERVER_HTTP_CERT_BASE"];
solidStyled({ const serverHttpCertPassword = devConf["DEV_SERVER_HTTP_CERT_PASS"];
filter: {
include: "src/**/*.{tsx,jsx}", const serverHttpCertKey = serverHttpCertBase
exclude: "node_modules/**/*.{ts,js,tsx,jsx}", ? `${serverHttpCertBase}.key`
}, : undefined;
}), const serverHttpCertCrt = serverHttpCertBase
VitePWA({ ? `${serverHttpCertBase}.crt`
strategies: "injectManifest", : undefined;
registerType: "autoUpdate",
devOptions: { return {
enabled: !["production", "staging"].includes(mode), plugins: [
}, suid(),
srcDir: "src/serviceworker", solid(),
filename: "main.ts", solidStyled({
manifest: manifest, filter: {
pwaAssets: { include: "src/**/*.{tsx,jsx}",
config: true, exclude: "node_modules/**/*.{ts,js,tsx,jsx}",
}, },
}), }),
version(), VitePWA({
], strategies: "injectManifest",
server: { registerType: "autoUpdate",
https: { devOptions: {
// localhost.direct: https://github.com/Upinel/localhost.direct enabled: !["production", "staging"].includes(mode),
key: "tools/certs/localhost.direct.key", },
cert: "tools/certs/localhost.direct.crt", srcDir: "src/serviceworker",
passphrase: "localhost", filename: "main.ts",
}, manifest: manifest,
}, pwaAssets: {
define: { config: true,
"import.meta.env.BUILT_AT": `"${new Date().toISOString()}"`, },
}, }),
css: { version(),
devSourcemap: true, ],
}, server: {
build: { https: {
target: ["firefox98", "safari15.4", "ios15.4", "chrome84", "edge87"], // This config controls https for the *dev server*.
sourcemap: true, // See docs/dev-https.md for setting up https
rollupOptions: { key: serverHttpCertKey,
output: { cert: serverHttpCertCrt,
manualChunks, passphrase: serverHttpCertPassword,
}, },
}, },
}, define: {
})); "import.meta.env.BUILT_AT": `"${new Date().toISOString()}"`,
},
css: {
devSourcemap: true,
},
build: {
target: ["firefox98", "safari15.4", "ios15.4", "chrome84", "edge87"],
sourcemap: true,
rollupOptions: {
output: {
manualChunks,
},
},
},
};
});