命令行指引的尝试

效果

在这里插入图片描述

步骤

首先初始化一个空的项目,然后安装一些依赖

npm init -y
npm install inquirer execa chalk ora

至于这些依赖是干嘛的,如下图所示:
在这里插入图片描述

然后再 package.json 中补充一个 bin

在这里插入图片描述

然后再根目录下新建一个 index.js , 其中的内容如下

#!/usr/bin/env node
import inquirer from 'inquirer'
import chalk from 'chalk'
import ora from 'ora'
import { createProject } from './utils/create.js'

console.log(chalk.cyanBright('\n✨ Welcome to create-vueNew CLI'))

const { projectName, template } = await inquirer.prompt([
  {
    type: 'input',
    name: 'projectName',
    message: 'Project name:',
    default: 'vueNew-app'
  },
  {
    type: 'list',
    name: 'template',
    message: 'Select a template:',
    choices: ['vue', 'vue-ts']
  }
])

await createProject(projectName, template)

createProject 这个工具的内容如下

import { fileURLToPath } from 'url'
import { dirname } from 'path'
import path from 'path' // 确保引入了 path 模块
import ora from 'ora'
import ncp from 'ncp'

const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)

export async function createProject(name, template) {
  const spinner = ora(`Copying ${template} template...`).start()

  const templatePath = path.join(__dirname, `../templates/${template}`)
  const targetPath = path.resolve(process.cwd(), name)

  try {
    // 使用 ncp 来复制模板文件夹
    ncp.ncp(templatePath, targetPath, (err) => {
      if (err) {
        spinner.fail('Failed to copy template')
        console.error(err)
        return
      }

      spinner.succeed('Project created!')
      console.log(`\nNext steps:`)
      console.log(`  cd ${name}`)
      console.log(`  npm install`)
      console.log(`  npm run dev`)
    })
  } catch (err) {
    spinner.fail('Failed to copy template')
    console.error(err)
  }
}

然后再模拟几个 vue 的模板 ,待会儿第二步克隆的时候就是复制这里的文件

在这里插入图片描述

本地的 CLI 工具链接到全局环境

在项目目录下运行了 npm link
npm link 会把本地的 CLI 工具链接到全局环境,这样你就可以在任何地方通过命令行运行 create-vueNew

测试

在随便一个文件夹下执行 create-vueNew 就会开始执行命令了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值