feat(cli): support custom npm scripts prefix (#4271)

pull/4571/head
Estéban 7 months ago committed by GitHub
parent 5dccaeef05
commit e5a0ee8161
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -26,6 +26,8 @@ export interface ScaffoldOptions {
theme: ScaffoldThemeType theme: ScaffoldThemeType
useTs: boolean useTs: boolean
injectNpmScripts: boolean injectNpmScripts: boolean
addNpmScriptsPrefix?: boolean
npmScriptsPrefix?: string
} }
const getPackageManger = () => { const getPackageManger = () => {
@ -36,7 +38,7 @@ const getPackageManger = () => {
export async function init(root: string | undefined) { export async function init(root: string | undefined) {
intro(bold(cyan('Welcome to VitePress!'))) intro(bold(cyan('Welcome to VitePress!')))
const options: ScaffoldOptions = await group( const options: ScaffoldOptions = (await group(
{ {
root: async () => { root: async () => {
if (root) return root if (root) return root
@ -94,7 +96,25 @@ export async function init(root: string | undefined) {
injectNpmScripts: () => injectNpmScripts: () =>
confirm({ confirm({
message: 'Add VitePress npm scripts to package.json?' message: 'Add VitePress npm scripts to package.json?'
}),
addNpmScriptsPrefix: ({ results }) => {
if (!results.injectNpmScripts) return Promise.resolve(false)
return confirm({
message: 'Add a prefix for VitePress npm scripts?',
initialValue: true
})
},
npmScriptsPrefix: ({ results }) => {
if (!results.addNpmScriptsPrefix) return Promise.resolve('docs')
return text({
message: 'Prefix for VitePress npm scripts:',
placeholder: 'docs'
}) })
}
}, },
{ {
onCancel: () => { onCancel: () => {
@ -102,7 +122,7 @@ export async function init(root: string | undefined) {
process.exit(0) process.exit(0)
} }
} }
) )) as ScaffoldOptions
outro(scaffold(options)) outro(scaffold(options))
} }
@ -113,7 +133,9 @@ export function scaffold({
description = 'A VitePress Site', description = 'A VitePress Site',
theme, theme,
useTs, useTs,
injectNpmScripts injectNpmScripts,
addNpmScriptsPrefix = true,
npmScriptsPrefix = 'docs'
}: ScaffoldOptions): string { }: ScaffoldOptions): string {
const resolvedRoot = path.resolve(root) const resolvedRoot = path.resolve(root)
const templateDir = path.resolve( const templateDir = path.resolve(
@ -201,15 +223,18 @@ export function scaffold({
const tip = tips.length ? yellow([`\n\nTips:`, ...tips].join('\n- ')) : `` const tip = tips.length ? yellow([`\n\nTips:`, ...tips].join('\n- ')) : ``
if (injectNpmScripts) { if (injectNpmScripts) {
const scripts = { const scripts: Record<string, string> = {}
'docs:dev': `vitepress dev${dir}`,
'docs:build': `vitepress build${dir}`, const prefix = addNpmScriptsPrefix ? `${npmScriptsPrefix}:` : ''
'docs:preview': `vitepress preview${dir}`
} scripts[`${prefix}dev`] = `vitepress dev${dir}`
scripts[`${prefix}build`] = `vitepress build${dir}`
scripts[`${prefix}preview`] = `vitepress preview${dir}`
Object.assign(userPkg.scripts || (userPkg.scripts = {}), scripts) Object.assign(userPkg.scripts || (userPkg.scripts = {}), scripts)
fs.writeFileSync(pkgPath, JSON.stringify(userPkg, null, 2)) fs.writeFileSync(pkgPath, JSON.stringify(userPkg, null, 2))
return `Done! Now run ${cyan( return `Done! Now run ${cyan(
`${getPackageManger()} run docs:dev` `${getPackageManger()} run ${prefix}dev`
)} and start writing.${tip}` )} and start writing.${tip}`
} else { } else {
const pm = getPackageManger() const pm = getPackageManger()

Loading…
Cancel
Save