大家好,我是 Kagol,个人公众号:前端开源星球。
一个月前,日日自新写了一篇介绍 Create Vite App 开源项目的文章:
基于vite 4.x 快速搭建开箱即用,高度可定制化模版脚手架
Create Vite App 是基于 esbuild + commander + ejs 模板渲染进行开发脚手架,用于创建 vite4.x typescript5.x vite 开箱即用模板,致力于打造不同框架,多种生态,开箱即用的脚手架。
支持各种插件以及不同组件库的可拔插式选择,来帮助你快速从0搭建web应用的脚手架。
当时还不支持 OpenTiny,现已完美支持 OpenTiny 组件库?
让我们来体验下吧!
根据 Create Vite App 的官网文档,只需要一行代码即可创建一个 Vite + Vue3 + TypeScript 工程,并可以配置丰富的功能,比如 Vue 路由、Pinia 状态管理工具、代码规范工具 ESLint / Prettier、UI 组件库、Vite 插件等。
npx create-vite-template@latest
从上图可以看到 UI 组件库列表中的第二个就是 TinyVue
选择想要的配置之后,会自动安装依赖,成功之后即可通过 pnpm dev
本地启动你的项目啦!
这是一个空项目,但已经具备了开发一个业务所需要的基础功能:
你可以基于这个基础项目搭建自己的业务。
可能还差一个单元测试?
欢迎大家在评论区留言,你觉得 Create Vite App 还差什么。
Create Vite App 是基于 Vite 的,但在其基础上增加了很多业务开发中常用的工程化工具,不需要自己手动引入,可以节省搭建项目的时间。
Vite 创建出来的项目只有一个 Vite + Vue3 + TypeScript,没有其他功能,需要自己手动安装和配置。
TinyCLI 是一个覆盖前端开发全流程的 CLI 工具,支持更加丰富的特性:
比如以下命令可以创建一个基于 Vite + Vue3 + TypeScript + OpenTiny 的中后台系统。
tiny init vue-pro
包含登录鉴权、路由导航、布局切换、国际化、个性化主题、Mock 数据、响应式、状态管理等丰富的功能。
登录页:
看板页:
工作台:
相比 Create Vite App,支持更加丰富的功能,除了能创建中后台系统之外,还可以通过套件和插件为你的项目支持更丰富的功能。
详细可以了解 TinyCLI 官网:
http://opentiny.design/tiny-cli/
联系我们:
OpenTiny
往期文章推荐
依赖环境依赖于Node环境,需要在Node环境上跑,在安装Node的时候,会自动安装npm包管理工具,用于管理Node的依赖环境NodeJs安装官网:http://nodejs.cn/下载确保版本大于8.0安装双击安装包点击下一步点击我同意,然后点击下一步选择安装位置,然后点击下一步直接点击下一步,默认会全部安装Node.jsruntime:Node.js运行时环境npmpackagemanager:node包管理器(也就是上面依赖环境提到的npm)Onlinedocumentationshortcuts:在线文档AddtoPATH:添加到环境变量PATH直接点击下一步点击安装等待安装完成点finish到此安装完成查看版本在cmd中通过node-v查看版本作者:彼岸舞时间:2021\06\07内容关于:VUE本文属于作者原创,未经允许,禁止转发
文章作者:Tyan 博客:noahsnail.com|CSDN|简书1.Description2.Solution解析:这道题还有优化的空间,这样写主要是逻辑清晰。1.把元素(多个字母)、数字(多个数字字符)、左右括号拆分开;2.计算元素的个数,如果元素后没有数字,则添加数字1作为元素个数;当碰到右括号时,查找其对应的左括号,并将其中的元素个数乘以括号后的数字,其后没数字,则默认乘以1;3.统计元素个数,相同元素个数相加;4.排序字典,按元素字母排序;5.构造返回结果字符串。Version1classSolution: defcountOfAtoms(self,formula): stat={} stack=[] parts=[] #Splitstringbyalpha,number,'(',')' forindex,chinenumerate(formula): ifch.isupper(): parts.append(ch) elifch.islower(): parts[-1]+=ch elifch.isdigit(): ifformul
参考链接:捕获基类和派生类为异常一、异常的限制 当覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常。这个限制很有用,因为这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工作(当然,这是面向对象的基本概念),异常也不例外。 下面例子演示了这种(在编译时)施加在异常上面的限制: classBaseballExceptionextendsException{}classFoulextendsBaseballException{}classStrikeextendsBaseballException{}abstractclassInning{ publicInning()throwsBaseballException{ } publicvoidevent()throwsBaseballException{ } publicabstractvoidatBat()throwsStrike,Foul; publicvoidwalk(){ } }classStormExceptionextendsException{}classRainedOu
实验的时候,我们通常需要运行多个版本的pg实例。 最近试用了下pgenv发现这个虚拟环境并不是很好用,pg自身的多实例更好用,具体方法如下:这里以我们编译安装好的pgsql11.5为例(其它rpm安装的pg也可以的)。我的pgsql原始安装路径在/usr/local/pgsql/目录下切换到postgres账户下su-postgres创建相关目录cd /usr/local/pgsql/ mkdir pg1 mkdig pg2复制初始化initdb -D usr/local/pgsql/pg1/ initdb -D usr/local/pgsql/pg2/复制启动pg:pg_ctl -D /usr/local/pgsql/pg1/ -o "-p 5433" -l /usr/local/pgsql/pg1/pg.log start pg_ctl -D /usr/local/pgsql/pg2/ -o "-p 5434" -l /usr/local/pgsql/pg2/pg.log start复制登录到PG./bin/psql -p 5433 ./b
背景:最近的一个项目需要用到招标,临时加了给我们的系统增加了一个性能需求,多少呢?一秒钟300次NTP(不知道ntp的同学可以百度一下),平均3ms一次啊,没测试过,心里没有底。(⊙o⊙)…情境介绍:系统是一个时间服务器系统,客户端就是window系统,或者其他的一些服务器,来向时间服务器同步时间。默认的window会向这个time.winodows.com进行时间同步,当然你也可以换成其他时间同步服务器。划重点了:服务端NTP接口采用的是netty框架写的一个接口,netty想必大家都了解的吧,nio通信,性能超好的。测试代码是使用Executors.newFixedThreadPool写的客户端,10个线程数发送ntp包第一次测试数据库连连接池最大设置为40个,测试结果俩一秒钟28次,是的你没有看错,连十分之一都没有,怎么这么差劲啊达不到预期啊,不行啊,这不就达不到要求的了吗,得改啊,哪里改啊,怎么改啊?回到代码中去,顺藤摸瓜找到具体业务类,就是继承SimpleChannelInboundHandler的类,从头到尾打量了一下业务代码,发现业务主要是构造返回消息,记录日志。构造返回
HTML5学堂:必须要说,这是一碗心灵的毒药,我不想灌什么鸡汤,因为那些东西只能够暂时性的蒙蔽双眼。如果你想要了解真相,不怕被伤害,那请往下看,跟我一起干了这碗心灵毒药。HTML5行业当前如何?HTML5行业如何?利利一直都是喜欢以数据作为基本的依据,因此我们看看几组数据~~~就业需求量比对相关说明:2012~2013年期间,在就业需求高峰期时,需求量能够达到800左右,在低谷期,只有300~600不等。而在2014年的第四季度,(北京)有了飞速的增长;在飞速增长之后开始回落(2015年),而在今年,回归了一种较稳定状态。图注:2014年09月~2014年12月期间,由于自身工作比较忙,因此就没有跟进就业需求量的变化,这也就导致了数据的部分缺失。数据采集来源:智联招聘网;数据采集人:HTML5学堂-利利、堡堡、国荣采集时间:每周周三下午17:00;搜索关键词:"WEB";搜索类型:根据"职位"进行搜索,只选择当天发布的职位,进行统计数量;除过年前后以及节假日没有采集数据之外,其他所有周均进行了数据采集,并根据月度计算平均值。入职薪资比对相关说明:
大家好,又见面了,我是你们的朋友全栈君。 1、AngleAngle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。最低运行环境要求不详。项目地址:http://code.google.com/p/angle/ 2、Rokonrokon是一款Android 2D游戏引擎,基于OpenGLES技术开发,物理引擎为Box2D,因此能够实现一些较为复杂的物理效果,该项目最新版本为2.0.3 (09/07/10)。总体来说,此引擎最大的优点在于其开发文档相当之完备,并且项目作者对反馈Bug的修正非常之神速,所以该框架的使用在目前也最为 广泛,有人干脆将它称为Cocos2d-iPhone引擎的Android版(业务逻辑和编码风格上也确实很像)。附带一提,国内某个需要注册会员才能下 载的Android游戏框架衍生于此框架,所以大家也不要刻板的认为收费便一定是好的,免费就一定不好。最低运行环境要求为Android 1.5
大家好,又见面了,我是你们的朋友全栈君。 在本文中我们将主要研究目前主要的BaaS平台的功能,以及Google,Facebook,Apple等互联网巨头在BaaS领域的动作。同时我们也会关注国内一些主流BaaS平台的发展以及国内互联网巨头如百度,华为等在BaaS领域的投入发展。1.国外主流的BaaS平台 在BaaS领域,有几件事情值得关注:2013年4月,Facebook收购Parse; 2013年12月,Paypal收购stackmob; 2014年6月,苹果在一年一度的WWDC上发布了CloudKit; 2014年10月,Google收购Firebase。复制Parse,Firebase是BaaS领域里先驱和领头羊之一。初次之外,Kinvey,StackMob,Apigee,Appcelerator等也非常值得关注。我们将对这些主流BaaS平台的功能,架构特点进行分析,从而可以为我们设计自己的BaaS提供经验。我们对每个平台的分析按以下方式组织,介绍->架构->界面->功能->总结。然后我们在汇总一个表格对各平台进行对比分析。1.1Kinvey第一个介绍Ki
准备工具 昆仑固件:Win7系统、UltraISO、系统镜像iso、u盘。 pmon固件:linux系统、系统镜像iso、u盘。 制作u盘启动 昆仑固件: 利用UltraISO打开iso,选择images下的iso,右击“提取到”,选择目录。将boot.iso提取出来,后面要用。 插入u盘,利用UltraISO打开iso,选择“启动”,“写入硬盘镜像”,写入方式选择“USB-HDD+v2”,点击“写入”。 完成后将系统iso镜像文件,放入u盘即可。 Pmon固件: 将u盘分为两个区,sdb1为1G,sdb2为5G,分别格式化为ext3。 挂载iso:mount-oloopiSoft-Server-OS-5.0-mips64el-201709011359.iso/media,将boot文件夹复制到sdb1中,将iso和iso下的images/install.img复制到sdb2下: mount/dev/sdb2/mntmkdir/mnt/imagescp/media/images/install.img/mnt/imagescpiSoft-Server
没被使用的ID谁都有可能会用到; 而当匹配后,自己的ID还可以和其他人的换时, 即并不能确定两个ID和两个名字的关系时,这两个人的ID均未知。 var w:array[1..20,1..20]ofboolean; ID:array[1..20]ofstring; nm,ans:array[1..20]ofstring; room2,used:array[1..20]ofboolean; r,tr:array[1..20]oflongint; N,i,j,p,tmp:longint; cc:char; ss:string; functioncheckname(s:string):longint; var i:longint; begin fori:=1topdo ifnm[i]=sthen exit(i); inc(p); nm[p]:=s; checkname:=p; end; functioncheckID(s:string):longint; var i:longint; begin fori:=1tondo ifID[i]=sthen exit(i); end; functio
brewinstallkubectl 需要加代理! minikubestart--vm-driver=xhyve--docker-envHTTP_PROXY=http://your-http-proxy-host:your-http-proxy-port--docker-envHTTPS_PROXY=https://your-https-proxy-host:your-https-proxy-port 复制 k8s的一个好guide啊,分分钟上手 https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/ 在mac上操作,使用virtulbox的driver,如果用linux,可以使用kvm的driver,文档在上个链接中有跳转 curl-Lominikubehttps://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64&&\ chmo
原文链接:http://www.aclockworkberry.com/shader-derivative-functions/ 他人的翻译:http://blog.sina.com.cn/s/blog_7cb69c550102xvog.html 加上理解,一半照抄上面的博客 偏导函数,是fragmentshader中使用的指令函数,在HLSL中的是ddx(..)和ddy(..),在GLSL中的是dFdx(..)和dFdy(..) ,分别对应x,y轴上,在屏幕空间中,像素块中各种变量的变化率。 上面这句话是由于ddx和ddy的重载,可以把偏导函数用于向量和矩阵上。 1.最典型的用法是写出flat着色的效果: 在fragmentshader中,我们如果调用ddx(Pos),和ddy(Pos)这个代表求出相邻的2个像素块之间坐标的差值,即下面图中的红色和绿色2个矢量,而这2个矢量都在这个三角形的平面上,那么执行normalize(cross(ddx(pos),ddy(pos)))就求出的面的法线,但是这里要注意,在HlSL上面,或者Unity上面要写成normalize(cross(dd
目录什么是深拷贝和浅拷贝浅拷贝实现方式使用拷贝构造方法使用Cloneable使用Setter方法深拷贝实现方式使用Cloneable序列化方式Json序列化/反序列化JDK序列化/反序列化手动使用Setter层层设置属性Bean拷贝工具Apache的BeanUtilsApache的PropertyUtilsApache的SerializationUtilsSpring的BeanUtilsSpring的BeanCopierMapStruct总结观众老爷求点赞 什么是深拷贝和浅拷贝 先来看一张图: 我们都知道对象的引用分配在栈上,对象的内存分配在堆上。 如上图所示,对象objB是对象objA的一个拷贝,objB只是在栈上重新分配了一个引用,但是实际指向的内存和objA是同一个,这就是浅拷贝;相反,如果objB除了在栈上分配了新的引用,并且在堆上也分配了新的内存空间,这就是深拷贝。 浅拷贝就是复制对象的引用,修改复制的对象会影响原来的对象;深拷贝就是新建一个和原对象“一模一样”的对象,但是他们在堆上占用不同的内存。 题外话:和深拷贝(DeepCopy)、浅拷贝(ShallowCopy)
延迟初始化出现于.NET4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求。也可以称为,按需加载。 基本语法: Lazy<T>xx=newLazy<T>();//xx代表变量名 举例实现: 首先创建一个Student类,代码如下: usingSystem; namespaceLazyTest { classStudent { publicStudent() { this.Name="DefaultName"; Console.WriteLine("调用Student的构造函数"); } publicStudent(stringName) { this.Name=Name; Console.WriteLine("调用Student(stringName)的构造函数"); } publicstringName{get;set;} } }复制 ViewCode 创建一个控制台程序,代码如下: usingSystem; namespaceLazyTest { classProgram { staticvoidMain(string[]args)
众所周知,HashMap本身非线程安全的,但是当使用 Collections.synchronizedMap(new HashMap())进行包装后就返回一个线程安全的Map。 怎么实现的呢?今天比较有兴趣就看了 Collections.synchronizedMap的实现,发现其实还是比较简单的。 publicstatic<K,V>Map<K,V>synchronizedMap(Map<K,V>m){ returnnewSynchronizedMap<K,V>(m); }复制 synchronizedMap 当调用synchronizedMap后返回了一个SynchronizedMap privatestaticclassSynchronizedMap<K,V> implementsMap<K,V>,Serializable{ //useserialVersionUIDfromJDK1.2.2forinteroperability privates
Collection单列集合 List接口 迭代器iterator 因为Collection继承了Iterator迭代器,所以iterator接口提供了遍历Collection的接口。可以从一个Collection中使用迭代器方法来获取迭代器实例使用方法Iterator的接口定义: publicinterfaceIterator{ booleanhasNext(); Objectnext(); voidremove(); } 复制 其中: hasNext():判断容器内是否还有可供访问的元素next():返回迭代器刚用过的元素引用,返回Object,需要强转为具体的类型remove():删除迭代器刚越过的元素 使用方法代码如下: List<String>list=newArrayList<>(); Iterator<String>iterator=list.iterator(); while(iterator.hasNext()){ Strings=iterator.next(); if("HelloWorld".equals(s)){ ite
原文链接:https://blog.csdn.net/axe6404/article/details/120918830 1、配置域名和ip同时访问,只需要配置 server_namelanxin.cn,locahost; 也就是制定server配置节里面的server_name,域名和localhost之间用逗号分隔就可以了。 2、多端口则需要将server复制多个,每个里面指定不同端口就好了。例如: server{#应用端口listen80;server_namelanxin.cn,locahost; …… } server{#应用端口listen8899;server_namelocahost; …… } 这样就开放了80端口和8899端口。域名和IP能够同时访问。———————————————————————————————————————————————————————————————————————————————————————————————— 原文链接:https://www.cnblogs.com/forheart/p/12945355.html 使用n
1、静态页面阶段 那是1990年的12月25日,恰是西方的圣诞节,TimBerners-Lee在他的NeXT电脑上部署了第一套“主机-网站-浏览器”构成的Web系统,这标志BS架构的网站应用软件的开端,也是前端工程的开端。 1993年4月Mosaic浏览器作为第一款正式的浏览器发布。1994年11月,鼎鼎大名的Navigator浏览器发布发布了,到年底W3C在Berners-Lee的主持下成立,标志着万维网进入了标准化发展的阶段。 这个阶段的网页还非常的原始,主要以HTML为主,是纯静态的只读网页。 2、Javascript诞生及第一次浏览器战争 1995年,NetScape公司的工程师BrendanEich设计了javascript脚本语言,并集成到了navigator2.0版本中。随后微软也意识到了javascript的潜力,并模仿开发VBScript和JScript应用到了IE中,这直接开启了NetScape和微软的浏览器竞争。 由于微软的IE集成在windows操作系统上的优势,NetScape的navigator很快在浏览器市场上落于下风。于是他们把javascript提交