Skip to content

Commit 518c094

Browse files
authored
feat(cli): support custom srcDir (#4270)
1 parent e5a0ee8 commit 518c094

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/node/init/init.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export enum ScaffoldThemeType {
2121

2222
export interface ScaffoldOptions {
2323
root: string
24+
srcDir: string
2425
title?: string
2526
description?: string
2627
theme: ScaffoldThemeType
@@ -53,6 +54,13 @@ export async function init(root: string | undefined) {
5354
})
5455
},
5556

57+
srcDir: async () => {
58+
return text({
59+
message: 'Where should VitePress look for your markdown files?',
60+
initialValue: './'
61+
})
62+
},
63+
5664
title: () =>
5765
text({
5866
message: 'Site title:',
@@ -129,6 +137,7 @@ export async function init(root: string | undefined) {
129137

130138
export function scaffold({
131139
root = './',
140+
srcDir = './',
132141
title = 'My Awesome Project',
133142
description = 'A VitePress Site',
134143
theme,
@@ -138,12 +147,14 @@ export function scaffold({
138147
npmScriptsPrefix = 'docs'
139148
}: ScaffoldOptions): string {
140149
const resolvedRoot = path.resolve(root)
150+
const resolvedSrcDir = path.resolve(root, srcDir)
141151
const templateDir = path.resolve(
142152
path.dirname(fileURLToPath(import.meta.url)),
143153
'../../template'
144154
)
145155

146156
const data = {
157+
srcDir: srcDir === './' ? undefined : JSON.stringify(srcDir), // omit if default
147158
title: JSON.stringify(title),
148159
description: JSON.stringify(description),
149160
useTs,
@@ -162,14 +173,20 @@ export function scaffold({
162173
const renderFile = (file: string) => {
163174
const filePath = path.resolve(templateDir, file)
164175
let targetPath = path.resolve(resolvedRoot, file)
176+
165177
if (useMjs && file === '.vitepress/config.js') {
166178
targetPath = targetPath.replace(/\.js$/, '.mjs')
167179
}
168180
if (useTs) {
169181
targetPath = targetPath.replace(/\.(m?)js$/, '.$1ts')
170182
}
171-
const src = fs.readFileSync(filePath, 'utf-8')
172-
const compiled = template(src)(data)
183+
if (file.endsWith('.md')) {
184+
targetPath = path.resolve(resolvedSrcDir, file)
185+
}
186+
187+
const content = fs.readFileSync(filePath, 'utf-8')
188+
const compiled = template(content)(data)
189+
173190
fs.outputFileSync(targetPath, compiled)
174191
}
175192

template/.vitepress/config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { defineConfig } from 'vitepress'
22

33
// https://vitepress.dev/reference/site-config
4-
export default defineConfig({
4+
export default defineConfig({<% if (srcDir) { %>
5+
srcDir: <%= srcDir %>,
6+
<% } %>
57
title: <%= title %>,
68
description: <%= description %><% if (defaultTheme) { %>,
79
themeConfig: {

0 commit comments

Comments
 (0)