July 16
3min

发布一个npm包

NPM

@llds/template

效果

用处

快速创建自己构建的项目模板。

实现

预期效果

终端输入npx @llds/template,显示模板列表,选择模板,输入项目名称,即可创建项目。

依赖

  • @inquirer/prompts:命令行交互
  • simple-git:git操作
  • boxen:美化终端输出

核心代码 (index.js)

#!/usr/bin/env node
import path from 'node:path'
import { input, select } from '@inquirer/prompts'
import boxen from 'boxen'
import ora from 'ora'
import simpleGit from 'simple-git'

const git = simpleGit()

const templateChoices = [
  {
    name: 'uonvue-template',
    value: '[email protected]:llds66/uonvue-template.git',
  },
  {
    name: 'hono-cf-template',
    value: '[email protected]:llds66/hono-cf-template.git',
  },
]
async function run() {
  const repoUrl = await select({
    message: ' 请选择项目模板:',
    choices: templateChoices,
  })

  const projectName = await input({
    message: ' 请输入项目名称:',
    default: 'my-app',
  })
  if (!projectName) {
    console.error('项目名称不能为空')
    return
  }
  const targetDir = path.resolve(process.cwd(), projectName)
  const spinner = ora('正在拉取...').start()

  try {
    await git.clone(repoUrl, targetDir, ['--depth', '1'])
    spinner.succeed(' 模板克隆成功!')
    console.log(`\n✅ 项目已创建 ${projectName}`)
    console.log(`\n✅ 项目位置 ${targetDir}`)
    console.log(`\n`)
    console.log(
      boxen(`\n  cd ${projectName} \n  pnpm i`, {
        title: '下一步',
        titleAlignment: 'center',
        width: 25,
        borderStyle: 'round',
        borderColor: 'green',
      }),
    )
  }
  catch (error) {
    spinner.fail('克隆模板失败')
    console.error('❌ 错误:', error.message || error)
  }
}

run()

发布

发布到NPM npm publish