1 | const {
|
2 | pathConfig: { template }
|
3 | } = require('./config')
|
4 |
|
5 | const glob = require('glob')
|
6 | const path = require('path')
|
7 | const fs = require('fs')
|
8 | const fse = require('fs-extra')
|
9 | const Mustache = require('mustache')
|
10 | const { pages, prepackPath, src } = require('config').get('path')
|
11 |
|
12 | const appServerTemplatePath = path.resolve(template, 'ssr/app-server.js')
|
13 | const appTemplatePath = path.resolve(template, 'ssr/app.js')
|
14 | const clientTemplatePath = path.resolve(template, 'ssr/entry-client.js')
|
15 | const serverTemplatePath = path.resolve(template, 'ssr/entry-server.js')
|
16 |
|
17 | const createSSRFile = async (key = 'index') => {
|
18 | const reader = p => fs.readFileSync(p, { encoding: 'utf-8' })
|
19 |
|
20 | const appContent = Mustache.render(reader(appTemplatePath), {
|
21 | app: path.resolve(pages, `${key}`),
|
22 | global: path.resolve(src, 'global.js')
|
23 | })
|
24 |
|
25 | const appServerContent = Mustache.render(reader(appServerTemplatePath), {
|
26 | app: path.resolve(pages, `${key}`),
|
27 | global: path.resolve(src, 'global-server.js')
|
28 | })
|
29 |
|
30 | const serverContent = reader(serverTemplatePath)
|
31 | const clientContent = reader(clientTemplatePath)
|
32 |
|
33 | let appPath = path.resolve(prepackPath, `./ssr/${key}/app.js`)
|
34 | let clientPath = path.resolve(prepackPath, `./ssr/${key}/entry-client.js`)
|
35 | let appPathServer = path.resolve(prepackPath, `./ssr/${key}/app-server.js`)
|
36 | let serverPath = path.resolve(prepackPath, `./ssr/${key}/entry-server.js`)
|
37 |
|
38 | const writer = (p, c) => fse.outputFileSync(p, c, { encoding: 'utf-8' })
|
39 |
|
40 | let entries = [
|
41 | [appPathServer, appServerContent],
|
42 | [appPath, appContent],
|
43 | [serverPath, serverContent],
|
44 | [clientPath, clientContent]
|
45 | ]
|
46 |
|
47 | for (const entry of entries) {
|
48 | await writer.apply(null, entry)
|
49 | }
|
50 | }
|
51 |
|
52 | const prepack = async () => {
|
53 | let keys = glob.sync(path.resolve(pages, './**/app.vue')).map(v => {
|
54 | return v.split('/').slice(-2, -1)[0]
|
55 | })
|
56 |
|
57 | for (const key of keys) {
|
58 | await createSSRFile(key)
|
59 | }
|
60 | }
|
61 |
|
62 | module.exports = prepack
|