Skip to content

Commit 6c6225d

Browse files
committed
feat($core): support themeIndexFile.devTemplate/ssrTemplate (close: #882)
Resolving Priority (devTemplate as example): 1. siteConfig.devTemplate 2. `dev.html` located at .vuepress/templates 3. themeIndexFile.devTemplate 4. default devTemplate
1 parent 20e520d commit 6c6225d

File tree

3 files changed

+48
-15
lines changed

3 files changed

+48
-15
lines changed

packages/@vuepress/core/lib/prepare/AppContext.js

+37-15
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ const path = require('path')
88
const createMarkdown = require('./createMarkdown')
99
const loadConfig = require('./loadConfig')
1010
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')
1216

1317
const Page = require('./Page')
1418
const 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

packages/@vuepress/shared-utils/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,5 @@ exports.fs = require('fs-extra')
2828
exports.globby = require('globby')
2929

3030
exports.hash = require('hash-sum')
31+
32+
exports.fallback = require('./lib/fallback')
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const fs = require('fs-extra')
2+
3+
exports.fsExistsFallback = function (files) {
4+
for (const file of files) {
5+
if (fs.existsSync(file)) {
6+
return file
7+
}
8+
}
9+
}

0 commit comments

Comments
 (0)