UNPKG

1.94 kBJavaScriptView Raw
1const {
2 pathConfig: { template }
3} = require('./config')
4
5const glob = require('glob')
6const path = require('path')
7const fs = require('fs')
8const fse = require('fs-extra')
9const Mustache = require('mustache')
10const { pages, prepackPath, src } = require('config').get('path')
11
12const appServerTemplatePath = path.resolve(template, 'ssr/app-server.js')
13const appTemplatePath = path.resolve(template, 'ssr/app.js')
14const clientTemplatePath = path.resolve(template, 'ssr/entry-client.js')
15const serverTemplatePath = path.resolve(template, 'ssr/entry-server.js')
16
17const 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
52const 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
62module.exports = prepack