├── .autod.conf.js ├── .eslintignore ├── .eslintrc ├── .gitignore ├── .travis.yml ├── README.md ├── README.zh-CN.md ├── app.js ├── app ├── config │ ├── webpack-base-config.js │ ├── webpack-client-config.js │ └── webpack-server-config.js ├── controller │ └── main.js ├── public │ ├── dist │ │ ├── 1.js │ │ ├── main.js │ │ ├── vue-ssr-client-manifest.json │ │ └── vue-ssr-server-bundle.json │ └── index.html ├── router.js └── src │ ├── App.vue │ ├── app.js │ ├── axios │ └── index.js │ ├── entry-client.js │ ├── entry-server.js │ ├── router │ └── index.js │ ├── style │ └── main.less │ └── views │ └── home.vue ├── appveyor.yml ├── config ├── config.default.js └── plugin.js ├── package.json └── test └── app └── controller └── home.test.js /.autod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | write: true, 5 | prefix: '^', 6 | plugin: 'autod-egg', 7 | test: [ 8 | 'test', 9 | 'benchmark', 10 | ], 11 | dep: [ 12 | 'egg', 13 | 'egg-scripts', 14 | ], 15 | devdep: [ 16 | 'egg-ci', 17 | 'egg-bin', 18 | 'egg-mock', 19 | 'autod', 20 | 'autod-egg', 21 | 'eslint', 22 | 'eslint-config-egg', 23 | 'webstorm-disable-index', 24 | ], 25 | exclude: [ 26 | './test/fixtures', 27 | './dist', 28 | ], 29 | }; 30 | 31 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | coverage 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint-config-egg" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | logs/ 2 | npm-debug.log 3 | yarn-error.log 4 | node_modules/ 5 | package-lock.json 6 | yarn.lock 7 | coverage/ 8 | .idea/ 9 | run/ 10 | .DS_Store 11 | *.sw* 12 | *.un~ 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - '8' 5 | install: 6 | - npm i npminstall && npminstall 7 | script: 8 | - npm run ci 9 | after_script: 10 | - npminstall codecov && codecov 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ssr 2 | 3 | 4 | 5 | ## QuickStart 6 | 7 | 8 | 9 | see [egg docs][egg] for more detail. 10 | 11 | ### Development 12 | 13 | ```bash 14 | $ npm i 15 | $ npm run dev 16 | $ open http://localhost:7001/ 17 | ``` 18 | 19 | ### Deploy 20 | 21 | ```bash 22 | $ npm start 23 | $ npm stop 24 | ``` 25 | 26 | ### npm scripts 27 | 28 | - Use `npm run lint` to check code style. 29 | - Use `npm test` to run unit test. 30 | - Use `npm run autod` to auto detect dependencies upgrade, see [autod](https://www.npmjs.com/package/autod) for more detail. 31 | 32 | 33 | [egg]: https://eggjs.org -------------------------------------------------------------------------------- /README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # ssr 2 | 3 | 4 | 5 | ## 快速入门 6 | 7 | 8 | 9 | 如需进一步了解,参见 [egg 文档][egg]。 10 | 11 | ### 本地开发 12 | 13 | ```bash 14 | $ npm i 15 | $ npm run dev 16 | $ open http://localhost:7001/ 17 | ``` 18 | 19 | ### 部署 20 | 21 | ```bash 22 | $ npm start 23 | $ npm stop 24 | ``` 25 | 26 | ### 单元测试 27 | 28 | - [egg-bin] 内置了 [mocha], [thunk-mocha], [power-assert], [istanbul] 等框架,让你可以专注于写单元测试,无需理会配套工具。 29 | - 断言库非常推荐使用 [power-assert]。 30 | - 具体参见 [egg 文档 - 单元测试](https://eggjs.org/zh-cn/core/unittest)。 31 | 32 | ### 内置指令 33 | 34 | - 使用 `npm run lint` 来做代码风格检查。 35 | - 使用 `npm test` 来执行单元测试。 36 | - 使用 `npm run autod` 来自动检测依赖更新,详细参见 [autod](https://www.npmjs.com/package/autod) 。 37 | 38 | 39 | [egg]: https://eggjs.org 40 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const { createBundleRenderer } = require('vue-server-renderer'); 2 | const serverBundle = require('./app/public/dist/vue-ssr-server-bundle.json'); 3 | const clientManifest = require('./app/public/dist/vue-ssr-client-manifest.json'); 4 | const path = require('path'); 5 | const file = require('fs'); 6 | 7 | class AppBootHook { 8 | constructor(app) { 9 | this.app = app; 10 | } 11 | 12 | // 配置文件加载完毕事件 13 | async willReady() { 14 | let renderer = createBundleRenderer(serverBundle, { 15 | runInNewContext: false, 16 | template: file.readFileSync(path.join(__dirname, './app/public/index.html'), 'utf-8'), 17 | clientManifest 18 | }); 19 | 20 | this.app.renderer = renderer; 21 | } 22 | } 23 | 24 | module.exports = AppBootHook; -------------------------------------------------------------------------------- /app/config/webpack-base-config.js: -------------------------------------------------------------------------------- 1 | const { VueLoaderPlugin } = require('vue-loader'); 2 | const path = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | publicPath: '/public/dist/', 7 | path: path.join(__dirname, '../public/dist'), 8 | }, 9 | resolve: { 10 | extensions: ['.js', '.vue', '.json'], 11 | alias: { 12 | 'vue$': 'vue/dist/vue.esm.js', 13 | } 14 | }, 15 | module: { 16 | rules: [{ 17 | test: /\.vue$/, 18 | loader: 'vue-loader' 19 | }, { 20 | test: /\.css$/, 21 | use: ["vue-style-loader", "css-loader", 'less-loader'] 22 | }, { 23 | test: /\.less$/, 24 | use: ["vue-style-loader", "css-loader", 'less-loader'] 25 | }, { 26 | test: /\.(gif|png|jpg|woff|svg|ttf|eot)\??.*$/, 27 | loader: { 28 | loader: 'url-loader', 29 | options: { 30 | limit: 8192, 31 | name: './resource/[name].[ext]', 32 | }, 33 | } 34 | }, { 35 | test: /\.js$/, 36 | loader: 'babel-loader', 37 | exclude: /node_modules/ 38 | }], 39 | }, 40 | plugins: [ 41 | new VueLoaderPlugin(), 42 | ] 43 | } -------------------------------------------------------------------------------- /app/config/webpack-client-config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const merge = require('webpack-merge'); 3 | const baseConfig = require('./webpack-base-config.js'); 4 | const VueSSRClientPlugin = require('vue-server-renderer/client-plugin'); 5 | const path = require('path'); 6 | 7 | module.exports = merge(baseConfig, { 8 | entry: [ 'babel-polyfill', path.join(__dirname, '../src/entry-client.js') ], 9 | plugins: [ 10 | new webpack.optimize.SplitChunksPlugin({ 11 | name: 'manifest', 12 | minChunks: Infinity 13 | }), 14 | new VueSSRClientPlugin() 15 | ] 16 | }) -------------------------------------------------------------------------------- /app/config/webpack-server-config.js: -------------------------------------------------------------------------------- 1 | const merge = require('webpack-merge'); 2 | const nodeExternals = require('webpack-node-externals'); 3 | const baseConfig = require('./webpack-base-config'); 4 | const VueSSRServerPlugin = require('vue-server-renderer/server-plugin'); 5 | const path = require('path'); 6 | 7 | module.exports = merge(baseConfig, { 8 | entry: [ 'babel-polyfill', path.join(__dirname, '../src/entry-server.js') ], 9 | target: 'node', 10 | devtool: 'source-map', 11 | output: { 12 | libraryTarget: 'commonjs2' 13 | }, 14 | externals: nodeExternals({ 15 | whitelist: /\.css$/ 16 | }), 17 | plugins: [ 18 | new VueSSRServerPlugin() 19 | ] 20 | }) -------------------------------------------------------------------------------- /app/controller/main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const Controller = require('egg').Controller; 4 | 5 | class HomeController extends Controller { 6 | async index() { 7 | let renderer = this.app.renderer; 8 | 9 | let context = { 10 | url: this.ctx.request.url 11 | }; 12 | 13 | renderer.renderToString(context, (err, html) => { 14 | if (err) { 15 | if (err.code === 404) { 16 | this.ctx.body = "404"; 17 | } else { 18 | this.ctx.body = process.env.NODE_ENV; 19 | } 20 | } else { 21 | this.ctx.body = html; 22 | } 23 | }); 24 | } 25 | } 26 | 27 | module.exports = HomeController; -------------------------------------------------------------------------------- /app/public/dist/1.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[1],{344:function(t,e,n){var s=n(346);"string"==typeof s&&(s=[[t.i,s,""]]),s.locals&&(t.exports=s.locals);(0,n(134).default)("756a54c6",s,!1,{})},345:function(t,e,n){"use strict";var s=n(344);n.n(s).a},346:function(t,e,n){(t.exports=n(133)(!1)).push([t.i,".home-page {\n font-size: 20px;\n}\n",""])},347:function(t,e,n){"use strict";n.r(e);var s=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"home-page"},[e("div",[this._v(this._s(this.name)+"的首页")])])};s._withStripped=!0;var i={data:()=>({name:"呱呱奇遇记"})},a=(n(345),n(132)),o=Object(a.a)(i,s,[],!1,null,null,null);o.options.__file="app/src/views/home.vue";e.default=o.exports}}]); -------------------------------------------------------------------------------- /app/public/dist/vue-ssr-client-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "publicPath": "/public/dist/", 3 | "all": [ 4 | "1.js", 5 | "main.js" 6 | ], 7 | "initial": [ 8 | "main.js" 9 | ], 10 | "async": [ 11 | "1.js" 12 | ], 13 | "modules": { 14 | "22919110": [ 15 | 1 16 | ], 17 | "31300552": [ 18 | 1 19 | ], 20 | "32601753": [ 21 | 1 22 | ], 23 | "56772829": [ 24 | 1 25 | ], 26 | "57340269": [ 27 | 1 28 | ], 29 | "67110999": [ 30 | 1 31 | ], 32 | "71916589": [ 33 | 0 34 | ], 35 | "73481362": [ 36 | 1 37 | ], 38 | "88654722": [ 39 | 1 40 | ], 41 | "9341f67a": [ 42 | 1 43 | ], 44 | "aa362c90": [ 45 | 1 46 | ], 47 | "975d4b18": [ 48 | 1 49 | ], 50 | "359c4dc2": [ 51 | 1 52 | ], 53 | "5e2cdb16": [ 54 | 1 55 | ], 56 | "2006fa78": [ 57 | 1 58 | ], 59 | "24bbd57f": [ 60 | 1 61 | ], 62 | "e4a60cda": [ 63 | 1 64 | ], 65 | "bfd8da46": [ 66 | 1 67 | ], 68 | "5c0e3af4": [ 69 | 1 70 | ], 71 | "4441ea9a": [ 72 | 1 73 | ], 74 | "79942f16": [ 75 | 1 76 | ], 77 | "7ccc2889": [ 78 | 1 79 | ], 80 | "c64bb4a0": [ 81 | 1 82 | ], 83 | "05e15e1d": [ 84 | 1 85 | ], 86 | "06f33da1": [ 87 | 1 88 | ], 89 | "ebd2efe6": [ 90 | 1 91 | ], 92 | "6799fcdf": [ 93 | 1 94 | ], 95 | "748dc610": [ 96 | 1 97 | ], 98 | "0331b120": [ 99 | 1 100 | ], 101 | "03cef986": [ 102 | 1 103 | ], 104 | "88ec74ea": [ 105 | 1 106 | ], 107 | "480f8072": [ 108 | 1 109 | ], 110 | "eb1fde7c": [ 111 | 1 112 | ], 113 | "6738af64": [ 114 | 1 115 | ], 116 | "7b413823": [ 117 | 1 118 | ], 119 | "8e5a340e": [ 120 | 1 121 | ], 122 | "6ec017fe": [ 123 | 1 124 | ], 125 | "7c133130": [ 126 | 1 127 | ], 128 | "3233e748": [ 129 | 1 130 | ], 131 | "747d565c": [ 132 | 1 133 | ], 134 | "564867ae": [ 135 | 1 136 | ], 137 | "5c4036ce": [ 138 | 1 139 | ], 140 | "1c7a48a7": [ 141 | 1 142 | ], 143 | "4d24a3f5": [ 144 | 1 145 | ], 146 | "6d78a4ae": [ 147 | 1 148 | ], 149 | "040ac126": [ 150 | 1 151 | ], 152 | "ebc9d87a": [ 153 | 1 154 | ], 155 | "665d1286": [ 156 | 1 157 | ], 158 | "56de18a2": [ 159 | 1 160 | ], 161 | "c6964c88": [ 162 | 1 163 | ], 164 | "2d9010b5": [ 165 | 1 166 | ], 167 | "0fbf01bc": [ 168 | 1 169 | ], 170 | "47ea86dc": [ 171 | 1 172 | ], 173 | "0eb08170": [ 174 | 1 175 | ], 176 | "140351d9": [ 177 | 1 178 | ], 179 | "4dacd712": [ 180 | 1 181 | ], 182 | "1ee35f52": [ 183 | 1 184 | ], 185 | "3eece272": [ 186 | 1 187 | ], 188 | "3b1f95e2": [ 189 | 1 190 | ], 191 | "768e6a39": [ 192 | 1 193 | ], 194 | "6d939f10": [ 195 | 1 196 | ], 197 | "6e9de96e": [ 198 | 1 199 | ], 200 | "af781a50": [ 201 | 1 202 | ], 203 | "ebc54cc4": [ 204 | 1 205 | ], 206 | "a7f4657e": [ 207 | 1 208 | ], 209 | "1dc115b0": [ 210 | 1 211 | ], 212 | "27cdd06b": [ 213 | 1 214 | ], 215 | "0ea67e02": [ 216 | 1 217 | ], 218 | "1ff1e29d": [ 219 | 1 220 | ], 221 | "b7b5d4cc": [ 222 | 1 223 | ], 224 | "058918d8": [ 225 | 1 226 | ], 227 | "35ea7366": [ 228 | 1 229 | ], 230 | "20df0441": [ 231 | 1 232 | ], 233 | "d90fa848": [ 234 | 1 235 | ], 236 | "5bd9d3ae": [ 237 | 1 238 | ], 239 | "e393a566": [ 240 | 1 241 | ], 242 | "97b8d47e": [ 243 | 1 244 | ], 245 | "d9a660a0": [ 246 | 1 247 | ], 248 | "3589812e": [ 249 | 1 250 | ], 251 | "2c3368a0": [ 252 | 1 253 | ], 254 | "7f9d3144": [ 255 | 1 256 | ], 257 | "53058d28": [ 258 | 1 259 | ], 260 | "30dbddcc": [ 261 | 1 262 | ], 263 | "1b55f442": [ 264 | 1 265 | ], 266 | "28356d5a": [ 267 | 1 268 | ], 269 | "18f538c0": [ 270 | 1 271 | ], 272 | "e8c48356": [ 273 | 1 274 | ], 275 | "6295123b": [ 276 | 1 277 | ], 278 | "1b7d16e7": [ 279 | 1 280 | ], 281 | "e92107f4": [ 282 | 1 283 | ], 284 | "5e1337b8": [ 285 | 1 286 | ], 287 | "7a7dd223": [ 288 | 1 289 | ], 290 | "8ba2d3f0": [ 291 | 1 292 | ], 293 | "352ac49e": [ 294 | 1 295 | ], 296 | "3450b984": [ 297 | 1 298 | ], 299 | "07a848b6": [ 300 | 1 301 | ], 302 | "666b0920": [ 303 | 1 304 | ], 305 | "1a3dbca2": [ 306 | 1 307 | ], 308 | "420c4402": [ 309 | 1 310 | ], 311 | "49db8454": [ 312 | 1 313 | ], 314 | "96f827e4": [ 315 | 1 316 | ], 317 | "9c0e3180": [ 318 | 1 319 | ], 320 | "b7efb1d8": [ 321 | 1 322 | ], 323 | "3dfd9dc0": [ 324 | 1 325 | ], 326 | "39a272a4": [ 327 | 1 328 | ], 329 | "3d78b8e2": [ 330 | 1 331 | ], 332 | "627d447e": [ 333 | 1 334 | ], 335 | "43ba2322": [ 336 | 1 337 | ], 338 | "2eddd69a": [ 339 | 1 340 | ], 341 | "2983a76d": [ 342 | 1 343 | ], 344 | "f34608cc": [ 345 | 1 346 | ], 347 | "35a0ed7f": [ 348 | 1 349 | ], 350 | "5bc38d02": [ 351 | 1 352 | ], 353 | "5c233e16": [ 354 | 1 355 | ], 356 | "941e8b04": [ 357 | 1 358 | ], 359 | "caa1d908": [ 360 | 1 361 | ], 362 | "4b18ba99": [ 363 | 1 364 | ], 365 | "1d8336ec": [ 366 | 1 367 | ], 368 | "cf2b93b8": [ 369 | 1 370 | ], 371 | "368f275d": [ 372 | 1 373 | ], 374 | "55f49048": [ 375 | 1 376 | ], 377 | "06d92af6": [ 378 | 1 379 | ], 380 | "8e4f5a74": [ 381 | 1 382 | ], 383 | "48cbe310": [ 384 | 1 385 | ], 386 | "fbbf0014": [ 387 | 1 388 | ], 389 | "683e597d": [ 390 | 1 391 | ], 392 | "1c11d300": [ 393 | 1 394 | ], 395 | "9fb77ede": [ 396 | 1 397 | ], 398 | "2689163a": [ 399 | 1 400 | ], 401 | "2f75536a": [ 402 | 1 403 | ], 404 | "1c935f60": [ 405 | 1 406 | ], 407 | "d70f7c12": [ 408 | 1 409 | ], 410 | "0200a188": [ 411 | 1 412 | ], 413 | "0717acc2": [ 414 | 1 415 | ], 416 | "4b73ccc0": [ 417 | 1 418 | ], 419 | "9f3a60fc": [ 420 | 1 421 | ], 422 | "643c044c": [ 423 | 1 424 | ], 425 | "4e812896": [ 426 | 1 427 | ], 428 | "bf18f6dc": [ 429 | 1 430 | ], 431 | "c387b1a8": [ 432 | 1 433 | ], 434 | "3f23d82c": [ 435 | 1 436 | ], 437 | "4aac6b66": [ 438 | 1 439 | ], 440 | "619c3b0d": [ 441 | 1 442 | ], 443 | "d75ba9e6": [ 444 | 1 445 | ], 446 | "6b24e6f2": [ 447 | 1 448 | ], 449 | "6f3d6b5a": [ 450 | 1 451 | ], 452 | "5f000249": [ 453 | 1 454 | ], 455 | "0a47f3b7": [ 456 | 1 457 | ], 458 | "1c03e59e": [ 459 | 1 460 | ], 461 | "41773c0c": [ 462 | 1 463 | ], 464 | "07706fdc": [ 465 | 1 466 | ], 467 | "6d18fd90": [ 468 | 1 469 | ], 470 | "5071fe14": [ 471 | 1 472 | ], 473 | "781e9a8e": [ 474 | 1 475 | ], 476 | "6a7d4e9f": [ 477 | 1 478 | ], 479 | "94196c94": [ 480 | 1 481 | ], 482 | "69cd2a10": [ 483 | 1 484 | ], 485 | "29d596e4": [ 486 | 1 487 | ], 488 | "338d4604": [ 489 | 1 490 | ], 491 | "2ac416c2": [ 492 | 1 493 | ], 494 | "817d317a": [ 495 | 1 496 | ], 497 | "22e1445e": [ 498 | 1 499 | ], 500 | "45a45543": [ 501 | 1 502 | ], 503 | "1722d9c0": [ 504 | 1 505 | ], 506 | "7e9ec404": [ 507 | 1 508 | ], 509 | "9a15a3ae": [ 510 | 1 511 | ], 512 | "200b8d1b": [ 513 | 1 514 | ], 515 | "06ee4d1e": [ 516 | 1 517 | ], 518 | "0150b7b2": [ 519 | 1 520 | ], 521 | "3e4d7a4c": [ 522 | 1 523 | ], 524 | "1bb4567d": [ 525 | 1 526 | ], 527 | "c643f356": [ 528 | 1 529 | ], 530 | "445ea7ea": [ 531 | 1 532 | ], 533 | "0dd0f5e6": [ 534 | 1 535 | ], 536 | "16bbc676": [ 537 | 1 538 | ], 539 | "311dbc88": [ 540 | 1 541 | ], 542 | "40b52b82": [ 543 | 1 544 | ], 545 | "88a11b54": [ 546 | 1 547 | ], 548 | "207df5fe": [ 549 | 1 550 | ], 551 | "1d6e1ab5": [ 552 | 1 553 | ], 554 | "0366b6c2": [ 555 | 1 556 | ], 557 | "63cd1894": [ 558 | 1 559 | ], 560 | "11f99e87": [ 561 | 1 562 | ], 563 | "393914d0": [ 564 | 1 565 | ], 566 | "3d5b1eb5": [ 567 | 1 568 | ], 569 | "edca7570": [ 570 | 1 571 | ], 572 | "5392c1d5": [ 573 | 1 574 | ], 575 | "746f6292": [ 576 | 1 577 | ], 578 | "171a90e4": [ 579 | 1 580 | ], 581 | "328cb474": [ 582 | 1 583 | ], 584 | "e4a716ca": [ 585 | 1 586 | ], 587 | "a3a24156": [ 588 | 1 589 | ], 590 | "a36811d6": [ 591 | 1 592 | ], 593 | "2ee93108": [ 594 | 1 595 | ], 596 | "d1d9fb4e": [ 597 | 1 598 | ], 599 | "d11a26b4": [ 600 | 1 601 | ], 602 | "829b3a22": [ 603 | 1 604 | ], 605 | "b17ccd28": [ 606 | 1 607 | ], 608 | "05c5f348": [ 609 | 1 610 | ], 611 | "52bb29c7": [ 612 | 1 613 | ], 614 | "ea613ec6": [ 615 | 1 616 | ], 617 | "9e7cd65e": [ 618 | 1 619 | ], 620 | "05d8c17f": [ 621 | 1 622 | ], 623 | "33912ed8": [ 624 | 1 625 | ], 626 | "655ba354": [ 627 | 1 628 | ], 629 | "0cf8a684": [ 630 | 1 631 | ], 632 | "35ff56ed": [ 633 | 1 634 | ], 635 | "3189c32a": [ 636 | 1 637 | ], 638 | "37d715ef": [ 639 | 1 640 | ], 641 | "440b1813": [ 642 | 1 643 | ], 644 | "64b2494c": [ 645 | 1 646 | ], 647 | "5df3c8fb": [ 648 | 1 649 | ], 650 | "2dca500a": [ 651 | 1 652 | ], 653 | "4e6305a2": [ 654 | 1 655 | ], 656 | "14795fcc": [ 657 | 1 658 | ], 659 | "56f11476": [ 660 | 1 661 | ], 662 | "5122ce88": [ 663 | 1 664 | ], 665 | "2894a90d": [ 666 | 1 667 | ], 668 | "55804caf": [ 669 | 1 670 | ], 671 | "5586a9e1": [ 672 | 1 673 | ], 674 | "5951ee48": [ 675 | 1 676 | ], 677 | "16c67290": [ 678 | 1 679 | ], 680 | "88f7e632": [ 681 | 1 682 | ], 683 | "60270c6b": [ 684 | 1 685 | ], 686 | "787d10af": [ 687 | 1 688 | ], 689 | "2d9922b2": [ 690 | 1 691 | ], 692 | "b79f22ba": [ 693 | 1 694 | ], 695 | "28c99127": [ 696 | 1 697 | ], 698 | "a67d481a": [ 699 | 1 700 | ], 701 | "d09d47b4": [ 702 | 1 703 | ], 704 | "7ae7a673": [ 705 | 1 706 | ], 707 | "2c7bb402": [ 708 | 1 709 | ], 710 | "5781497f": [ 711 | 1 712 | ], 713 | "ade8db90": [ 714 | 1 715 | ], 716 | "5ae72075": [ 717 | 1 718 | ], 719 | "4b388be5": [ 720 | 1 721 | ], 722 | "467917d6": [ 723 | 1 724 | ], 725 | "0d6c1992": [ 726 | 1 727 | ], 728 | "55b73ec8": [ 729 | 1 730 | ], 731 | "b412e22a": [ 732 | 1 733 | ], 734 | "1bbe8428": [ 735 | 1 736 | ], 737 | "13411cae": [ 738 | 1 739 | ], 740 | "c589f90c": [ 741 | 1 742 | ], 743 | "c558e0f8": [ 744 | 1 745 | ], 746 | "bead7a42": [ 747 | 1 748 | ], 749 | "3d3b3b95": [ 750 | 1 751 | ], 752 | "edac3e86": [ 753 | 1 754 | ], 755 | "5cf06074": [ 756 | 1 757 | ], 758 | "0b8371dc": [ 759 | 1 760 | ], 761 | "a45a587a": [ 762 | 1 763 | ], 764 | "da018b62": [ 765 | 1 766 | ], 767 | "75b6099d": [ 768 | 1 769 | ], 770 | "cccd8f3e": [ 771 | 1 772 | ], 773 | "1a86ccf6": [ 774 | 1 775 | ], 776 | "0a4ee73a": [ 777 | 1 778 | ], 779 | "493f1510": [ 780 | 1 781 | ], 782 | "2d8d8c4e": [ 783 | 1 784 | ], 785 | "7a5312f6": [ 786 | 1 787 | ], 788 | "849e0e6e": [ 789 | 1 790 | ], 791 | "4b8e1500": [ 792 | 1 793 | ], 794 | "6c5a4003": [ 795 | 1 796 | ], 797 | "32dc9686": [ 798 | 1 799 | ], 800 | "76043dee": [ 801 | 1 802 | ], 803 | "454e8fb9": [ 804 | 1 805 | ], 806 | "26e0eb8c": [ 807 | 1 808 | ], 809 | "61a2e97f": [ 810 | 1 811 | ], 812 | "52a9f976": [ 813 | 1 814 | ], 815 | "5ee52126": [ 816 | 1 817 | ], 818 | "e7d535d4": [ 819 | 1 820 | ], 821 | "6bb3806e": [ 822 | 1 823 | ], 824 | "079b6a17": [ 825 | 1 826 | ], 827 | "cd1a4338": [ 828 | 1 829 | ], 830 | "762db730": [ 831 | 1 832 | ], 833 | "09177053": [ 834 | 1 835 | ], 836 | "07bffd22": [ 837 | 1 838 | ], 839 | "be2ae274": [ 840 | 1 841 | ], 842 | "5d1c7838": [ 843 | 1 844 | ], 845 | "1c15918b": [ 846 | 1 847 | ], 848 | "68e5b974": [ 849 | 1 850 | ], 851 | "752591f3": [ 852 | 1 853 | ], 854 | "12c65896": [ 855 | 1 856 | ], 857 | "3f88e7ec": [ 858 | 1 859 | ], 860 | "78462e8b": [ 861 | 1 862 | ], 863 | "2f7dc270": [ 864 | 1 865 | ], 866 | "8fae9b44": [ 867 | 1 868 | ], 869 | "de0f7b66": [ 870 | 1 871 | ], 872 | "39531e37": [ 873 | 1 874 | ], 875 | "78c8dde6": [ 876 | 1 877 | ], 878 | "1e10b1c2": [ 879 | 1 880 | ], 881 | "878ddb3c": [ 882 | 1 883 | ], 884 | "654fb96a": [ 885 | 1 886 | ], 887 | "39c3de32": [ 888 | 1 889 | ], 890 | "27ae6e05": [ 891 | 1 892 | ], 893 | "1ae3a211": [ 894 | 1 895 | ], 896 | "2050db04": [ 897 | 1 898 | ], 899 | "13860f10": [ 900 | 1 901 | ], 902 | "1b39f15a": [ 903 | 1 904 | ], 905 | "1668708d": [ 906 | 1 907 | ], 908 | "135f466a": [ 909 | 1 910 | ], 911 | "001780f0": [ 912 | 1 913 | ], 914 | "7ea8265d": [ 915 | 1 916 | ], 917 | "6b6060e3": [ 918 | 1 919 | ], 920 | "16c47592": [ 921 | 1 922 | ], 923 | "d79d1386": [ 924 | 1 925 | ], 926 | "9da3172c": [ 927 | 1 928 | ], 929 | "50c22570": [ 930 | 1 931 | ], 932 | "3384d030": [ 933 | 1 934 | ], 935 | "2a9f1a39": [ 936 | 1 937 | ], 938 | "a423dbf0": [ 939 | 1 940 | ], 941 | "88caeb84": [ 942 | 1 943 | ], 944 | "702c6c0a": [ 945 | 1 946 | ], 947 | "e4d3205c": [ 948 | 1 949 | ], 950 | "be43579e": [ 951 | 1 952 | ], 953 | "2ccdc1ee": [ 954 | 1 955 | ], 956 | "82a105b0": [ 957 | 1 958 | ], 959 | "fc51f6a8": [ 960 | 1 961 | ], 962 | "393fa8fb": [ 963 | 1 964 | ], 965 | "7e78b8a7": [ 966 | 1 967 | ], 968 | "5d822b4f": [ 969 | 1 970 | ], 971 | "60651f20": [ 972 | 1 973 | ], 974 | "61dc71ea": [ 975 | 1 976 | ], 977 | "b303562a": [ 978 | 1 979 | ], 980 | "58a2ce4a": [ 981 | 1 982 | ], 983 | "72b68efc": [ 984 | 1 985 | ], 986 | "ed927e5e": [ 987 | 1 988 | ], 989 | "c9346596": [ 990 | 1 991 | ], 992 | "b8bb0390": [ 993 | 1 994 | ], 995 | "5697cc40": [ 996 | 1 997 | ], 998 | "061ec879": [ 999 | 1 1000 | ], 1001 | "707a3c73": [ 1002 | 1 1003 | ], 1004 | "c4b9a39c": [ 1005 | 1 1006 | ], 1007 | "02323c90": [ 1008 | 1 1009 | ], 1010 | "7b892e70": [ 1011 | 1 1012 | ], 1013 | "cfb95382": [ 1014 | 1 1015 | ], 1016 | "41a1e160": [ 1017 | 1 1018 | ], 1019 | "deb7372c": [ 1020 | 1 1021 | ], 1022 | "6e185ec0": [ 1023 | 1 1024 | ], 1025 | "3b8f187e": [ 1026 | 1 1027 | ], 1028 | "33f46ff9": [ 1029 | 1 1030 | ], 1031 | "0b1d4c1a": [ 1032 | 1 1033 | ], 1034 | "03b1de99": [ 1035 | 1 1036 | ], 1037 | "46e561c3": [ 1038 | 1 1039 | ], 1040 | "6e3c7ff2": [ 1041 | 1 1042 | ], 1043 | "4fc571cc": [ 1044 | 1 1045 | ], 1046 | "38b36758": [ 1047 | 1 1048 | ], 1049 | "09534aef": [ 1050 | 0 1051 | ], 1052 | "3f0f2823": [ 1053 | 0 1054 | ], 1055 | "bdbb8908": [ 1056 | 0 1057 | ] 1058 | } 1059 | } -------------------------------------------------------------------------------- /app/public/dist/vue-ssr-server-bundle.json: -------------------------------------------------------------------------------- 1 | { 2 | "entry": "main.js", 3 | "files": { 4 | "1.js": "exports.ids=[1],exports.modules=[,,,,,,,,,,,function(t,e,s){var i=s(13);\"string\"==typeof i&&(i=[[t.i,i,\"\"]]),i.locals&&(t.exports=i.locals);var n=s(5).default;t.exports.__inject__=function(t){n(\"756a54c6\",i,!1,t)}},function(t,e,s){\"use strict\";s.r(e);var i=s(11),n=s.n(i);for(var r in i)\"default\"!==r&&function(t){s.d(e,t,function(){return i[t]})}(r);e.default=n.a},function(t,e,s){(t.exports=s(4)(!1)).push([t.i,\".home-page {\\n font-size: 20px;\\n}\\n\",\"\"])},function(t,e,s){\"use strict\";s.r(e);var i=function(){var t=this.$createElement;return(this._self._c||t)(\"div\",{staticClass:\"home-page\"},[this._ssrNode(\"
\"+this._ssrEscape(this._s(this.name)+\"的首页\")+\"
\")])};i._withStripped=!0;var n={data:()=>({name:\"呱呱奇遇记\"})},r=s(3);var a=Object(r.a)(n,i,[],!1,function(t){var e=s(12);e.__inject__&&e.__inject__(t)},null,\"bdbb8908\");a.options.__file=\"app/src/views/home.vue\";e.default=a.exports}];\n//# sourceMappingURL=1.js.map", 5 | "main.js": "module.exports=function(e){var t={},n={0:0};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.e=function(t){if(0!==n[t]){var r=require(\"./\"+({}[t]||t)+\".js\"),o=r.modules,i=r.ids;for(var a in o)e[a]=o[a];for(var s=0;s\"+r.css+\"\"}return t}n.r(t),n.d(t,\"default\",function(){return r})},function(e,t,n){n(7),e.exports=n(10)},function(e,t){e.exports=require(\"babel-polyfill\")},function(e,t,n){\"use strict\";n.r(t);var r=n(0),o=n.n(r);for(var i in r)\"default\"!==i&&function(e){n.d(t,e,function(){return r[e]})}(i);t.default=o.a},function(e,t,n){(e.exports=n(4)(!1)).push([e.i,\"#app[data-v-bd26cd6c] {\\n height: 100%;\\n}\\nhtml[data-v-bd26cd6c] {\\n height: 100%;\\n}\\nbody[data-v-bd26cd6c] {\\n margin: 0;\\n height: 100%;\\n}\\nh1[data-v-bd26cd6c],\\nh2[data-v-bd26cd6c],\\nh3[data-v-bd26cd6c],\\nh4[data-v-bd26cd6c],\\nh5[data-v-bd26cd6c] {\\n margin: 0;\\n}\\n\",\"\"])},function(e,t,n){\"use strict\";n.r(t);var r=n(1),o=n.n(r),i=function(){var e=this.$createElement,t=this._self._c||e;return t(\"div\",{attrs:{id:\"app\"}},[t(\"router-view\")],1)};i._withStripped=!0;var a={data:()=>({}),created(){},beforeCreate(){console.log(new Date)}},s=n(3);var u=Object(s.a)(a,i,[],!1,function(e){var t=n(8);t.__inject__&&t.__inject__(e)},\"bd26cd6c\",\"04bf2f95\");u.options.__file=\"app/src/App.vue\";var c=u.exports,d=n(2),f=n.n(d);o.a.use(f.a);let l=new f.a({mode:\"history\",routes:[{path:\"/home\",component:e=>{n.e(1).then(function(){var t=[n(14)];e.apply(null,t)}.bind(this)).catch(n.oe)}}]});function p(){const e=l;return{app:new o.a({render:e=>e(c),router:e}),router:e}}console.log(p);t.default=(e=>new Promise((t,n)=>{const{app:r,router:o}=p();o.push(e.url),o.onReady(()=>{if(!o.getMatchedComponents().length)return n({code:404});t(r)},n)}))}]);\n//# sourceMappingURL=main.js.map" 6 | }, 7 | "maps": { 8 | "1.js": { 9 | "version": 3, 10 | "sources": [ 11 | "webpack:///./app/src/views/home.vue?a369", 12 | "webpack:///./app/src/views/home.vue?e091", 13 | "webpack:///./app/src/views/home.vue?2f18", 14 | "webpack:///./app/src/views/home.vue?d612", 15 | "webpack:///app/src/views/home.vue", 16 | "webpack:///./app/src/views/home.vue?f5be", 17 | "webpack:///./app/src/views/home.vue" 18 | ], 19 | "names": [ 20 | "content", 21 | "__webpack_require__", 22 | "module", 23 | "i", 24 | "locals", 25 | "exports", 26 | "add", 27 | "default", 28 | "__inject__", 29 | "context", 30 | "r", 31 | "__webpack_exports__", 32 | "_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_less_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_style_index_0_lang_less___WEBPACK_IMPORTED_MODULE_0__", 33 | "_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_less_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_home_vue_vue_type_style_index_0_lang_less___WEBPACK_IMPORTED_MODULE_0___default", 34 | "n", 35 | "__WEBPACK_IMPORT_KEY__", 36 | "key", 37 | "d", 38 | "push", 39 | "render", 40 | "_h", 41 | "this", 42 | "$createElement", 43 | "_self", 44 | "_c", 45 | "staticClass", 46 | "_ssrNode", 47 | "_ssrEscape", 48 | "_s", 49 | "name", 50 | "_withStripped", 51 | "views_homevue_type_script_lang_js_", 52 | "data", 53 | "component", 54 | "Object", 55 | "componentNormalizer", 56 | "style0", 57 | "options", 58 | "__file" 59 | ], 60 | "mappings": "4DAGA,IAAAA,EAAcC,EAAQ,IACtB,iBAAAD,MAAA,EAA4CE,EAAAC,EAASH,EAAA,MACrDA,EAAAI,SAAAF,EAAAG,QAAAL,EAAAI,QAEA,IAAAE,EAAUL,EAAQ,GAAgEM,QAClFL,EAAAG,QAAAG,WAAA,SAAAC,GACAH,EAAA,WAAAN,GAAA,EAAAS,kCCTAR,EAAAS,EAAAC,GAAA,IAAAC,EAAAX,EAAA,IAAAY,EAAAZ,EAAAa,EAAAF,GAAA,QAAAG,KAAAH,EAAA,YAAAG,GAAA,SAAAC,GAAAf,EAAAgB,EAAAN,EAAAK,EAAA,kBAAAJ,EAAAI,KAAA,CAAAD,GAA8VJ,EAAA,QAAAE,EAAG,oBCAjWX,EAAAG,QAA2BJ,EAAQ,EAARA,EAA8D,IAEzFiB,KAAA,CAAchB,EAAAC,EAAS,wCAAsC,0CCF7D,IAAAgB,EAAA,WACA,IACAC,EADAC,KACAC,eAEA,OAHAD,KAEAE,MAAAC,IAAAJ,GACA,OAAoBK,YAAA,aAA2B,CAH/CJ,KAIAK,SACA,QALAL,KAKAM,WALAN,KAKAO,GALAP,KAKAQ,MAAA,oBAKAV,EAAAW,eAAA,ECJA,ICP0LC,EDO1L,CACAC,KAAA,KACA,CACAH,KAAA,kBEEA,IAAAI,EAAgBC,OAAAC,EAAA,EAAAD,CACdH,EACAZ,EHJF,IGMA,EAbA,SAAAV,GAEA,IAAA2B,EAAenC,EAAQ,IACvBmC,EAAA5B,YAAA4B,EAAA5B,WAAAC,IAYA,KACA,YAIAwB,EAAAI,QAAAC,OAAA,yBACe3B,EAAA,QAAAsB", 61 | "file": "1.js", 62 | "sourcesContent": [ 63 | "// style-loader: Adds some css to the DOM by adding a \n\n", 68 | "import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js&\"", 69 | "import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=b51d27b2&\"\nimport script from \"./home.vue?vue&type=script&lang=js&\"\nexport * from \"./home.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n \n var style0 = require(\"./home.vue?vue&type=style&index=0&lang=less&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n injectStyles,\n null,\n \"bdbb8908\"\n \n)\n\ncomponent.options.__file = \"app/src/views/home.vue\"\nexport default component.exports" 70 | ], 71 | "sourceRoot": "" 72 | }, 73 | "main.js": { 74 | "version": 3, 75 | "sources": [ 76 | "webpack:///webpack/bootstrap", 77 | "webpack:///./app/src/App.vue?9785", 78 | "webpack:///external \"vue\"", 79 | "webpack:///external \"vue-router\"", 80 | "webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js", 81 | "webpack:///./node_modules/css-loader/dist/runtime/api.js", 82 | "webpack:///./node_modules/vue-style-loader/lib/addStylesServer.js", 83 | "webpack:///./node_modules/vue-style-loader/lib/listToStyles.js", 84 | "webpack:///external \"babel-polyfill\"", 85 | "webpack:///./app/src/App.vue?6749", 86 | "webpack:///./app/src/App.vue?289e", 87 | "webpack:///./app/src/App.vue?a856", 88 | "webpack:///app/src/App.vue", 89 | "webpack:///./app/src/App.vue?8c2b", 90 | "webpack:///./app/src/App.vue", 91 | "webpack:///./app/src/router/index.js", 92 | "webpack:///./app/src/app.js", 93 | "webpack:///./app/src/entry-server.js" 94 | ], 95 | "names": [ 96 | "installedModules", 97 | "installedChunks", 98 | "0", 99 | "__webpack_require__", 100 | "moduleId", 101 | "exports", 102 | "module", 103 | "i", 104 | "l", 105 | "modules", 106 | "call", 107 | "e", 108 | "chunkId", 109 | "chunk", 110 | "require", 111 | "moreModules", 112 | "chunkIds", 113 | "ids", 114 | "length", 115 | "Promise", 116 | "all", 117 | "m", 118 | "c", 119 | "d", 120 | "name", 121 | "getter", 122 | "o", 123 | "Object", 124 | "defineProperty", 125 | "enumerable", 126 | "get", 127 | "r", 128 | "Symbol", 129 | "toStringTag", 130 | "value", 131 | "t", 132 | "mode", 133 | "__esModule", 134 | "ns", 135 | "create", 136 | "key", 137 | "bind", 138 | "n", 139 | "object", 140 | "property", 141 | "prototype", 142 | "hasOwnProperty", 143 | "p", 144 | "oe", 145 | "err", 146 | "process", 147 | "nextTick", 148 | "s", 149 | "content", 150 | "locals", 151 | "add", 152 | "default", 153 | "__inject__", 154 | "context", 155 | "normalizeComponent", 156 | "scriptExports", 157 | "render", 158 | "staticRenderFns", 159 | "functionalTemplate", 160 | "injectStyles", 161 | "scopeId", 162 | "moduleIdentifier", 163 | "shadowMode", 164 | "hook", 165 | "options", 166 | "_compiled", 167 | "functional", 168 | "_scopeId", 169 | "this", 170 | "$vnode", 171 | "ssrContext", 172 | "parent", 173 | "__VUE_SSR_CONTEXT__", 174 | "_registeredComponents", 175 | "_ssrRegister", 176 | "$root", 177 | "$options", 178 | "shadowRoot", 179 | "_injectStyles", 180 | "originalRender", 181 | "h", 182 | "existing", 183 | "beforeCreate", 184 | "concat", 185 | "__webpack_exports__", 186 | "useSourceMap", 187 | "list", 188 | "toString", 189 | "map", 190 | "item", 191 | "cssMapping", 192 | "btoa", 193 | "sourceMapping", 194 | "sourceMap", 195 | "unescape", 196 | "encodeURIComponent", 197 | "JSON", 198 | "stringify", 199 | "sourceURLs", 200 | "sources", 201 | "source", 202 | "sourceRoot", 203 | "join", 204 | "cssWithMappingToString", 205 | "mediaQuery", 206 | "alreadyImportedModules", 207 | "id", 208 | "push", 209 | "addStylesServer", 210 | "parentId", 211 | "isProduction", 212 | "renderStyles", 213 | "_styles", 214 | "_renderStyles", 215 | "styles", 216 | "newStyles", 217 | "part", 218 | "css", 219 | "media", 220 | "parts", 221 | "listToStyles", 222 | "j", 223 | "style", 224 | "indexOf", 225 | "addStyleProd", 226 | "addStyleDev", 227 | "_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_less_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_id_bd26cd6c_lang_less_scoped_true___WEBPACK_IMPORTED_MODULE_0__", 228 | "_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_less_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_id_bd26cd6c_lang_less_scoped_true___WEBPACK_IMPORTED_MODULE_0___default", 229 | "__WEBPACK_IMPORT_KEY__", 230 | "_h", 231 | "$createElement", 232 | "_c", 233 | "_self", 234 | "attrs", 235 | "_withStripped", 236 | "src_Appvue_type_script_lang_js_", 237 | "data", 238 | "[object Object]", 239 | "console", 240 | "log", 241 | "Date", 242 | "component", 243 | "componentNormalizer", 244 | "style0", 245 | "__file", 246 | "App", 247 | "Vue", 248 | "use", 249 | "Router", 250 | "router", 251 | "routes", 252 | "path", 253 | "resolve", 254 | "__WEBPACK_AMD_REQUIRE_ARRAY__", 255 | "apply", 256 | "catch", 257 | "createApp", 258 | "app", 259 | "reject", 260 | "url", 261 | "onReady", 262 | "getMatchedComponents", 263 | "code" 264 | ], 265 | "mappings": "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", 266 | "file": "main.js", 267 | "sourcesContent": [ 268 | " \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"0\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// require() chunk loading for javascript\n\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] !== 0) {\n \t\t\tvar chunk = require(\"./\" + ({}[chunkId]||chunkId) + \".js\");\n \t\t\tvar moreModules = chunk.modules, chunkIds = chunk.ids;\n \t\t\tfor(var moduleId in moreModules) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t\tfor(var i = 0; i < chunkIds.length; i++)\n \t\t\t\tinstalledChunks[chunkIds[i]] = 0;\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/public/dist/\";\n\n \t// uncaught error handler for webpack runtime\n \t__webpack_require__.oe = function(err) {\n \t\tprocess.nextTick(function() {\n \t\t\tthrow err; // catch this error by using import().catch()\n \t\t});\n \t};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n", 269 | "// style-loader: Adds some css to the DOM by adding a '\n }\n return css\n}\n", 275 | "/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n", 276 | "module.exports = require(\"babel-polyfill\");", 277 | "import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/less-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=bd26cd6c&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/less-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=bd26cd6c&lang=less&scoped=true&\"", 278 | "exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#app[data-v-bd26cd6c] {\\n height: 100%;\\n}\\nhtml[data-v-bd26cd6c] {\\n height: 100%;\\n}\\nbody[data-v-bd26cd6c] {\\n margin: 0;\\n height: 100%;\\n}\\nh1[data-v-bd26cd6c],\\nh2[data-v-bd26cd6c],\\nh3[data-v-bd26cd6c],\\nh4[data-v-bd26cd6c],\\nh5[data-v-bd26cd6c] {\\n margin: 0;\\n}\\n\", \"\"]);\n\n", 279 | "var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"app\" } }, [_c(\"router-view\")], 1)\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }", 280 | "\n\n\n\n\n\n\n", 281 | "import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"", 282 | "import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=bd26cd6c&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n \n var style0 = require(\"./App.vue?vue&type=style&index=0&id=bd26cd6c&lang=less&scoped=true&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n injectStyles,\n \"bd26cd6c\",\n \"04bf2f95\"\n \n)\n\ncomponent.options.__file = \"app/src/App.vue\"\nexport default component.exports", 283 | "import Vue from 'vue';\nimport Router from 'vue-router';\n\nconst home = (resolve) => { require([\"../views/home.vue\"], resolve) };\n\nVue.use(Router);\n\nlet router = new Router({\n mode: 'history',\n routes: [{\n path: '/home',\n component: home\n }]\n});\n\nexport function createRouter() {\n return router;\n}", 284 | "import Vue from 'vue';\nimport App from './App.vue';\nimport { createRouter } from './router/index.js';\n\nexport function createApp() {\n\n // 创建router实例\n const router = createRouter()\n\n // 创建vue对象实例\n const app = new Vue({\n render: h => h(App),\n router\n });\n\n return { app, router };\n}", 285 | "import { createApp } from './app';\n\n// const { createApp } = require('./app');\n\nconsole.log(createApp);\n\nexport default context => {\n // const { app } = createApp(); \n // return app;\n\n return new Promise((resolve, reject) => {\n const { app, router } = createApp();\n\n router.push(context.url);\n\n router.onReady(() => {\n const matchedComponents = router.getMatchedComponents();\n\n if (!matchedComponents.length) {\n return reject({\n code: 404\n });\n }\n\n // 返回app实例,使应用程秀开始渲染\n resolve(app);\n }, reject);\n });\n};" 286 | ], 287 | "sourceRoot": "" 288 | } 289 | } 290 | } -------------------------------------------------------------------------------- /app/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 22 | 23 | -------------------------------------------------------------------------------- /app/router.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @param {Egg.Application} app - egg application 5 | */ 6 | module.exports = app => { 7 | const { router, controller } = app; 8 | router.get('/*', controller.main.index); 9 | }; 10 | -------------------------------------------------------------------------------- /app/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | 23 | 24 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/app.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | import { createRouter } from './router/index.js'; 4 | 5 | export function createApp() { 6 | 7 | // 创建router实例 8 | const router = createRouter() 9 | 10 | // 创建vue对象实例 11 | const app = new Vue({ 12 | render: h => h(App), 13 | router 14 | }); 15 | 16 | return { app, router }; 17 | } -------------------------------------------------------------------------------- /app/src/axios/index.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import bridge from '../bridge/index'; 3 | import getToken from '../tools/token'; 4 | 5 | // axios.defaults.baseURL = "http://192.168.10.245:8799"; //吴伟 6 | // axios.defaults.baseURL = "http://47.95.252.113:8799"; //测试 7 | axios.defaults.baseURL = "http://47.110.247.100:8081"; //生产 8 | // axios.defaults.baseURL = "http://192.168.10.181:8799/api"; //刘杨 9 | // axios.defaults.baseURL = "/"; //线上部署IP 10 | axios.defaults.headers['Content-Type'] = "application/json; charset=utf-8"; 11 | getToken.then((res) => { 12 | const { token, uuid } = res; 13 | axios.defaults.headers['token'] = token; 14 | axios.defaults.headers['app-uuid'] = uuid; 15 | }).catch(() => { 16 | 17 | }); 18 | 19 | 20 | axios.interceptors.response.use(response => { 21 | var data = response.data; 22 | if (data.code == 3) { 23 | bridge((bridge) => { 24 | bridge.callHandler('nologin', {}); 25 | }); 26 | } 27 | return data; 28 | }, error => { 29 | var errorMsg = ""; 30 | if (error && error.response) { 31 | switch (error.response.status) { 32 | case 400: 33 | errorMsg = '错误请求' 34 | break; 35 | case 401: 36 | errorMsg = '未授权,请重新登录' 37 | break; 38 | case 403: 39 | errorMsg = '拒绝访问' 40 | break; 41 | case 404: 42 | errorMsg = '请求错误,未找到该资源' 43 | break; 44 | case 405: 45 | errorMsg = '请求方法未允许' 46 | break; 47 | case 408: 48 | errorMsg = '请求超时' 49 | break; 50 | case 500: 51 | errorMsg = '服务器端出错' 52 | break; 53 | case 501: 54 | errorMsg = '网络未实现' 55 | break; 56 | case 502: 57 | errorMsg = '网络错误' 58 | break; 59 | case 503: 60 | errorMsg = '服务不可用' 61 | break; 62 | case 504: 63 | errorMsg = '网络超时' 64 | break; 65 | case 505: 66 | errorMsg = 'http版本不支持该请求' 67 | break; 68 | default: 69 | errorMsg = `连接错误${err.response.status}` 70 | } 71 | } else { 72 | errorMsg = "连接到服务器失败" 73 | } 74 | alert(errorMsg); 75 | return Promise.reject(); 76 | }); 77 | -------------------------------------------------------------------------------- /app/src/entry-client.js: -------------------------------------------------------------------------------- 1 | import { createApp } from './app'; 2 | 3 | // const { createApp } = require('./app'); 4 | 5 | const { app, router } = createApp(); 6 | 7 | router.onReady(() => { 8 | app.$mount('#app', true); 9 | }); -------------------------------------------------------------------------------- /app/src/entry-server.js: -------------------------------------------------------------------------------- 1 | import { createApp } from './app'; 2 | 3 | // const { createApp } = require('./app'); 4 | 5 | console.log(createApp); 6 | 7 | export default context => { 8 | // const { app } = createApp(); 9 | // return app; 10 | 11 | return new Promise((resolve, reject) => { 12 | const { app, router } = createApp(); 13 | 14 | router.push(context.url); 15 | 16 | router.onReady(() => { 17 | const matchedComponents = router.getMatchedComponents(); 18 | 19 | if (!matchedComponents.length) { 20 | return reject({ 21 | code: 404 22 | }); 23 | } 24 | 25 | // 返回app实例,使应用程秀开始渲染 26 | resolve(app); 27 | }, reject); 28 | }); 29 | }; -------------------------------------------------------------------------------- /app/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | 4 | const home = (resolve) => { require(["../views/home.vue"], resolve) }; 5 | 6 | Vue.use(Router); 7 | 8 | let router = new Router({ 9 | mode: 'history', 10 | routes: [{ 11 | path: '/home', 12 | component: home 13 | }] 14 | }); 15 | 16 | export function createRouter() { 17 | return router; 18 | } -------------------------------------------------------------------------------- /app/src/style/main.less: -------------------------------------------------------------------------------- 1 | html { 2 | height: 100%; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | height: 100%; 8 | } 9 | h1, h2, h3, h4, h5 { 10 | margin: 0; 11 | } 12 | .about-we-text{ 13 | width: 100%; 14 | height: 100%; 15 | box-sizing: border-box; 16 | padding: .23rem .15rem 0; 17 | background-color: #fff; 18 | color: #333; 19 | font-size: .15rem; 20 | .title{ 21 | text-align: center; 22 | font-size: .2rem; 23 | } 24 | >p{ 25 | text-indent: 2em; 26 | font-size: .15rem; 27 | &:last-child{ 28 | padding-bottom: .2rem; 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/views/home.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | 17 | 18 | 23 | 24 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | environment: 2 | matrix: 3 | - nodejs_version: '8' 4 | 5 | install: 6 | - ps: Install-Product node $env:nodejs_version 7 | - npm i npminstall && node_modules\.bin\npminstall 8 | 9 | test_script: 10 | - node --version 11 | - npm --version 12 | - npm run test 13 | 14 | build: off 15 | -------------------------------------------------------------------------------- /config/config.default.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = appInfo => { 4 | const config = exports = {}; 5 | 6 | // use for cookie sign key, should change to your own and keep security 7 | config.keys = appInfo.name + '_1550112819799_6037'; 8 | 9 | // add your config here 10 | config.middleware = []; 11 | 12 | return config; 13 | }; 14 | -------------------------------------------------------------------------------- /config/plugin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // had enabled by egg 4 | // exports.static = true; 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ssr", 3 | "version": "1.0.0", 4 | "description": "", 5 | "private": true, 6 | "dependencies": { 7 | "egg": "^2.2.1", 8 | "egg-scripts": "^2.5.0", 9 | "vue-server-renderer": "^2.6.6", 10 | "axios": "^0.18.0", 11 | "babel-plugin-transform-runtime": "^6.23.0", 12 | "babel-polyfill": "^6.26.0", 13 | "babel-register": "^6.26.0", 14 | "es6-promise": "^4.2.5", 15 | "express": "^4.16.4", 16 | "koa": "^2.7.0", 17 | "vue": "^2.6.6", 18 | "vue-router": "^3.0.2", 19 | "vue-video-player": "^5.0.2" 20 | }, 21 | "devDependencies": { 22 | "autod": "^3.0.1", 23 | "autod-egg": "^1.0.0", 24 | "egg-bin": "^4.3.5", 25 | "egg-ci": "^1.8.0", 26 | "egg-mock": "^3.14.0", 27 | "eslint": "^4.11.0", 28 | "eslint-config-egg": "^6.0.0", 29 | "webstorm-disable-index": "^1.2.0", 30 | "babel-core": "^6.26.3", 31 | "babel-loader": "^7.1.5", 32 | "babel-preset-es2015": "^6.24.1", 33 | "chokidar": "^2.1.1", 34 | "css-loader": "^2.1.0", 35 | "file-loader": "^3.0.1", 36 | "less": "^3.9.0", 37 | "less-loader": "^4.1.0", 38 | "memory-fs": "^0.4.1", 39 | "url-loader": "^1.1.2", 40 | "vue-loader": "^15.6.2", 41 | "vue-style-loader": "^4.1.2", 42 | "vue-template-compiler": "^2.6.6", 43 | "webpack": "^4.29.3", 44 | "webpack-cli": "^3.2.3", 45 | "webpack-dev-middleware": "^3.5.2", 46 | "webpack-hot-middleware": "^2.24.3", 47 | "webpack-merge": "^4.2.1", 48 | "webpack-node-externals": "^1.7.2" 49 | }, 50 | "engines": { 51 | "node": ">=8.9.0" 52 | }, 53 | "scripts": { 54 | "start": "egg-scripts start --title=egg-server-ssr", 55 | "stop": "egg-scripts stop --title=egg-server-ssr", 56 | "dev": "egg-bin dev", 57 | "debug": "egg-bin debug", 58 | "test": "npm run lint -- --fix && npm run test-local", 59 | "test-local": "egg-bin test", 60 | "cov": "egg-bin cov", 61 | "lint": "eslint .", 62 | "ci": "npm run lint && npm run cov", 63 | "autod": "autod", 64 | "build:server": "webpack --mode production --config app/config/webpack-server-config.js", 65 | "build:client": "webpack --mode production --config app/config/webpack-client-config.js", 66 | "build": "npm run build:server && npm run build:client" 67 | }, 68 | "ci": { 69 | "version": "8" 70 | }, 71 | "repository": { 72 | "type": "git", 73 | "url": "" 74 | }, 75 | "author": "", 76 | "license": "MIT" 77 | } 78 | -------------------------------------------------------------------------------- /test/app/controller/home.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { app, assert } = require('egg-mock/bootstrap'); 4 | 5 | describe('test/app/controller/home.test.js', () => { 6 | 7 | it('should assert', function* () { 8 | const pkg = require('../../../package.json'); 9 | assert(app.config.keys.startsWith(pkg.name)); 10 | 11 | // const ctx = app.mockContext({}); 12 | // yield ctx.service.xx(); 13 | }); 14 | 15 | it('should GET /', () => { 16 | return app.httpRequest() 17 | .get('/') 18 | .expect('hi, egg') 19 | .expect(200); 20 | }); 21 | }); 22 | --------------------------------------------------------------------------------