vite不能选配方案?vite-creater强势来袭!

这篇具有很好参考价值的文章主要介绍了vite不能选配方案?vite-creater强势来袭!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我正在参加「掘金·启航计划」

项目背景

vite出现之后,迅速带走了一大波webpack的使用者,即使是对打包工具不熟悉的小白,也能很快感受到两者的区别——vite快的多!

vite官方文档第一句也是讲述其名字的由来 Vite (法语意为 "快速的") ,其logo也与其名字一样,处处都透露着一个字,那就是快!

但是习惯了vue-cli的同学(我),对于一个不能保存模板策略的工具,是无法忍受的,它居然每次都需要我选择模板、选择用js还是ts,这是让人无法忍受的。当然,vite官方还提供了社区维护的模板 即 awesome-vite ,同学可点击链接感受一下这些模板,不能说我们小白用不到吧,可以说是完全不认识。

为此,"好东西" vite-creater 诞生了 github源码 👉 点击走你

什么是vite-creater?

vite-creater是vite的一个前置的自动化cli程序,它可以按照用户自定义的流程全自动的创建项目,并安装依赖,当vite-creater提示完成时,你就可以直接npm run了!它调用的是npm create vite,除了选择框架外,其余的一切操作都不需要你动手,你只需预设一个策略即可!

我需要vite-creater吗?

如果你是一个熟练的vue玩家,我猜你可能需要它,它可以像vue-cli一样,储存一个自己的选配策略,它甚至支持你包含自定义的第三方库。

如果你还不了解vite,或者你希望使用vite原汁原味的功能,你可能不需要vite-creater,不过欢迎你使用,vite-creater会随着vite的更新而更新!

使用vite-creater

安装vite-creater

npm i vite-creater -g

快速开始

vcreater init <yourProjectName>

vite-creater内置了一个贴心的选配策略:

这也是目前应用最多的,开发起来最容易的一套策略,在此直接回车,你会直接一键生成项目

如果你不喜欢,或者你需要更多的东西,可以点击 "点击进入自定义流程"

自定义选配

vite-creater会问询一系列常用套件,包括:css预处理器、使用js还是ts、是否使用vue-router、使用vuex还是pinia

(vite-creater目前版本只支持 问询vue常用包,如需其他框架,可以全选择no,然后在自定义第三方包中添加你的框架需要的包即可)

最后,vite-creater会问你,是否需要其他的第三方包,比如我们需要使用 超好用的大屏自适应工具 vue-autofit ,我们就输入vue-autofit

最后,可以选择将此选配方案保存,你可以选择给它取一个名字,当然也可以不取,因为vite-creater会在预设方案列表中展示所有依赖名称和使用的语言。

如果vite-creater要求你选择框架,你可以根据自己的需要选择你的框架:

当选择完框架后,即可快速完成项目创建了!并且已经下载了你的自定义包。

使用保存的选配方案

当你创建过一个方案并选择了保存后,工具会在下次使用时向你展示你保存的选配方案,直接选择即可一键生成项目,不用再重复选配过程。

vite-creater是怎么实现的?

vite-creater是node编写的。

调用Node编写的cli程序,必须在node环境下才可以运行,因为node的cli实际上是由node代理执行的,即V8引擎去解析和执行的,当我们全局安装了一个node cli程序时,node会自动把其命令加载到环境变量中,当我们的JS代码被执行时,是node在与操作系统交互。所以,我们不需要了解它具体的运行原理,我们只需要知道JS怎么写就可以了。

开发所需的库

"commander": "^10.0.1" 可以执行dos命令

"inquirer": "^9.2.0" 交互式输出工具,提供问询式命令行交互会用到

"configstore": "^6.0.0" 本地存储,相当于是cookie或者localStorage,用来储存用户保存的选配

开发步骤

使用npm 初始化项目
npm init

需要输入项目基本信息,此步骤会初始化一个标准的Npm包,并生成一个package.json ,

注意如果希望发布到npm,应该先在npm官网查看是否有相同或相似的包名,有的话是发布不了的,需要取一个标新立异的包名,或者就需要带上@userName/的前缀

使用commander库初始化命令
import { program } from 'commander';
program
  .version('1.0.0')
  .description(`vite-creater是一款用于快速创建vite项目的脚手架工具`);

program
  .command('init <projectName>')
  .description('使用vite-creater创建项目')
  .option('-p, --projectName <string>', 'project name')
  .action(async (initProjectName) => {
    await askForOptions(initProjectName) //这里调用我们的自定义问询函数
  });
program.parse(process.argv);

在node开发的cli中,可以使用async/await来阻塞程序,以等待步骤完成或者用户输入。

使用inquirer创建交互式问询输出
import inquirer from 'inquirer';

let preSetRules = [
    {
      name: 'selectRule',
      type: 'list',
      message: '选择一个预设规则,或者进入自定义流程',
      choices: preSetRulesList, //这是一个数组,仅可包含字符串,如["item1","item2"]
    }
  ]
 let isPreSetRules = await inquirer.prompt(preSetRules)

当如上代码被执行时,将会输出一个可以通过上下箭头键选择的列表(list)

使用configstore 储存用户的选配方案
import Configstore from 'configstore';
const conf = new Configstore('vite-creater');
conf.set("customRulesList", customRulesList); //新建或修改 参数:键名,数据
let customRulesList = conf.get('customRulesList');

其中customRulesList 可以是数组或者对象,当然也可以是字符串等,你可以把configstore 完全当作cookie来使用。

使用child_process创建子进程

这是一个node内置的库,允许开发者创建一个子进程,并与子进程通讯

import { exec } from 'child_process';
function execCreateTs(command) {
  console.log('exec:', command);
  return new Promise((resolve, reject) => {
    const child = exec(command, (err, stdout, stderr) => {
      if (err) {
        console.log('err::: ', err);
        reject(err)
      }
    })
    child.stdout.on('data', async data => { //监听子进程的输出
      if (data.includes('Package name')) {
        process.stdout.write('\x1b[32m' + data + '\x1b[0m');
        child.stdin.write('\n');
      }
      if (data.includes('Vue')) {
        process.stdout.write('\x1b[2J\x1b[0f');
        process.stdout.write('\x1b[32m' + data + '\x1b[0m');
        clearAnimation()
        selectFramework(child)
      }
      if (data.includes('TypeScript')) {
        process.stdout.write('\x1b[32m' + data + '\x1b[0m');
        process.stdout.write('\x1b[2J\x1b[0f');
        child.stdin.write('\n');
        resolve(child.stdout)
      }
      if (data.includes('is not empty')) {
        // 退出进程
        console.log('\n\x1b[31m×\x1b[0m 目录已存在');
        process.exit();
      }
    })
  })
}

上述代码由vite-creater创建ts项目为例,参数command即可以是任何dos命令。下面的if来查询子进程的输出中包含的字符,以此来确定子进程进行到哪一步了(我不知道这么做是不是符合规范的,不过开发的时候我想到了这个办法。)

细心的同学注意到了selectFramework()方法,这个方法是在子进程中出现了Vue字符时,我们判定vite进入了框架选择步骤,于是我们将子进程的输出展示到主进程中,也就是上面提到的框架选择页面

selectFramework方法代码如下:

async function waitUserPresskey() {
  // 返回一个promise对象
  return await new Promise((resolve, reject) => {
    process.stdin.setRawMode(true);
    process.stdin.resume();
    process.stdin.on('data', (key) => {
      key = key.toString('ascii'); //需要转为ascii码
      resolve(key)
    });
  });
}
async function selectFramework(child) {
  let input = await waitUserPresskey();
  // 如果按下ctrl+c,退出进程
  if (input === '\u0003') {
    process.exit();
  }
  child.stdin.write(input); // 向子进程转发命令
}

当调用它时,程序会等待一个用户输入,然后直接转发到子进程中,当子进程再次输出其他信息时,又会回到我们上面的监听,于是,只要用户还没有选定框架,vite会一直处在框架选择页面,也就是还包含Vue字符,所以会再次进入selectFramework函数,这样就完成了一个递归问询,直到用户选择了框架。

全自动化流程实现

当完成上述步骤之后,我们已经可以看到vite+vue的项目已经创建完成了,这时就已经完成了vite官方工具所做的,一般来说,我们需要进入该文件夹,然后执行npm i ,然后安装我们需要的包 npm i ....

根据上面的学习,我们理所当然的可以将这一步收纳进自动化的范畴,只需执行两条简单的dos命令即可。

    await execNpmInstall('npm i')
    await execNpmInstall(installCommand)
function execNpmInstall(command) {
  console.log('exec:', command);
  return new Promise((resolve, reject) => {
    const child = exec(command, (err, stdout, stderr) => {
      if (err) {
        reject(err)
      }
    })
    child.stdout.on('data', async data => {
      // 当npm i 完成时
      if (data.includes('packages in')) {
        console.log('\n', data);
        resolve(child.stdout)
      }
    })
  })
}

如果我们需要安装 之前用户储存的第三方库,只需要使用使用conf.get('xxx');去获取数据,然后传入该函数即可。

完成

上面简述了vite-creater的开发过程,至此,我们就可以整理所有的功能,打包发布了,在本地登录自己的npm账号后,使用npm publish命令即可发布。

查看 vite-creater 的 npm主页

本项目已在 github开源 github源码 👉 点击走你

结语

懦弱之举,我决不姑息!文章来源地址https://www.toymoban.com/news/detail-428023.html

到了这里,关于vite不能选配方案?vite-creater强势来袭!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Feign实战来袭:工程中配置断路器Hystrix报错NoClassDefFoundError:HystrixCommandAspect解决方案

    在Spring Cloud Feign工程中配置断路器Hystrix的时候,pom.xml文件已经加入Hystrix相关的jar: Application.java: 可以看出来是找不到HystrixCommandAspec.java这个类,于是在github上找到这个源文件: https://github.com/dmgcodevil/Hystrix/blob/958ec5d7b4bb967be077a4c2bbcdc71e7a7f5248/hystrix-contrib/hystrix-javanica/src/mai

    2024年02月16日
    浏览(48)
  • qt creater11 翻译国际化教程教程:

    先出效果图。 闲聊几句:qt这个翻译很方便,能直接导出项目里所有文字。 具体步骤如下: 在Qt中,我们可以使用QTranslator类来实现多语言切换。以下是一般步骤: 1. 在你的源代码中,所有需要翻译的字符串都需要使用 `tr()` 函数包裹,例如 `tr(\\\"你好\\\")`。 2. 在项目文件 (.pr

    2024年02月10日
    浏览(37)
  • cocos游戏引擎--cocos creater2.4.10

    新建项目 打开其他项目 在 Dashboard 中,打开 新建项目 选项卡,选中 Hello World 项目模板。js   资源管理器 Scene 场景编辑器 Node Tree 层级管理器 属性检查器(Properties) 控件库 控制台(Console) 最左边选择预览窗口的比例大小,来模拟在不同移动设备上的显示效果 Rotate 按钮决

    2024年01月24日
    浏览(57)
  • 树莓派不能上网解决方案

    判断自己的树莓派能不能上网,用这条命令试试 出现了以上错误,说明树莓派不能上网 解决思路: 要进行一步步的排查,一般出现网络问题的排查思路如下: 基本的排错步骤(从上往下) : ping通说明tcp协议栈没有问题 ping的通说明网卡没有问题 ping的通说明包可以到达路由

    2024年02月07日
    浏览(45)
  • Docker容器内不能联网的解决方案

    参考资料: Docker容器内不能联网的6种解决方案_腾讯数据架构师的博客-CSDN博客_docker容器网络不通 Docker容器内不能联网的6种解决方案

    2024年02月11日
    浏览(56)
  • Elasticsearch解决不能修改索引、字段问题解决方案

    问题1: 由于es索引不能删除,不能修改,在不影响原数据的情况下,并且生产服务不停机的情况下,怎么修改索引,并保留原索引内的数据? 基于kibanna的dev Tools执行参数,淘汰postman,kibanna会有提示 1、原来索引起别名job 2、重建索引,数据迁移,默认是同步执行大数据量太

    2024年02月12日
    浏览(45)
  • Git上传文件不能超过100M 解决方案

    上传项目到Git上,当某个文件大小超过100M时,就会上传失败,因为默认的限制了上传文件大小 不能超过100M 。如果需要上传超过100M的文件,就需要我们自己去修改配置。 首先,打开 终端 ,进入项目所在的文件夹; 输入命令: 此命令的目的是设置最大文件上限改为 500M (5

    2024年02月11日
    浏览(54)
  • 谷歌翻译不能用的解决方案 (win和mac方案 230420更新...)

    自 2022 年 9 月 28 日起,谷歌翻译退出了中国市场,这也导致划词翻译里的谷歌翻译不能正常使用了。 这个功能是程序员高效看外语文档的依仗, 我会把最新的解决方案放在这里, 基本上只要我能用大家也能用。 之前提供的方法大部分已经失效,已经删除并更新了最新亲测可用

    2023年04月26日
    浏览(39)
  • vue3+vite2动态绑定图片优雅解决方案

    优雅解决方案在最下面,小伙伴们儿可以直接前往 😊 在vue3+vite2项目中,我们有时候想要动态绑定资源,比如像下面的代码这样: 实际效果是这样: 我们注意到,控制台的报错信息 GET http://127.0.0.1:5173/1.jpg 404 (Not Found) GET :表示向服务器请求资源的方式。 http://127.0.0.1:5173

    2024年02月11日
    浏览(69)
  • Qt安装教程以及QT Creater,同时使用清华源镜像,解决安装过慢的问题

    下载地址链接 https://download.qt.io/    根据你自己操作系统选择对应的下载文件  在你想把QT安装的地址下,创建一个文件夹,把QT安装包放进去 在此处输入CMD,回车进入命令指示符  输入命令  此处的installer.exe是你安装包的名字,鄙人安装包名字为qt-unified-windows-x64-4.5.2-onli

    2024年02月06日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包