├── .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": "2BACA,IAAAA,EAAA,GAIAC,EAAA,CACAC,EAAA,GAIA,SAAAC,EAAAC,GAGA,GAAAJ,EAAAI,GACA,OAAAJ,EAAAI,GAAAC,QAGA,IAAAC,EAAAN,EAAAI,GAAA,CACAG,EAAAH,EACAI,GAAA,EACAH,QAAA,IAUA,OANAI,EAAAL,GAAAM,KAAAJ,EAAAD,QAAAC,IAAAD,QAAAF,GAGAG,EAAAE,GAAA,EAGAF,EAAAD,QAqFA,OAhFAF,EAAAQ,EAAA,SAAAC,GAOA,OAAAX,EAAAW,GAAA,CACA,IAAAC,EAAAC,QAAA,SAAkCF,OAAA,OAClCG,EAAAF,EAAAJ,QAAAO,EAAAH,EAAAI,IACA,QAAAb,KAAAW,EACAN,EAAAL,GAAAW,EAAAX,GAEA,QAAAG,EAAA,EAAkBA,EAAAS,EAAAE,OAAqBX,IACvCN,EAAAe,EAAAT,IAAA,EAEA,OAAAY,QAAAC,IAfA,KAmBAjB,EAAAkB,EAAAZ,EAGAN,EAAAmB,EAAAtB,EAGAG,EAAAoB,EAAA,SAAAlB,EAAAmB,EAAAC,GACAtB,EAAAuB,EAAArB,EAAAmB,IACAG,OAAAC,eAAAvB,EAAAmB,EAAA,CAA0CK,YAAA,EAAAC,IAAAL,KAK1CtB,EAAA4B,EAAA,SAAA1B,GACA,oBAAA2B,eAAAC,aACAN,OAAAC,eAAAvB,EAAA2B,OAAAC,YAAA,CAAwDC,MAAA,WAExDP,OAAAC,eAAAvB,EAAA,cAAiD6B,OAAA,KAQjD/B,EAAAgC,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAA/B,EAAA+B,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,iBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAX,OAAAY,OAAA,MAGA,GAFApC,EAAA4B,EAAAO,GACAX,OAAAC,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAA/B,EAAAoB,EAAAe,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAnC,EAAAuC,EAAA,SAAApC,GACA,IAAAmB,EAAAnB,KAAA+B,WACA,WAA2B,OAAA/B,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAH,EAAAoB,EAAAE,EAAA,IAAAA,GACAA,GAIAtB,EAAAuB,EAAA,SAAAiB,EAAAC,GAAsD,OAAAjB,OAAAkB,UAAAC,eAAApC,KAAAiC,EAAAC,IAGtDzC,EAAA4C,EAAA,gBAGA5C,EAAA6C,GAAA,SAAAC,GACAC,QAAAC,SAAA,WACA,MAAAF,KAMA9C,IAAAiD,EAAA,qBChHA,IAAAC,EAAclD,EAAQ,GACtB,iBAAAkD,MAAA,EAA4C/C,EAAAC,EAAS8C,EAAA,MACrDA,EAAAC,SAAAhD,EAAAD,QAAAgD,EAAAC,QAEA,IAAAC,EAAUpD,EAAQ,GAA6DqD,QAC/ElD,EAAAD,QAAAoD,WAAA,SAAAC,GACAH,EAAA,WAAAF,GAAA,EAAAK,mBCTApD,EAAAD,QAAAS,QAAA,sBCAAR,EAAAD,QAAAS,QAAA,4CCMe,SAAA6C,EACfC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAGA,IAqBAC,EArBAC,EAAA,mBAAAT,EACAA,EAAAS,QACAT,EAiDA,GA9CAC,IACAQ,EAAAR,SACAQ,EAAAP,kBACAO,EAAAC,WAAA,GAIAP,IACAM,EAAAE,YAAA,GAIAN,IACAI,EAAAG,SAAA,UAAAP,GAIAC,GACAE,EAAA,SAAAV,IAEAA,EACAA,GACAe,KAAAC,QAAAD,KAAAC,OAAAC,YACAF,KAAAG,QAAAH,KAAAG,OAAAF,QAAAD,KAAAG,OAAAF,OAAAC,aAEA,oBAAAE,sBACAnB,EAAAmB,qBAGAb,GACAA,EAAAtD,KAAA+D,KAAAf,GAGAA,KAAAoB,uBACApB,EAAAoB,sBAAAvB,IAAAW,IAKAG,EAAAU,aAAAX,GACGJ,IACHI,EAAAD,EACA,WAAqBH,EAAAtD,KAAA+D,UAAAO,MAAAC,SAAAC,aACrBlB,GAGAI,EACA,GAAAC,EAAAE,WAAA,CAGAF,EAAAc,cAAAf,EAEA,IAAAgB,EAAAf,EAAAR,OACAQ,EAAAR,OAAA,SAAAwB,EAAA3B,GAEA,OADAU,EAAA1D,KAAAgD,GACA0B,EAAAC,EAAA3B,QAEK,CAEL,IAAA4B,EAAAjB,EAAAkB,aACAlB,EAAAkB,aAAAD,EACA,GAAAE,OAAAF,EAAAlB,GACA,CAAAA,GAIA,OACA/D,QAAAuD,EACAS,WA1FAlE,EAAAoB,EAAAkE,EAAA,sBAAA9B,kCCOArD,EAAAD,QAAA,SAAAqF,GACA,IAAAC,EAAA,GAgDA,OA9CAA,EAAAC,SAAA,WACA,OAAAnB,KAAAoB,IAAA,SAAAC,GACA,IAAAzC,EA+CA,SAAAyC,EAAAJ,GACA,IAAArC,EAAAyC,EAAA,OACAC,EAAAD,EAAA,GAEA,IAAAC,EACA,OAAA1C,EAGA,GAAAqC,GAAA,mBAAAM,KAAA,CACA,IAAAC,GAWAC,EAXAH,EAeA,mEAFAC,KAAAG,SAAAC,mBAAAC,KAAAC,UAAAJ,MAEA,OAdAK,EAAAR,EAAAS,QAAAX,IAAA,SAAAY,GACA,uBAAAV,EAAAW,WAAAD,EAAA,QAEA,OAAApD,GAAAmC,OAAAe,GAAAf,OAAA,CAAAS,IAAAU,KAAA,MAOA,IAAAT,EAJA,OAAA7C,GAAAsD,KAAA,MA/DAC,CAAAd,EAAAJ,GAEA,OAAAI,EAAA,GACA,UAAAA,EAAA,OAAuCzC,EAAA,IAEvCA,IAEKsD,KAAA,KAILhB,EAAApF,EAAA,SAAAE,EAAAoG,GACA,iBAAApG,IACAA,EAAA,OAAAA,EAAA,MAKA,IAFA,IAAAqG,EAAA,GAEAvG,EAAA,EAAmBA,EAAAkE,KAAAvD,OAAiBX,IAAA,CACpC,IAAAwG,EAAAtC,KAAAlE,GAAA,GAEA,MAAAwG,IACAD,EAAAC,IAAA,GAIA,IAAAxG,EAAA,EAAeA,EAAAE,EAAAS,OAAoBX,IAAA,CACnC,IAAAuF,EAAArF,EAAAF,GAKA,MAAAuF,EAAA,IAAAgB,EAAAhB,EAAA,MACAe,IAAAf,EAAA,GACAA,EAAA,GAAAe,EACSA,IACTf,EAAA,OAAAA,EAAA,aAAAe,EAAA,KAGAlB,EAAAqB,KAAAlB,MAKAH,iCCtDe,SAAAsB,EAAAC,EAAAvB,EAAAwB,EAAAzD,GAIf,GAHAA,GAAA,oBAAAmB,sBACAnB,EAAAmB,qBAEAnB,EAAA,CACAA,EAAAZ,eAAA,YACAnB,OAAAC,eAAA8B,EAAA,UACA7B,YAAA,EACAC,IAAA,WACA,OAAAsF,EAAA1D,EAAA2D,YAIA3D,EAAA4D,cAAAF,GAGA,IAAAG,EAAA7D,EAAA2D,UAAA3D,EAAA2D,QAAA,IACA1B,ECfe,SAAAuB,EAAAvB,GAGf,IAFA,IAAA4B,EAAA,GACAC,EAAA,GACAjH,EAAA,EAAiBA,EAAAoF,EAAAzE,OAAiBX,IAAA,CAClC,IAAAuF,EAAAH,EAAApF,GACAwG,EAAAjB,EAAA,GAIA2B,EAAA,CACAV,GAAAG,EAAA,IAAA3G,EACAmH,IALA5B,EAAA,GAMA6B,MALA7B,EAAA,GAMAI,UALAJ,EAAA,IAOA0B,EAAAT,GAGAS,EAAAT,GAAAa,MAAAZ,KAAAS,GAFAF,EAAAP,KAAAQ,EAAAT,GAAA,CAAmCA,KAAAa,MAAA,CAAAH,KAKnC,OAAAF,EDNWM,CAAYX,EAAAvB,GACvBwB,EAUA,SAAAI,EAAA5B,GACA,QAAApF,EAAA,EAAiBA,EAAAoF,EAAAzE,OAAiBX,IAElC,IADA,IAAAqH,EAAAjC,EAAApF,GAAAqH,MACAE,EAAA,EAAmBA,EAAAF,EAAA1G,OAAkB4G,IAAA,CACrC,IAAAL,EAAAG,EAAAE,GAEAf,EAAAU,EAAAE,OAAA,UACAI,EAAAR,EAAAR,GACAgB,EACAA,EAAA9G,IAAA+G,QAAAP,EAAAV,IAAA,IACAgB,EAAA9G,IAAA+F,KAAAS,EAAAV,IACAgB,EAAAL,KAAA,KAAAD,EAAAC,KAGAH,EAAAR,GAAA,CACA9F,IAAA,CAAAwG,EAAAV,IACAW,IAAAD,EAAAC,IACAC,MAAAF,EAAAE,QA1BAM,CAAAV,EAAA5B,GAmCA,SAAA4B,EAAA5B,GACA,QAAApF,EAAA,EAAiBA,EAAAoF,EAAAzE,OAAiBX,IAElC,IADA,IAAAqH,EAAAjC,EAAApF,GAAAqH,MACAE,EAAA,EAAmBA,EAAAF,EAAA1G,OAAkB4G,IAAA,CACrC,IAAAL,EAAAG,EAAAE,GACAP,EAAAE,EAAAV,IAAA,CACA9F,IAAA,CAAAwG,EAAAV,IACAW,IAAAD,EAAAC,IACAC,MAAAF,EAAAE,QAzCAO,CAAAX,EAAA5B,IA+CA,SAAAyB,EAAAG,GACA,IAAAG,EAAA,GACA,QAAAlF,KAAA+E,EAAA,CACA,IAAAQ,EAAAR,EAAA/E,GACAkF,GAAA,2BAAAK,EAAA9G,IAAA0F,KAAA,UACAoB,EAAAJ,MAAA,WAAAI,EAAAJ,MAAA,YACAI,EAAAL,IAAA,WAEA,OAAAA,SA9EAvH,EAAAoB,EAAAkE,EAAA,4BAAAwB,yDEAA3G,EAAAD,QAAAS,QAAA,gDCAAX,EAAA4B,EAAA0D,GAAA,IAAA0C,EAAAhI,EAAA,GAAAiI,EAAAjI,EAAAuC,EAAAyF,GAAA,QAAAE,KAAAF,EAAA,YAAAE,GAAA,SAAA7F,GAAArC,EAAAoB,EAAAkE,EAAAjD,EAAA,kBAAA2F,EAAA3F,KAAA,CAAA6F,GAAsW5C,EAAA,QAAA2C,EAAG,oBCAzW9H,EAAAD,QAA2BF,EAAQ,EAARA,EAA2D,IAEtF6G,KAAA,CAAc1G,EAAAC,EAAS,wRAAsR,8DCF7SsD,EAAA,WACA,IACAyE,EADA7D,KACA8D,eACAC,EAFA/D,KAEAgE,MAAAD,IAAAF,EACA,OAAAE,EAAA,OAAoBE,MAAA,CAAS3B,GAAA,QAAc,CAAAyB,EAAA,oBAG3C3E,EAAA8E,eAAA,ECAA,ICPmLC,EDOnL,CACAC,KAAA,KACA,IAIAC,YAGAA,eACAC,QAAAC,IAAA,IAAAC,eELA,IAAAC,EAAgBvH,OAAAwH,EAAA,EAAAxH,CACdiH,EACA/E,EHRF,IGUA,EAbA,SAAAH,GAEA,IAAA0F,EAAejJ,EAAQ,GACvBiJ,EAAA3F,YAAA2F,EAAA3F,WAAAC,IAYA,WACA,YAIAwF,EAAA7E,QAAAgF,OAAA,kBACe,IAAAC,EAAAJ,0BCnBfK,IAAIC,IAAIC,KAER,IAAIC,EAAS,IAAID,IAAO,CACpBrH,KAAM,UACNuH,OAAQ,CAAC,CACLC,KAAM,QACNV,UARMW,IAAc/I,uBAAQ,IAAAgJ,EAAA,CAAC3J,EAAA,KAAT,EAAA4J,MAAA,KAAAD,IAAArH,KAAAgC,OAAAuF,MAAA7J,EAAA6C,SCCrB,SAASiH,IAGZ,MAAMP,EDSCA,ECDP,MAAO,CAAEQ,IALG,IAAIX,IAAI,CAChB1F,OAAQwB,GAAKA,EAAEiE,GACfI,WAGUA,UCXlBX,QAAQC,IAAIiB,GAEGvG,cAIJ,IAAIvC,QAAQ,CAAC0I,EAASM,KACzB,MAAMD,IAAEA,EAAFR,OAAOA,GAAWO,IAExBP,EAAO1C,KAAKtD,EAAQ0G,KAEpBV,EAAOW,QAAQ,KAGX,IAF0BX,EAAOY,uBAEVpJ,OACnB,OAAOiJ,EAAO,CACVI,KAAM,MAKdV,EAAQK,IACTC",
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\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 |
2 |
3 |
4 |
5 |
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 |
2 |
5 |
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 |
--------------------------------------------------------------------------------