├── README.md └── eggpain ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ └── images │ │ ├── chicken-egg.jpeg │ │ ├── duck-egg.jpeg │ │ ├── dumb-egg.jpeg │ │ ├── goose-egg.jpeg │ │ └── quail-egg.jpeg ├── data.json ├── main.js ├── router │ └── index.js ├── style.css └── views │ ├── ChickenEgg.vue │ ├── Eggs.vue │ ├── Home.vue │ └── NotFound.vue └── vite.config.js /README.md: -------------------------------------------------------------------------------- 1 | # B 站:技术蛋老师 2 | 3 | https://space.bilibili.com/327247876/ 4 | -------------------------------------------------------------------------------- /eggpain/README.md: -------------------------------------------------------------------------------- 1 | # B 站:技术蛋老师 2 | 3 | https://space.bilibili.com/327247876/ 4 | -------------------------------------------------------------------------------- /eggpain/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vite + Vue 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /eggpain/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eggpain", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "eggpain", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "vue": "^3.2.45", 12 | "vue-router": "^4.1.6" 13 | }, 14 | "devDependencies": { 15 | "@vitejs/plugin-vue": "^4.0.0", 16 | "vite": "^4.1.0" 17 | } 18 | }, 19 | "node_modules/@babel/parser": { 20 | "version": "7.20.15", 21 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", 22 | "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", 23 | "bin": { 24 | "parser": "bin/babel-parser.js" 25 | }, 26 | "engines": { 27 | "node": ">=6.0.0" 28 | } 29 | }, 30 | "node_modules/@esbuild/android-arm": { 31 | "version": "0.16.17", 32 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", 33 | "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", 34 | "cpu": [ 35 | "arm" 36 | ], 37 | "dev": true, 38 | "optional": true, 39 | "os": [ 40 | "android" 41 | ], 42 | "engines": { 43 | "node": ">=12" 44 | } 45 | }, 46 | "node_modules/@esbuild/android-arm64": { 47 | "version": "0.16.17", 48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", 49 | "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", 50 | "cpu": [ 51 | "arm64" 52 | ], 53 | "dev": true, 54 | "optional": true, 55 | "os": [ 56 | "android" 57 | ], 58 | "engines": { 59 | "node": ">=12" 60 | } 61 | }, 62 | "node_modules/@esbuild/android-x64": { 63 | "version": "0.16.17", 64 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", 65 | "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", 66 | "cpu": [ 67 | "x64" 68 | ], 69 | "dev": true, 70 | "optional": true, 71 | "os": [ 72 | "android" 73 | ], 74 | "engines": { 75 | "node": ">=12" 76 | } 77 | }, 78 | "node_modules/@esbuild/darwin-arm64": { 79 | "version": "0.16.17", 80 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", 81 | "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", 82 | "cpu": [ 83 | "arm64" 84 | ], 85 | "dev": true, 86 | "optional": true, 87 | "os": [ 88 | "darwin" 89 | ], 90 | "engines": { 91 | "node": ">=12" 92 | } 93 | }, 94 | "node_modules/@esbuild/darwin-x64": { 95 | "version": "0.16.17", 96 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", 97 | "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", 98 | "cpu": [ 99 | "x64" 100 | ], 101 | "dev": true, 102 | "optional": true, 103 | "os": [ 104 | "darwin" 105 | ], 106 | "engines": { 107 | "node": ">=12" 108 | } 109 | }, 110 | "node_modules/@esbuild/freebsd-arm64": { 111 | "version": "0.16.17", 112 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", 113 | "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", 114 | "cpu": [ 115 | "arm64" 116 | ], 117 | "dev": true, 118 | "optional": true, 119 | "os": [ 120 | "freebsd" 121 | ], 122 | "engines": { 123 | "node": ">=12" 124 | } 125 | }, 126 | "node_modules/@esbuild/freebsd-x64": { 127 | "version": "0.16.17", 128 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", 129 | "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", 130 | "cpu": [ 131 | "x64" 132 | ], 133 | "dev": true, 134 | "optional": true, 135 | "os": [ 136 | "freebsd" 137 | ], 138 | "engines": { 139 | "node": ">=12" 140 | } 141 | }, 142 | "node_modules/@esbuild/linux-arm": { 143 | "version": "0.16.17", 144 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", 145 | "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", 146 | "cpu": [ 147 | "arm" 148 | ], 149 | "dev": true, 150 | "optional": true, 151 | "os": [ 152 | "linux" 153 | ], 154 | "engines": { 155 | "node": ">=12" 156 | } 157 | }, 158 | "node_modules/@esbuild/linux-arm64": { 159 | "version": "0.16.17", 160 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", 161 | "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", 162 | "cpu": [ 163 | "arm64" 164 | ], 165 | "dev": true, 166 | "optional": true, 167 | "os": [ 168 | "linux" 169 | ], 170 | "engines": { 171 | "node": ">=12" 172 | } 173 | }, 174 | "node_modules/@esbuild/linux-ia32": { 175 | "version": "0.16.17", 176 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", 177 | "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", 178 | "cpu": [ 179 | "ia32" 180 | ], 181 | "dev": true, 182 | "optional": true, 183 | "os": [ 184 | "linux" 185 | ], 186 | "engines": { 187 | "node": ">=12" 188 | } 189 | }, 190 | "node_modules/@esbuild/linux-loong64": { 191 | "version": "0.16.17", 192 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", 193 | "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", 194 | "cpu": [ 195 | "loong64" 196 | ], 197 | "dev": true, 198 | "optional": true, 199 | "os": [ 200 | "linux" 201 | ], 202 | "engines": { 203 | "node": ">=12" 204 | } 205 | }, 206 | "node_modules/@esbuild/linux-mips64el": { 207 | "version": "0.16.17", 208 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", 209 | "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", 210 | "cpu": [ 211 | "mips64el" 212 | ], 213 | "dev": true, 214 | "optional": true, 215 | "os": [ 216 | "linux" 217 | ], 218 | "engines": { 219 | "node": ">=12" 220 | } 221 | }, 222 | "node_modules/@esbuild/linux-ppc64": { 223 | "version": "0.16.17", 224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", 225 | "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", 226 | "cpu": [ 227 | "ppc64" 228 | ], 229 | "dev": true, 230 | "optional": true, 231 | "os": [ 232 | "linux" 233 | ], 234 | "engines": { 235 | "node": ">=12" 236 | } 237 | }, 238 | "node_modules/@esbuild/linux-riscv64": { 239 | "version": "0.16.17", 240 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", 241 | "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", 242 | "cpu": [ 243 | "riscv64" 244 | ], 245 | "dev": true, 246 | "optional": true, 247 | "os": [ 248 | "linux" 249 | ], 250 | "engines": { 251 | "node": ">=12" 252 | } 253 | }, 254 | "node_modules/@esbuild/linux-s390x": { 255 | "version": "0.16.17", 256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", 257 | "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", 258 | "cpu": [ 259 | "s390x" 260 | ], 261 | "dev": true, 262 | "optional": true, 263 | "os": [ 264 | "linux" 265 | ], 266 | "engines": { 267 | "node": ">=12" 268 | } 269 | }, 270 | "node_modules/@esbuild/linux-x64": { 271 | "version": "0.16.17", 272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", 273 | "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", 274 | "cpu": [ 275 | "x64" 276 | ], 277 | "dev": true, 278 | "optional": true, 279 | "os": [ 280 | "linux" 281 | ], 282 | "engines": { 283 | "node": ">=12" 284 | } 285 | }, 286 | "node_modules/@esbuild/netbsd-x64": { 287 | "version": "0.16.17", 288 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", 289 | "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", 290 | "cpu": [ 291 | "x64" 292 | ], 293 | "dev": true, 294 | "optional": true, 295 | "os": [ 296 | "netbsd" 297 | ], 298 | "engines": { 299 | "node": ">=12" 300 | } 301 | }, 302 | "node_modules/@esbuild/openbsd-x64": { 303 | "version": "0.16.17", 304 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", 305 | "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", 306 | "cpu": [ 307 | "x64" 308 | ], 309 | "dev": true, 310 | "optional": true, 311 | "os": [ 312 | "openbsd" 313 | ], 314 | "engines": { 315 | "node": ">=12" 316 | } 317 | }, 318 | "node_modules/@esbuild/sunos-x64": { 319 | "version": "0.16.17", 320 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", 321 | "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", 322 | "cpu": [ 323 | "x64" 324 | ], 325 | "dev": true, 326 | "optional": true, 327 | "os": [ 328 | "sunos" 329 | ], 330 | "engines": { 331 | "node": ">=12" 332 | } 333 | }, 334 | "node_modules/@esbuild/win32-arm64": { 335 | "version": "0.16.17", 336 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", 337 | "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", 338 | "cpu": [ 339 | "arm64" 340 | ], 341 | "dev": true, 342 | "optional": true, 343 | "os": [ 344 | "win32" 345 | ], 346 | "engines": { 347 | "node": ">=12" 348 | } 349 | }, 350 | "node_modules/@esbuild/win32-ia32": { 351 | "version": "0.16.17", 352 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", 353 | "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", 354 | "cpu": [ 355 | "ia32" 356 | ], 357 | "dev": true, 358 | "optional": true, 359 | "os": [ 360 | "win32" 361 | ], 362 | "engines": { 363 | "node": ">=12" 364 | } 365 | }, 366 | "node_modules/@esbuild/win32-x64": { 367 | "version": "0.16.17", 368 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", 369 | "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", 370 | "cpu": [ 371 | "x64" 372 | ], 373 | "dev": true, 374 | "optional": true, 375 | "os": [ 376 | "win32" 377 | ], 378 | "engines": { 379 | "node": ">=12" 380 | } 381 | }, 382 | "node_modules/@vitejs/plugin-vue": { 383 | "version": "4.0.0", 384 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", 385 | "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", 386 | "dev": true, 387 | "engines": { 388 | "node": "^14.18.0 || >=16.0.0" 389 | }, 390 | "peerDependencies": { 391 | "vite": "^4.0.0", 392 | "vue": "^3.2.25" 393 | } 394 | }, 395 | "node_modules/@vue/compiler-core": { 396 | "version": "3.2.47", 397 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", 398 | "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", 399 | "dependencies": { 400 | "@babel/parser": "^7.16.4", 401 | "@vue/shared": "3.2.47", 402 | "estree-walker": "^2.0.2", 403 | "source-map": "^0.6.1" 404 | } 405 | }, 406 | "node_modules/@vue/compiler-dom": { 407 | "version": "3.2.47", 408 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", 409 | "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", 410 | "dependencies": { 411 | "@vue/compiler-core": "3.2.47", 412 | "@vue/shared": "3.2.47" 413 | } 414 | }, 415 | "node_modules/@vue/compiler-sfc": { 416 | "version": "3.2.47", 417 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", 418 | "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", 419 | "dependencies": { 420 | "@babel/parser": "^7.16.4", 421 | "@vue/compiler-core": "3.2.47", 422 | "@vue/compiler-dom": "3.2.47", 423 | "@vue/compiler-ssr": "3.2.47", 424 | "@vue/reactivity-transform": "3.2.47", 425 | "@vue/shared": "3.2.47", 426 | "estree-walker": "^2.0.2", 427 | "magic-string": "^0.25.7", 428 | "postcss": "^8.1.10", 429 | "source-map": "^0.6.1" 430 | } 431 | }, 432 | "node_modules/@vue/compiler-ssr": { 433 | "version": "3.2.47", 434 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", 435 | "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", 436 | "dependencies": { 437 | "@vue/compiler-dom": "3.2.47", 438 | "@vue/shared": "3.2.47" 439 | } 440 | }, 441 | "node_modules/@vue/devtools-api": { 442 | "version": "6.5.0", 443 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", 444 | "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" 445 | }, 446 | "node_modules/@vue/reactivity": { 447 | "version": "3.2.47", 448 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", 449 | "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", 450 | "dependencies": { 451 | "@vue/shared": "3.2.47" 452 | } 453 | }, 454 | "node_modules/@vue/reactivity-transform": { 455 | "version": "3.2.47", 456 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", 457 | "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", 458 | "dependencies": { 459 | "@babel/parser": "^7.16.4", 460 | "@vue/compiler-core": "3.2.47", 461 | "@vue/shared": "3.2.47", 462 | "estree-walker": "^2.0.2", 463 | "magic-string": "^0.25.7" 464 | } 465 | }, 466 | "node_modules/@vue/runtime-core": { 467 | "version": "3.2.47", 468 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", 469 | "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", 470 | "dependencies": { 471 | "@vue/reactivity": "3.2.47", 472 | "@vue/shared": "3.2.47" 473 | } 474 | }, 475 | "node_modules/@vue/runtime-dom": { 476 | "version": "3.2.47", 477 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", 478 | "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", 479 | "dependencies": { 480 | "@vue/runtime-core": "3.2.47", 481 | "@vue/shared": "3.2.47", 482 | "csstype": "^2.6.8" 483 | } 484 | }, 485 | "node_modules/@vue/server-renderer": { 486 | "version": "3.2.47", 487 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", 488 | "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", 489 | "dependencies": { 490 | "@vue/compiler-ssr": "3.2.47", 491 | "@vue/shared": "3.2.47" 492 | }, 493 | "peerDependencies": { 494 | "vue": "3.2.47" 495 | } 496 | }, 497 | "node_modules/@vue/shared": { 498 | "version": "3.2.47", 499 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", 500 | "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" 501 | }, 502 | "node_modules/csstype": { 503 | "version": "2.6.21", 504 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", 505 | "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" 506 | }, 507 | "node_modules/esbuild": { 508 | "version": "0.16.17", 509 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", 510 | "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", 511 | "dev": true, 512 | "hasInstallScript": true, 513 | "bin": { 514 | "esbuild": "bin/esbuild" 515 | }, 516 | "engines": { 517 | "node": ">=12" 518 | }, 519 | "optionalDependencies": { 520 | "@esbuild/android-arm": "0.16.17", 521 | "@esbuild/android-arm64": "0.16.17", 522 | "@esbuild/android-x64": "0.16.17", 523 | "@esbuild/darwin-arm64": "0.16.17", 524 | "@esbuild/darwin-x64": "0.16.17", 525 | "@esbuild/freebsd-arm64": "0.16.17", 526 | "@esbuild/freebsd-x64": "0.16.17", 527 | "@esbuild/linux-arm": "0.16.17", 528 | "@esbuild/linux-arm64": "0.16.17", 529 | "@esbuild/linux-ia32": "0.16.17", 530 | "@esbuild/linux-loong64": "0.16.17", 531 | "@esbuild/linux-mips64el": "0.16.17", 532 | "@esbuild/linux-ppc64": "0.16.17", 533 | "@esbuild/linux-riscv64": "0.16.17", 534 | "@esbuild/linux-s390x": "0.16.17", 535 | "@esbuild/linux-x64": "0.16.17", 536 | "@esbuild/netbsd-x64": "0.16.17", 537 | "@esbuild/openbsd-x64": "0.16.17", 538 | "@esbuild/sunos-x64": "0.16.17", 539 | "@esbuild/win32-arm64": "0.16.17", 540 | "@esbuild/win32-ia32": "0.16.17", 541 | "@esbuild/win32-x64": "0.16.17" 542 | } 543 | }, 544 | "node_modules/estree-walker": { 545 | "version": "2.0.2", 546 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 547 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 548 | }, 549 | "node_modules/fsevents": { 550 | "version": "2.3.2", 551 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 552 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 553 | "dev": true, 554 | "hasInstallScript": true, 555 | "optional": true, 556 | "os": [ 557 | "darwin" 558 | ], 559 | "engines": { 560 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 561 | } 562 | }, 563 | "node_modules/function-bind": { 564 | "version": "1.1.1", 565 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 566 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 567 | "dev": true 568 | }, 569 | "node_modules/has": { 570 | "version": "1.0.3", 571 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 572 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 573 | "dev": true, 574 | "dependencies": { 575 | "function-bind": "^1.1.1" 576 | }, 577 | "engines": { 578 | "node": ">= 0.4.0" 579 | } 580 | }, 581 | "node_modules/is-core-module": { 582 | "version": "2.11.0", 583 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 584 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 585 | "dev": true, 586 | "dependencies": { 587 | "has": "^1.0.3" 588 | }, 589 | "funding": { 590 | "url": "https://github.com/sponsors/ljharb" 591 | } 592 | }, 593 | "node_modules/magic-string": { 594 | "version": "0.25.9", 595 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 596 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 597 | "dependencies": { 598 | "sourcemap-codec": "^1.4.8" 599 | } 600 | }, 601 | "node_modules/nanoid": { 602 | "version": "3.3.4", 603 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 604 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 605 | "bin": { 606 | "nanoid": "bin/nanoid.cjs" 607 | }, 608 | "engines": { 609 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 610 | } 611 | }, 612 | "node_modules/path-parse": { 613 | "version": "1.0.7", 614 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 615 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 616 | "dev": true 617 | }, 618 | "node_modules/picocolors": { 619 | "version": "1.0.0", 620 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 621 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 622 | }, 623 | "node_modules/postcss": { 624 | "version": "8.4.21", 625 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 626 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 627 | "funding": [ 628 | { 629 | "type": "opencollective", 630 | "url": "https://opencollective.com/postcss/" 631 | }, 632 | { 633 | "type": "tidelift", 634 | "url": "https://tidelift.com/funding/github/npm/postcss" 635 | } 636 | ], 637 | "dependencies": { 638 | "nanoid": "^3.3.4", 639 | "picocolors": "^1.0.0", 640 | "source-map-js": "^1.0.2" 641 | }, 642 | "engines": { 643 | "node": "^10 || ^12 || >=14" 644 | } 645 | }, 646 | "node_modules/resolve": { 647 | "version": "1.22.1", 648 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 649 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 650 | "dev": true, 651 | "dependencies": { 652 | "is-core-module": "^2.9.0", 653 | "path-parse": "^1.0.7", 654 | "supports-preserve-symlinks-flag": "^1.0.0" 655 | }, 656 | "bin": { 657 | "resolve": "bin/resolve" 658 | }, 659 | "funding": { 660 | "url": "https://github.com/sponsors/ljharb" 661 | } 662 | }, 663 | "node_modules/rollup": { 664 | "version": "3.15.0", 665 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", 666 | "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", 667 | "dev": true, 668 | "bin": { 669 | "rollup": "dist/bin/rollup" 670 | }, 671 | "engines": { 672 | "node": ">=14.18.0", 673 | "npm": ">=8.0.0" 674 | }, 675 | "optionalDependencies": { 676 | "fsevents": "~2.3.2" 677 | } 678 | }, 679 | "node_modules/source-map": { 680 | "version": "0.6.1", 681 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 682 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 683 | "engines": { 684 | "node": ">=0.10.0" 685 | } 686 | }, 687 | "node_modules/source-map-js": { 688 | "version": "1.0.2", 689 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 690 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 691 | "engines": { 692 | "node": ">=0.10.0" 693 | } 694 | }, 695 | "node_modules/sourcemap-codec": { 696 | "version": "1.4.8", 697 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 698 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 699 | "deprecated": "Please use @jridgewell/sourcemap-codec instead" 700 | }, 701 | "node_modules/supports-preserve-symlinks-flag": { 702 | "version": "1.0.0", 703 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 704 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 705 | "dev": true, 706 | "engines": { 707 | "node": ">= 0.4" 708 | }, 709 | "funding": { 710 | "url": "https://github.com/sponsors/ljharb" 711 | } 712 | }, 713 | "node_modules/vite": { 714 | "version": "4.1.1", 715 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", 716 | "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", 717 | "dev": true, 718 | "dependencies": { 719 | "esbuild": "^0.16.14", 720 | "postcss": "^8.4.21", 721 | "resolve": "^1.22.1", 722 | "rollup": "^3.10.0" 723 | }, 724 | "bin": { 725 | "vite": "bin/vite.js" 726 | }, 727 | "engines": { 728 | "node": "^14.18.0 || >=16.0.0" 729 | }, 730 | "optionalDependencies": { 731 | "fsevents": "~2.3.2" 732 | }, 733 | "peerDependencies": { 734 | "@types/node": ">= 14", 735 | "less": "*", 736 | "sass": "*", 737 | "stylus": "*", 738 | "sugarss": "*", 739 | "terser": "^5.4.0" 740 | }, 741 | "peerDependenciesMeta": { 742 | "@types/node": { 743 | "optional": true 744 | }, 745 | "less": { 746 | "optional": true 747 | }, 748 | "sass": { 749 | "optional": true 750 | }, 751 | "stylus": { 752 | "optional": true 753 | }, 754 | "sugarss": { 755 | "optional": true 756 | }, 757 | "terser": { 758 | "optional": true 759 | } 760 | } 761 | }, 762 | "node_modules/vue": { 763 | "version": "3.2.47", 764 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", 765 | "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", 766 | "dependencies": { 767 | "@vue/compiler-dom": "3.2.47", 768 | "@vue/compiler-sfc": "3.2.47", 769 | "@vue/runtime-dom": "3.2.47", 770 | "@vue/server-renderer": "3.2.47", 771 | "@vue/shared": "3.2.47" 772 | } 773 | }, 774 | "node_modules/vue-router": { 775 | "version": "4.1.6", 776 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz", 777 | "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==", 778 | "dependencies": { 779 | "@vue/devtools-api": "^6.4.5" 780 | }, 781 | "funding": { 782 | "url": "https://github.com/sponsors/posva" 783 | }, 784 | "peerDependencies": { 785 | "vue": "^3.2.0" 786 | } 787 | } 788 | } 789 | } 790 | -------------------------------------------------------------------------------- /eggpain/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eggpain", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "vue": "^3.2.45", 13 | "vue-router": "^4.1.6" 14 | }, 15 | "devDependencies": { 16 | "@vitejs/plugin-vue": "^4.0.0", 17 | "vite": "^4.1.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /eggpain/src/App.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 35 | 36 | 41 | -------------------------------------------------------------------------------- /eggpain/src/assets/images/chicken-egg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/chicken-egg.jpeg -------------------------------------------------------------------------------- /eggpain/src/assets/images/duck-egg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/duck-egg.jpeg -------------------------------------------------------------------------------- /eggpain/src/assets/images/dumb-egg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/dumb-egg.jpeg -------------------------------------------------------------------------------- /eggpain/src/assets/images/goose-egg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/goose-egg.jpeg -------------------------------------------------------------------------------- /eggpain/src/assets/images/quail-egg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/quail-egg.jpeg -------------------------------------------------------------------------------- /eggpain/src/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "name": "鸡蛋", 5 | "type": "chicken-egg", 6 | "image": "chicken-egg.jpeg", 7 | "description": "又名鸡卵、鸡子,是母鸡所产的卵", 8 | "flavour": "味甘,性平,无毒(煮熟后)" 9 | }, 10 | { 11 | "id": 2, 12 | "name": "鸭蛋", 13 | "type": "duck-egg", 14 | "image": "duck-egg.jpeg", 15 | "description": "又名鸭子、鸭卵、太平、鸭春、青皮等,为鸭科动物家鸭的卵,受精卵可孵化成小鸭", 16 | "flavour": "性涼、味甘" 17 | }, 18 | { 19 | "id": 3, 20 | "name": "鹅蛋", 21 | "type": "goose-egg", 22 | "image": "goose-egg.jpeg", 23 | "description": "家禽鹅生下的卵", 24 | "flavour": "有些油" 25 | }, 26 | { 27 | "id": 4, 28 | "name": "鹌鹑蛋", 29 | "type": "quail-egg", 30 | "image": "quail-egg.jpeg", 31 | "description": "鵪鶉所產的卵,蛋殼表面帶有棕褐色斑點", 32 | "flavour": "味甘、性平" 33 | }, 34 | { 35 | "id": 5, 36 | "name": "笨蛋", 37 | "type": "dumb-egg", 38 | "image": "dumb-egg.jpeg", 39 | "description": "我才不是笨蛋", 40 | "flavour": "没吃过" 41 | } 42 | ] 43 | -------------------------------------------------------------------------------- /eggpain/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import './style.css' 3 | import App from './App.vue' 4 | import router from './router' 5 | 6 | createApp(App).use(router).mount('#app') 7 | -------------------------------------------------------------------------------- /eggpain/src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | import Home from '../views/Home.vue' 3 | 4 | const routes = [ 5 | { path: '/', component: Home }, 6 | { path: '/eggs/:eggType', name: 'eggs', component: () => import('../views/Eggs.vue') }, 7 | { path: '/eggs', redirect: '/eggs/chicken-egg' }, 8 | { path: '/:pathMatch(.*)*', component: () => import('../views/NotFound.vue') } 9 | ] 10 | 11 | const router = createRouter( 12 | { 13 | history: createWebHistory(), 14 | routes, 15 | linkActiveClass: 'egg-active' 16 | } 17 | ) 18 | 19 | export default router 20 | -------------------------------------------------------------------------------- /eggpain/src/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | 17 | a { 18 | font-weight: 500; 19 | color: #646cff; 20 | text-decoration: inherit; 21 | } 22 | a:hover { 23 | color: #535bf2; 24 | } 25 | 26 | a { 27 | font-weight: 500; 28 | color: #646cff; 29 | text-decoration: inherit; 30 | } 31 | a:hover { 32 | color: #535bf2; 33 | } 34 | 35 | body { 36 | margin: 0; 37 | display: flex; 38 | place-items: center; 39 | min-width: 320px; 40 | min-height: 100vh; 41 | } 42 | 43 | h1 { 44 | font-size: 3.2em; 45 | line-height: 1.1; 46 | } 47 | 48 | button { 49 | border-radius: 8px; 50 | border: 1px solid transparent; 51 | padding: 0.6em 1.2em; 52 | font-size: 1em; 53 | font-weight: 500; 54 | font-family: inherit; 55 | background-color: #1a1a1a; 56 | cursor: pointer; 57 | transition: border-color 0.25s; 58 | } 59 | button:hover { 60 | border-color: #646cff; 61 | } 62 | button:focus, 63 | button:focus-visible { 64 | outline: 4px auto -webkit-focus-ring-color; 65 | } 66 | 67 | .card { 68 | padding: 2em; 69 | } 70 | 71 | #app { 72 | max-width: 1280px; 73 | margin: 0 auto; 74 | padding: 2rem; 75 | text-align: center; 76 | } 77 | 78 | @media (prefers-color-scheme: light) { 79 | :root { 80 | color: #213547; 81 | background-color: #ffffff; 82 | } 83 | a:hover { 84 | color: #747bff; 85 | } 86 | button { 87 | background-color: #f9f9f9; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /eggpain/src/views/ChickenEgg.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /eggpain/src/views/Eggs.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 28 | 29 | 35 | -------------------------------------------------------------------------------- /eggpain/src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /eggpain/src/views/NotFound.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /eggpain/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [vue()], 7 | }) 8 | --------------------------------------------------------------------------------