UNPKG

@eljs/create-plugin-npm-node

Version:
80 lines (69 loc) 1.99 kB
/* 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', }) } }) }