定义远程仓库模板列表以及分支并且对项目名称进行一些校验,然后在获取到用户选择信息后执行gitclone
const remoteList = {1: "https://gitee.com/geeksdidi/kittyui.git",2: 'xxx'}const branch = 'master'const getInputInfo = async () => {const res = await prompts(promptsOptions)if (!res.name || !res.template) returngitClone(`direct:${remoteList[res.template]}#${branch}`, res.name, { clone: true })}getInputInfo()
然后增加一些个性化校验
const promptsOptions = [{type: 'text',//单选name: 'name',message: 'project-name',validate(val) {if (!val) return '模板名称不能为空!';if (fs.existsSync(res.name)) return '项目名已存在'if (val.match(/[^A-Za-z0-9\u4e00-\u9fa5_-]/g)) return '模板名称包含非法字符,请重新输入';return true;}},{type: 'select',//单选name: 'template',message: 'select a framework',choices: [{ title: 'kitty-ui', value: 1 },{ title: 'kitty-demo', value: 2 }]}]
最后看下执行效果

文章插图
clone成功后加上提示告知用户如何使用,然后进行发布
const gitClone = (remote, name, option) => {const loadingOra = ora('正在下载模板...').start();return new Promise((resolve, reject) => {download(remote, name, option, err => {if (err) {loadingOra.fail();console.log("err", chalk.red(err));reject(err);return;};loadingOra.succeed(chalk.green('success'));console.log(`Done. Now run:\r\n`);console.log(chalk.green(`cd ${name}`));console.log(chalk.blue("npm install"));console.log("npm run dev\r\n");resolve();});});};
发布一般来说发布前要进行打包生成commonjs以支持低版本node,这里暂时不进行打包操作,直接执行pnpm publish
即可完成发布(注意,pnpm发布时需要先将代码提交到远程仓库) 。使用随便新建文件夹然后执行
npm init kitty
或者npm create kitty

文章插图
同时文件中出现了我们的模板文件

文章插图
总结本篇文章介绍了如何使用pnpm搭建
Monorepo
环境以及本地开发包的测试 。同时讲解了如何使用command-line-args
,download-git-repo
,prompts
等工具的使用,最终实现了一个交互式的命令行的脚手架create-kitty
。后面会对
create-kitty
进行完善,让它成为一个可以快速搭建vue3组件开发环境的脚手架,如果你对组件库开发感兴趣的话,可以关注我或者我的公众号 web前端进阶,组件库的所有实现细节都在这个里 。如果这篇文章对你有所帮助的话,点个赞吧!源码地址create-kitty
【从0搭建vue3组件库: 如何完整搭建一个前端脚手架?】
推荐阅读
- Hadoop集群简单入门
- Tensorflow Lite从入门到精通
- dubbo的一系列配置与搭建
- 请问去未知暗殿怎么走(复古未知暗殿从哪里进图解)
- 神州风闻录最新侍从强度排行是怎么样的
- vue3中$attrs的变化与inheritAttrs的使用
- iphone13几个摄像头_iphone13四个摄像头吗
- DevOps|从特拉斯辞职风波到研发效能中的不靠谱人干的荒唐事
- iqoo9参数详细_iqoo9参数配置
- 基于tauri+vue3.x多开窗口|Tauri创建多窗体实践