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:
parent
4958fb1346
commit
130a989185
4 changed files with 95 additions and 50 deletions
2
.env
Normal file
2
.env
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
DEV_SERVER_HTTPS_CERT_BASE=
|
||||||
|
DEV_SERVER_HTTPS_CERT_PASS=
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -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
27
docs/dev-https.md
Normal 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
|
||||||
|
```
|
112
vite.config.ts
112
vite.config.ts
|
@ -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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in a new issue