Skip to content

Commit 2d77eaf

Browse files
committed
feat: production ready serve
1 parent 60d86e1 commit 2d77eaf

File tree

3 files changed

+123
-11
lines changed

3 files changed

+123
-11
lines changed

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"@vue/compiler-sfc": "^3.0.4",
7070
"@vue/server-renderer": "^3.0.4",
7171
"chalk": "^4.1.0",
72+
"compression": "^1.7.4",
7273
"debug": "^4.1.1",
7374
"diacritics": "^1.3.0",
7475
"escape-html": "^1.0.3",
@@ -83,13 +84,15 @@
8384
"markdown-it-table-of-contents": "^0.4.4",
8485
"minimist": "^1.2.5",
8586
"ora": "^5.1.0",
87+
"polka": "^0.5.2",
8688
"prismjs": "^1.20.0",
8789
"sirv": "^1.0.10",
8890
"slash": "^3.0.0",
8991
"vite": "^2.0.0-alpha.3",
9092
"vue": "^3.0.4"
9193
},
9294
"devDependencies": {
95+
"@types/compression": "^1.7.0",
9396
"@types/fs-extra": "^9.0.1",
9497
"@types/jest": "^26.0.15",
9598
"@types/koa": "^2.11.6",

src/node/serve/serve.ts

+21-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import http from 'http'
21
import sirv from 'sirv'
2+
import compression from 'compression'
33
import { resolveConfig } from '../config'
44

55
export interface ServeOptions {
@@ -11,8 +11,25 @@ export async function serve(options: ServeOptions = {}) {
1111
const port = options.port !== undefined ? options.port : 5000
1212
const site = await resolveConfig(options.root)
1313

14-
const server = http.createServer(sirv(site.outDir, { dev: true, etag: true }))
15-
server.listen(port, () => {
16-
console.log(`listening at http://localhost:${port}`)
14+
const compress = compression()
15+
const serve = sirv(site.outDir, {
16+
etag: true,
17+
single: true,
18+
maxAge: 31536000,
19+
immutable: true,
20+
setHeaders(res, pathname) {
21+
if (!pathname.includes('/assets/')) {
22+
// force server validation for non-asset files since they are not
23+
// fingerprinted.
24+
res.setHeader('cache-control', 'no-cache')
25+
}
26+
}
1727
})
28+
29+
require('polka')()
30+
.use(compress, serve)
31+
.listen(port, (err: any) => {
32+
if (err) throw err
33+
console.log(`Built site served at http://localhost:${port}.\n`)
34+
})
1835
}

yarn.lock

+99-7
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@
106106
"@algolia/logger-common" "4.8.3"
107107
"@algolia/requester-common" "4.8.3"
108108

109+
"@arr/every@^1.0.0":
110+
version "1.0.1"
111+
resolved "https://registry.yarnpkg.com/@arr/every/-/every-1.0.1.tgz#22fe1f8e6355beca6c7c7bde965eb15cf994387b"
112+
integrity sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==
113+
109114
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11":
110115
version "7.12.11"
111116
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
@@ -623,6 +628,11 @@
623628
"@nodelib/fs.scandir" "2.1.4"
624629
fastq "^1.6.0"
625630

631+
"@polka/url@^0.5.0":
632+
version "0.5.0"
633+
resolved "https://registry.yarnpkg.com/@polka/url/-/url-0.5.0.tgz#b21510597fd601e5d7c95008b76bf0d254ebfd31"
634+
integrity sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==
635+
626636
"@polka/url@^1.0.0-next.9":
627637
version "1.0.0-next.11"
628638
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.11.tgz#aeb16f50649a91af79dbe36574b66d0f9e4d9f71"
@@ -690,6 +700,13 @@
690700
"@types/connect" "*"
691701
"@types/node" "*"
692702

703+
"@types/compression@^1.7.0":
704+
version "1.7.0"
705+
resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.7.0.tgz#8dc2a56604873cf0dd4e746d9ae4d31ae77b2390"
706+
integrity sha512-3LzWUM+3k3XdWOUk/RO+uSjv7YWOatYq2QADJntK1pjkk4DfVP0KrIEPDnXRJxAAGKe0VpIPRmlINLDuCedZWw==
707+
dependencies:
708+
"@types/express" "*"
709+
693710
"@types/connect@*":
694711
version "3.4.34"
695712
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901"
@@ -1035,6 +1052,14 @@ abab@^2.0.3:
10351052
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
10361053
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
10371054

1055+
accepts@~1.3.5:
1056+
version "1.3.7"
1057+
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
1058+
integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
1059+
dependencies:
1060+
mime-types "~2.1.24"
1061+
negotiator "0.6.2"
1062+
10381063
acorn-globals@^6.0.0:
10391064
version "6.0.0"
10401065
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
@@ -1393,6 +1418,11 @@ buffer-from@1.x, buffer-from@^1.0.0:
13931418
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
13941419
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
13951420

1421+
bytes@3.0.0:
1422+
version "3.0.0"
1423+
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
1424+
integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
1425+
13961426
cache-base@^1.0.1:
13971427
version "1.0.1"
13981428
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -1661,6 +1691,26 @@ component-emitter@^1.2.1:
16611691
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
16621692
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
16631693

1694+
compressible@~2.0.16:
1695+
version "2.0.18"
1696+
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
1697+
integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
1698+
dependencies:
1699+
mime-db ">= 1.43.0 < 2"
1700+
1701+
compression@^1.7.4:
1702+
version "1.7.4"
1703+
resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
1704+
integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
1705+
dependencies:
1706+
accepts "~1.3.5"
1707+
bytes "3.0.0"
1708+
compressible "~2.0.16"
1709+
debug "2.6.9"
1710+
on-headers "~1.0.2"
1711+
safe-buffer "5.1.2"
1712+
vary "~1.1.2"
1713+
16641714
concat-map@0.0.1:
16651715
version "0.0.1"
16661716
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -1961,7 +2011,7 @@ dateformat@^3.0.0:
19612011
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
19622012
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
19632013

1964-
debug@^2.2.0, debug@^2.3.3:
2014+
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
19652015
version "2.6.9"
19662016
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
19672017
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -4007,6 +4057,13 @@ markdown-it@^10.0.0:
40074057
mdurl "^1.0.1"
40084058
uc.micro "^1.0.5"
40094059

4060+
matchit@^1.0.0:
4061+
version "1.1.0"
4062+
resolved "https://registry.yarnpkg.com/matchit/-/matchit-1.1.0.tgz#c4ccf17d9c824cc1301edbcffde9b75a61d10a7c"
4063+
integrity sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==
4064+
dependencies:
4065+
"@arr/every" "^1.0.0"
4066+
40104067
mdurl@^1.0.1:
40114068
version "1.0.1"
40124069
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
@@ -4114,7 +4171,12 @@ mime-db@1.44.0:
41144171
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
41154172
integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
41164173

4117-
mime-types@^2.1.12, mime-types@~2.1.19:
4174+
"mime-db@>= 1.43.0 < 2":
4175+
version "1.45.0"
4176+
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
4177+
integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
4178+
4179+
mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
41184180
version "2.1.27"
41194181
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
41204182
integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
@@ -4225,6 +4287,11 @@ natural-compare@^1.4.0:
42254287
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
42264288
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
42274289

4290+
negotiator@0.6.2:
4291+
version "0.6.2"
4292+
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
4293+
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
4294+
42284295
neo-async@^2.6.0:
42294296
version "2.6.2"
42304297
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
@@ -4386,6 +4453,11 @@ object.pick@^1.3.0:
43864453
dependencies:
43874454
isobject "^3.0.1"
43884455

4456+
on-headers@~1.0.2:
4457+
version "1.0.2"
4458+
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
4459+
integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
4460+
43894461
once@^1.3.0, once@^1.3.1, once@^1.4.0:
43904462
version "1.4.0"
43914463
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -4644,6 +4716,14 @@ please-upgrade-node@^3.2.0:
46444716
dependencies:
46454717
semver-compare "^1.0.0"
46464718

4719+
polka@^0.5.2:
4720+
version "0.5.2"
4721+
resolved "https://registry.yarnpkg.com/polka/-/polka-0.5.2.tgz#588bee0c5806dbc6c64958de3a1251860e9f2e26"
4722+
integrity sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==
4723+
dependencies:
4724+
"@polka/url" "^0.5.0"
4725+
trouter "^2.0.1"
4726+
46474727
posix-character-classes@^0.1.0:
46484728
version "0.1.1"
46494729
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@@ -5097,16 +5177,16 @@ rxjs@^6.6.3:
50975177
dependencies:
50985178
tslib "^1.9.0"
50995179

5180+
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
5181+
version "5.1.2"
5182+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
5183+
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
5184+
51005185
safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
51015186
version "5.2.1"
51025187
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
51035188
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
51045189

5105-
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
5106-
version "5.1.2"
5107-
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
5108-
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
5109-
51105190
safe-regex@^1.1.0:
51115191
version "1.1.0"
51125192
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
@@ -5760,6 +5840,13 @@ trim-off-newlines@^1.0.0:
57605840
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
57615841
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
57625842

5843+
trouter@^2.0.1:
5844+
version "2.0.1"
5845+
resolved "https://registry.yarnpkg.com/trouter/-/trouter-2.0.1.tgz#2726a5f8558e090d24c3a393f09eaab1df232df6"
5846+
integrity sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==
5847+
dependencies:
5848+
matchit "^1.0.0"
5849+
57635850
ts-jest@^26.4.4:
57645851
version "26.4.4"
57655852
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49"
@@ -5930,6 +6017,11 @@ validate-npm-package-license@^3.0.1:
59306017
spdx-correct "^3.0.0"
59316018
spdx-expression-parse "^3.0.0"
59326019

6020+
vary@~1.1.2:
6021+
version "1.1.2"
6022+
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
6023+
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
6024+
59336025
verror@1.10.0:
59346026
version "1.10.0"
59356027
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"

0 commit comments

Comments
 (0)