@eljs/create-plugin-npm-node
Version:
Node Common template powered by @eljs/create.
80 lines (69 loc) • 1.99 kB
text/typescript
/* eslint-disable @typescript-eslint/naming-convention */
import { type Api } from '@eljs/create'
import type { PackageJson } from '@eljs/utils'
export default async (api: Api) => {
api.modifyAppData(memo => {
memo.scene = 'node'
return memo
})
api.addQuestions(() => {
return [
{
name: 'cli',
type: (_, values) =>
values.repositoryType !== 'monorepo' ? 'confirm' : null,
message: '是否提供命令行',
},
{
name: 'cliType',
type: (_, values) =>
values.repositoryType !== 'monorepo' && values.cli ? 'select' : null,
message: '命令行类型',
choices: [
{ title: '单命令', value: 'single' },
{ title: '多命令', value: 'multiple' },
],
},
]
})
api.modifyPrompts(memo => {
memo.mode = 'cjs'
return memo
})
api.onStart(() => {
api.extendPackage(pkg => {
const { cli, cliType, unscopedName } = api.prompts
const { dependencies = {}, devDependencies = {} } = pkg
dependencies['@eljs/utils'] = `^${api.appData.cliVersion}`
Reflect.deleteProperty(devDependencies, '@eljs/utils')
const extend: PackageJson = {}
if (cli) {
extend.files = ['bin/*']
extend.bin = {
[unscopedName]: `bin/${unscopedName}.js`,
}
dependencies['commander'] = '^13.1.0'
dependencies['update-notifier'] = '^5.1.0'
devDependencies['@types/update-notifier'] = '^6.0.8'
}
if (cliType === 'multiple') {
dependencies['leven'] = '^3.1.0'
}
return {
...extend,
dependencies,
devDependencies,
}
})
})
api.onGenerateFiles(async ({ prompts }) => {
const { cli, cliType } = prompts
if (cli) {
await api.render('./templates', {
...prompts,
singleCommand: cliType === 'single',
multipleCommand: cliType === 'multiple',
})
}
})
}