当前位置: 首页 > news >正文

命令行指引的尝试

效果

在这里插入图片描述

步骤

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

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 就会开始执行命令了

http://www.xdnf.cn/news/130465.html

相关文章:

  • 【Linux学习笔记】进程的fork创建 exit终止 wait等待
  • 如何让 HTML 文件嵌入另一个 HTML 文件:详解与实践
  • Java面试高频问题(26-28)
  • 使用浏览器的Clipboard API实现前端复制copy功能
  • 基准指数选股策略思路
  • 风光储能+智能调度,这才是企业未来能源管理的最优解
  • Linux进程学习【基本认知】
  • vscode切换Python环境
  • C++中的浅拷贝和深拷贝
  • 【现代深度学习技术】循环神经网络06:循环神经网络的简洁实现
  • 头歌实训之索引
  • MySQL 库的操作 -- 增删改查,备份和恢复,系统编码
  • 深度解析之算法之分治(快排)
  • Python-36:饭馆菜品选择问题
  • 使用jsrsasign进行RSA加密解密
  • Vue 2 和 Vue 3 的详细对比,从 生命周期、API、响应式系统、函数调用 等多角度展开,最后附表格总结
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第三模块·面向对象深度进化 —— 第十二章 接口:比C函数指针更强大的契约
  • 数学基础 -- 欧拉公式的推导过程学习
  • 精准落地设计,现代项目管理中的深度实践
  • FeignClient用法笔记
  • 构建企业官方网站有哪些必备因素?
  • YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】
  • ecovadis认证需要提供哪些文件?ecovadis认证优势是什么?
  • c语言 write函数
  • Java线程池那点事(面试高频)
  • ASR VAD TTS
  • VLA 论文精读(十八)π0.5: a Vision-Language-Action Model with Open-World Generalization
  • JavaFX 第三篇 HostServices和Platform
  • 交通运输行业综合智慧监管平台:商贸物流的安全与效率引擎
  • Windows下QT打包后程序运行后弹出CMD命令窗口的问题解决方法