Skip to content

Commit e5a0ee8

Browse files
authored
feat(cli): support custom npm scripts prefix (#4271)
1 parent 5dccaee commit e5a0ee8

File tree

1 file changed

+34
-9
lines changed

1 file changed

+34
-9
lines changed

src/node/init/init.ts

+34-9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export interface ScaffoldOptions {
2626
theme: ScaffoldThemeType
2727
useTs: boolean
2828
injectNpmScripts: boolean
29+
addNpmScriptsPrefix?: boolean
30+
npmScriptsPrefix?: string
2931
}
3032

3133
const getPackageManger = () => {
@@ -36,7 +38,7 @@ const getPackageManger = () => {
3638
export async function init(root: string | undefined) {
3739
intro(bold(cyan('Welcome to VitePress!')))
3840

39-
const options: ScaffoldOptions = await group(
41+
const options: ScaffoldOptions = (await group(
4042
{
4143
root: async () => {
4244
if (root) return root
@@ -94,15 +96,33 @@ export async function init(root: string | undefined) {
9496
injectNpmScripts: () =>
9597
confirm({
9698
message: 'Add VitePress npm scripts to package.json?'
99+
}),
100+
101+
addNpmScriptsPrefix: ({ results }) => {
102+
if (!results.injectNpmScripts) return Promise.resolve(false)
103+
104+
return confirm({
105+
message: 'Add a prefix for VitePress npm scripts?',
106+
initialValue: true
107+
})
108+
},
109+
110+
npmScriptsPrefix: ({ results }) => {
111+
if (!results.addNpmScriptsPrefix) return Promise.resolve('docs')
112+
113+
return text({
114+
message: 'Prefix for VitePress npm scripts:',
115+
placeholder: 'docs'
97116
})
117+
}
98118
},
99119
{
100120
onCancel: () => {
101121
cancel('Cancelled.')
102122
process.exit(0)
103123
}
104124
}
105-
)
125+
)) as ScaffoldOptions
106126

107127
outro(scaffold(options))
108128
}
@@ -113,7 +133,9 @@ export function scaffold({
113133
description = 'A VitePress Site',
114134
theme,
115135
useTs,
116-
injectNpmScripts
136+
injectNpmScripts,
137+
addNpmScriptsPrefix = true,
138+
npmScriptsPrefix = 'docs'
117139
}: ScaffoldOptions): string {
118140
const resolvedRoot = path.resolve(root)
119141
const templateDir = path.resolve(
@@ -201,15 +223,18 @@ export function scaffold({
201223
const tip = tips.length ? yellow([`\n\nTips:`, ...tips].join('\n- ')) : ``
202224

203225
if (injectNpmScripts) {
204-
const scripts = {
205-
'docs:dev': `vitepress dev${dir}`,
206-
'docs:build': `vitepress build${dir}`,
207-
'docs:preview': `vitepress preview${dir}`
208-
}
226+
const scripts: Record<string, string> = {}
227+
228+
const prefix = addNpmScriptsPrefix ? `${npmScriptsPrefix}:` : ''
229+
230+
scripts[`${prefix}dev`] = `vitepress dev${dir}`
231+
scripts[`${prefix}build`] = `vitepress build${dir}`
232+
scripts[`${prefix}preview`] = `vitepress preview${dir}`
233+
209234
Object.assign(userPkg.scripts || (userPkg.scripts = {}), scripts)
210235
fs.writeFileSync(pkgPath, JSON.stringify(userPkg, null, 2))
211236
return `Done! Now run ${cyan(
212-
`${getPackageManger()} run docs:dev`
237+
`${getPackageManger()} run ${prefix}dev`
213238
)} and start writing.${tip}`
214239
} else {
215240
const pm = getPackageManger()

0 commit comments

Comments
 (0)