@@ -8,7 +8,11 @@ const path = require('path')
88const createMarkdown = require ( './createMarkdown' )
99const loadConfig = require ( './loadConfig' )
1010const 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' )
1216
1317const Page = require ( './Page' )
1418const ClientComputedMixin = require ( './ClientComputedMixin' )
@@ -66,8 +70,8 @@ module.exports = class AppContext {
6670
6771 async process ( ) {
6872 this . normalizeHeadTagUrls ( )
69- this . resolveTemplates ( )
7073 await this . resolveTheme ( )
74+ this . resolveTemplates ( )
7175 this . resolvePlugins ( )
7276 this . markdown = createMarkdown ( this )
7377
@@ -153,24 +157,42 @@ module.exports = class AppContext {
153157 /**
154158 * Make template configurable
155159 *
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+ *
156167 * @api private
157168 */
158169
159170 resolveTemplates ( ) {
160- let { ssrTemplate, devTemplate } = this . siteConfig
171+ const { siteSsrTemplate, siteDevTemplate } = this . siteConfig
172+
161173 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+
174196 logger . debug ( 'SSR Template File: ' + chalk . gray ( ssrTemplate ) )
175197 logger . debug ( 'DEV Template File: ' + chalk . gray ( devTemplate ) )
176198 this . devTemplate = devTemplate
0 commit comments