@@ -23,6 +23,13 @@ const PluginAPI = require('../plugin-api/index')
23
23
*/
24
24
25
25
module . exports = class AppContext {
26
+ static getInstance ( ...args ) {
27
+ if ( ! AppContext . _instance ) {
28
+ AppContext . _instance = new AppContext ( ...args )
29
+ }
30
+ return AppContext . _instance
31
+ }
32
+
26
33
/**
27
34
* Instantiate the app context with a new API
28
35
*
@@ -45,6 +52,16 @@ module.exports = class AppContext {
45
52
this . writeTemp = writeTemp
46
53
47
54
this . vuepressDir = path . resolve ( sourceDir , '.vuepress' )
55
+ }
56
+
57
+ /**
58
+ * Resolve user config and initialize.
59
+ *
60
+ * @returns {void }
61
+ * @api private
62
+ */
63
+
64
+ resolveConfigAndInitialize ( ) {
48
65
this . siteConfig = loadConfig ( this . vuepressDir )
49
66
if ( isFunction ( this . siteConfig ) ) {
50
67
this . siteConfig = this . siteConfig ( this )
@@ -56,13 +73,12 @@ module.exports = class AppContext {
56
73
this . base = this . siteConfig . base || '/'
57
74
this . themeConfig = this . siteConfig . themeConfig || { }
58
75
59
- const rawOutDir = cliOptions . dest || this . siteConfig . dest
76
+ const rawOutDir = this . cliOptions . dest || this . siteConfig . dest
60
77
this . outDir = rawOutDir
61
78
? require ( 'path' ) . resolve ( this . cwd , rawOutDir )
62
- : require ( 'path' ) . resolve ( sourceDir , '.vuepress/dist' )
63
-
64
- this . pluginAPI = new PluginAPI ( this )
79
+ : require ( 'path' ) . resolve ( this . sourceDir , '.vuepress/dist' )
65
80
this . pages = [ ] // Array<Page>
81
+ this . pluginAPI = new PluginAPI ( this )
66
82
this . ClientComputedMixinConstructor = ClientComputedMixin ( this . getSiteData ( ) )
67
83
}
68
84
@@ -74,6 +90,7 @@ module.exports = class AppContext {
74
90
*/
75
91
76
92
async process ( ) {
93
+ this . resolveConfigAndInitialize ( )
77
94
this . resolveCacheLoaderOptions ( )
78
95
this . normalizeHeadTagUrls ( )
79
96
await this . resolveTheme ( )
0 commit comments