@@ -8,7 +8,11 @@ const path = require('path')
8
8
const createMarkdown = require ( './createMarkdown' )
9
9
const loadConfig = require ( './loadConfig' )
10
10
const loadTheme = require ( './loadTheme' )
11
- const { fs, logger, chalk, globby, sort, datatypes : { isFunction } } = require ( '@vuepress/shared-utils' )
11
+ const {
12
+ fs, logger, chalk, globby, sort,
13
+ datatypes : { isFunction } ,
14
+ fallback : { fsExistsFallback }
15
+ } = require ( '@vuepress/shared-utils' )
12
16
13
17
const Page = require ( './Page' )
14
18
const ClientComputedMixin = require ( './ClientComputedMixin' )
@@ -66,8 +70,8 @@ module.exports = class AppContext {
66
70
67
71
async process ( ) {
68
72
this . normalizeHeadTagUrls ( )
69
- this . resolveTemplates ( )
70
73
await this . resolveTheme ( )
74
+ this . resolveTemplates ( )
71
75
this . resolvePlugins ( )
72
76
this . markdown = createMarkdown ( this )
73
77
@@ -153,24 +157,42 @@ module.exports = class AppContext {
153
157
/**
154
158
* Make template configurable
155
159
*
160
+ * Resolving Priority (devTemplate as example):
161
+ *
162
+ * 1. siteConfig.devTemplate
163
+ * 2. `dev.html` located at .vuepress/templates
164
+ * 3. themeIndexFile.devTemplate
165
+ * 4. default devTemplate
166
+ *
156
167
* @api private
157
168
*/
158
169
159
170
resolveTemplates ( ) {
160
- let { ssrTemplate, devTemplate } = this . siteConfig
171
+ const { siteSsrTemplate, siteDevTemplate } = this . siteConfig
172
+
161
173
const templateDir = path . resolve ( this . vuepressDir , 'templates' )
162
- if ( ! devTemplate ) {
163
- devTemplate = path . resolve ( templateDir , 'dev.html' )
164
- if ( ! fs . existsSync ( devTemplate ) ) {
165
- devTemplate = path . resolve ( __dirname , '../app/index.dev.html' )
166
- }
167
- }
168
- if ( ! ssrTemplate ) {
169
- ssrTemplate = path . resolve ( templateDir , 'ssr.html' )
170
- if ( ! fs . existsSync ( ssrTemplate ) ) {
171
- ssrTemplate = path . resolve ( __dirname , '../app/index.ssr.html' )
172
- }
173
- }
174
+ const siteSsrTemplate2 = path . resolve ( templateDir , 'dev.html' )
175
+ const siteDevTemplate2 = path . resolve ( templateDir , 'ssr.html' )
176
+
177
+ const { themeSsrTemplate, themeDevTemplate } = this . themeIndexFile
178
+
179
+ const defaultSsrTemplate = path . resolve ( __dirname , '../app/index.ssr.html' )
180
+ const defaultDevTemplate = path . resolve ( __dirname , '../app/index.dev.html' )
181
+
182
+ const ssrTemplate = fsExistsFallback ( [
183
+ siteSsrTemplate ,
184
+ siteSsrTemplate2 ,
185
+ themeSsrTemplate ,
186
+ defaultSsrTemplate
187
+ ] )
188
+
189
+ const devTemplate = fsExistsFallback ( [
190
+ siteDevTemplate ,
191
+ siteDevTemplate2 ,
192
+ themeDevTemplate ,
193
+ defaultDevTemplate
194
+ ] )
195
+
174
196
logger . debug ( 'SSR Template File: ' + chalk . gray ( ssrTemplate ) )
175
197
logger . debug ( 'DEV Template File: ' + chalk . gray ( devTemplate ) )
176
198
this . devTemplate = devTemplate
0 commit comments