您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

一个基于Vue3的无编译小框架 byview

时间:2021-12-30 11:01:26  来源:  作者:带码攻城狮

byview 是一个自己开发的,用于引导vue组件直接工作在浏览器中而不需要脚手架的一个微框架(启动引擎),使得vue在浏览器中开发体验跟vue-cli相似。无需独立编译资源文件,修改立即生效。但由于在浏览器端,故无法使用npm包管理工具。

背景: 由于某些原因不能够使用vue工程化完全重构整个旧的系统项目,但又想在其基础上使用vue来开发新功能。byview的目标主要是面向内部人员的老旧系统, 可以将老旧系统中的一小部分通过byview中的vue功能来实现。

byview使用vue3作为前端框架,element-plus作为ui框架。

byview: 引导vue组件正确工作在旧系统中的一个微框架(启动引擎)。

引入byview

byview的核心文件为 core.js, 在html中直接引入core.js即可

<script src="byview/core.js"></script>

然后就可以通过 $byview 变量来使用 byview 的功能

配置

如要使用byview, 需要先对byview做一些前置配置, 以便byview能够正确地获取资源

  1. 设置 window.WEBROOT_URL 变量的值来设置当前的网站项目url, 它默认为 /
  2. 设置 window.BYVIEW_URL 来设置byview目录的URL地址, 它默认为 byview/ (相对于window.WEBROOT_URL)
  3. 设置 window.BYVIEW_RES_VERSION 来控制byview组件的超级缓存, 它是资源下载的版本号。当开启了byview的超级缓存后,每当有资源(css,js,vue)变更时,需要更新该版本号 用来告诉byview资源更新了

编写vue模板文件

vue文件和vue-cli中的vue文件基本没有差别,由于用的是Vue3, 故推荐使用Composition Api 方式编写组件

vue文件的格式为html格式。现在编写一个名为index.vue的文件, 示例代码如下:

<!-- 模板 -->
<template>
    <div>
        text:<span class="text">{{helloText}}</span>
    </div>
</template>

<!-- 脚本 -->
<script>
 const {ref} = Vue;

 export default {
     
     setup() {
         let helloText = ref("你好");

         return {
             helloText
         }
     }
 }
</script>

<!-- 限定当前组件的样式 -->
<style scoped>
    .text {
        color: green;
    }
</style>

 

一个基于Vue3的无编译小框架 byview

渲染结果

 

渲染

调用 $byview.run('index.vue', 'body') 将文件渲染到body中

  • 第一个参数是vue文件的路径, 其相对于网站根目录, 也就是 window.WEBROOT_URL 的值
  • 第二个参数是一个html元素选择器 第三个参数将原样传递给组件 props的params属性
<script>
    $byview.run('index.vue', 'body');
</script>

加载其他组件

我们新增一个组件文件为 comp.vue

内容如下:

<template>
    <span>{{text}}</span>
</template>

<!-- 脚本 -->
<script>
 export default {
     props: {
          text: {
                default: "test"
          }  
    }
 }
</script>

<!-- 限定当前组件的样式 -->
<style scoped>
    span {
        color: red;
    }
</style>

然后在index.vue中加载这个组件:

<!-- 模板 -->
<template>
    <div>
        text:<span class="text">{{helloText}}</span>
        <br>
        <test-comp></test-comp>
        <br>
        <test-comp text="测试一下"></test-comp>
    </div>
</template>

<!-- 脚本 -->
<script>
    let [comp] = await byview_load_components('./comp.vue');
    export default {
        components: {
            TestComp: comp
        },
        
        setup() {
            let helloText = "你好";
            
            return {
                helloText
            }
        }
    }
</script>

<!-- 限定当前组件的样式 -->
<style scoped>
    .text {
        color: green;
    }
</style>
一个基于Vue3的无编译小框架 byview

渲染结果

 

还可以将组件名称写在name属性中, 然后在index.vue 中通过
byview_load_name_components 或者 $
byview.loadComponentGroupByName 加载组件:

  • comp.vue:
<template>
    <span>{{text}}</span>
</template>

<!-- 脚本 -->
<script>
 export default {
    name:'TestComp'
    props: {
        text: {
            default: "test"
        }  
    }
 }
</script>

<!-- 限定当前组件的样式 -->
<style scoped>
    span {
        color: red;
    }
</style>

 

  • index.vue:
<!-- 模板 -->
<template>
    <div>
        text:<span class="text">{{helloText}}</span>
        <br>
        <test-comp></test-comp>
        <br>
        <test-comp text="测试一下"></test-comp>
    </div>
</template>

<!-- 脚本 -->
<script>
    export default {
         components: await byview_load_name_components('./comp.vue'),
        
        setup() {
            let helloText = "你好";
            
            return {
                helloText
            }
        }
    }
</script>

<!-- 限定当前组件的样式 -->
<style scoped>
    .text {
        color: green;
    }
</style>


byview_load_name_components 的第一个参数可以是个数组, 同时加载多个组件

加载外部的js脚本

可以通过 $byview.loadScript 或者 byview_load_script 方法加载一个或多个外部的js库文件或者配置数据

<script >
const [aResult, bResult] = await $byview.loadScript(['a.js', 'b.js']);
</script>

加载外部css文件

可以通过 byview_load_css 或者 $byview.loadCss 方法加载一个或多个外部的css到页面中

在vue文件中可以通过link标签引入外部css文件:

<link rel="stylesheet" href="sample2/test.css" scoped />

link 标签的scoped属性为可选, 表示样式是否仅当前组件生效 和 style 的 scoped 属性作用一样 href 属性的路径是相对于网站根目录, 如果需要先对于当前vue文件, 必须以 ./ 开头

缓存

所有组件、js、css等加载,只要下载成功,就会缓存到内存中,下次会从内存中直接取出.

除了内存缓存外, 组件下载还支持文件缓存,下载过的文件浏览器刷新之后不会再次下载, 会从缓存数据库中读取以提高响应速度。

除了文件缓存之外, 组件缓存会将已经解析好的组件结构直接缓存,不会再次解析vue文件的内容(浏览器刷新之后也不会再次解析vue文件中dom树)。

缓存是可以通过设置不同的 window.BYVIEW_RES_VERSION 值来清除缓存, 一般手动进行设置该值, 可以集成到后台系统的页面中手动更新所有缓存。

内存缓存每次刷新浏览器之后就会丢失。 文件和组件缓存如果开启, 在程序中可以通过 $
byview.superCache.clearAllResourceCache 方法清空资源(文件, js, css等)缓存。

一个基于Vue3的无编译小框架 byview

缓存效果

调试

  • 在浏览器中查看vue文件的js

浏览器以chrome为例子, 可以在source面板按快捷键 ctrl+p 然后直接输入vue文件的名称即可找到对应的js文件, 可以在该文件中打断点调试vue文件.

一个基于Vue3的无编译小框架 byview

 


一个基于Vue3的无编译小框架 byview

 

这里的.vue文件的内容只有js内容, 没有template的内容

  • 在浏览器中查看vue文件的模板内容

我们可以在控制台 输入 bv._loadedComponents 查看所有的已加载组件, 并找到其中的 template 属性查看具体的模板内容

一个基于Vue3的无编译小框架 byview

 

bv 是 $byview 变量的简称

  • 查看vue组件的实例

当我们需要查看vue组件的实例对象已经其当前的数据, 可以通过 bv.$conmponents 查看所有的组件示例

例如 bv.$
components.TestComp.last.text

bv.$components.TestComp.last 表示最后一个 TestComp 组件(页面中可能有多个TestComp实例)

一个基于Vue3的无编译小框架 byview

 

  • 在控制台中调用内置方法

我们可以通过 byview_get_gblprops 方法来获取 vue 的 globalPropertiesConfig 属性, 例如打开一个内置的带验证码的确认对话框:

console.log( 
  await byview_get_gblprops()
  		.$byConfirmHtmlCode('确定进行危险操作吗?')
  ? '继续' : '不继续' 
)
一个基于Vue3的无编译小框架 byview

 

  • 清空缓存

调用 $
byview.superCache.clearAllResourceCache 方法清空资源缓存

  • byview 调试选项

在控制台可以通过 byview_get_gblprops().$byOpenDebugConfigDialog() 方法打开调试面板

调试面板中可以控制各个缓存开关,在调试模式下, 建议关闭文件缓存和内存缓存

一个基于Vue3的无编译小框架 byview

 

 

结尾

更多用法请查看文档

git地址:byview: 引导vue组件正确工作在旧系统中的一个微框架(启动引擎)。

离线文档 docs.html 克隆代码后可以在浏览器中直接打开查看



Tags:Vue3   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
byview 是一个自己开发的,用于引导vue组件直接工作在浏览器中而不需要脚手架的一个微框架(启动引擎),使得vue在浏览器中开发体验跟vue-cli相似。无需独立编译资源文件,修改立...【详细内容】
2021-12-30  Tags: Vue3  点击:(0)  评论:(0)  加入收藏
开头最近要研究有什么新奇的产品和项目,发现一个网站很有意思,可以纯前端一键随机生成头像,刚好他们的代码是开源,并且基于vue3,我想开源拿出来给大家分享。效果: 开始项目本身基...【详细内容】
2021-12-03  Tags: Vue3  点击:(16)  评论:(0)  加入收藏
本文分享自华为云社区《【云驻共创】vue3相比 vue2 的十项优点》,作者: 海拥 。Vue3新版本的理念成型于 2018 年末,当时的 Vue 2 已经有两岁半了。比起通用软件的生命周期来这...【详细内容】
2021-09-16  Tags: Vue3  点击:(74)  评论:(0)  加入收藏
介绍Vue3发布已经有一段时间了,从目前来看,其生态还算可以,也已经有了各种组件库给予了支持,但是不管是Vue3还是Vue2都无法直接用来开发小程序,因此国内一些技术团队针对Vue开发...【详细内容】
2021-07-13  Tags: Vue3  点击:(205)  评论:(0)  加入收藏
介绍viewer.js是一个专门用于图片预览的js库,图片预览效果很好,支持诸如缩放(支持滚轮操作)、旋转、播放、左右翻转、最大化等诸多使用功能,v-viewer则是对其进一步封装,将它带入...【详细内容】
2021-06-25  Tags: Vue3  点击:(459)  评论:(0)  加入收藏
在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程...【详细内容】
2021-05-14  Tags: Vue3  点击:(232)  评论:(0)  加入收藏
目前electron最新稳定版本为v11.2.1,star高达89.2K+。# 官网地址https://www.electronjs.org/# 仓库地址https://github.com/electron/electron有数千个超优秀的软件是基于E...【详细内容】
2021-02-08  Tags: Vue3  点击:(1239)  评论:(0)  加入收藏
Vue3.0推出已有一段时间了,各位小伙伴们都有安排上学习没,想要技术进阶的同学赶紧学习起来吧。 如果你对vue3不是特别了解,或者打算去学习,可以看看下面的分享,希望对大家有所帮...【详细内容】
2020-10-19  Tags: Vue3  点击:(193)  评论:(0)  加入收藏
作者:Mingle转发链接:https://mp.weixin.qq.com/s/iOq-eeyToDXJ6lvwnC12DQ前言背景:2019年2月6号,React 发布 「16.8.0」 版本,vue紧随其后,发布了「vue3.0 RFC」Vue3.0受React16...【详细内容】
2020-08-06  Tags: Vue3  点击:(84)  评论:(0)  加入收藏
vue3.0中把响应式改成了proxy替代了以前的Object.defineProperty的形式;vue3.0的包目录截图; 其中:compiler-core:编译器核心compiler-dom:针对浏览器的编译模块compiler-ssr:针对...【详细内容】
2020-07-05  Tags: Vue3  点击:(114)  评论:(0)  加入收藏
▌简易百科推荐
byview 是一个自己开发的,用于引导vue组件直接工作在浏览器中而不需要脚手架的一个微框架(启动引擎),使得vue在浏览器中开发体验跟vue-cli相似。无需独立编译资源文件,修改立...【详细内容】
2021-12-30  带码攻城狮    Tags:Vue3   点击:(0)  评论:(0)  加入收藏
什么是微服务如今随着社交媒体的兴起,互联网的快速发展,应用程序变得越来越复杂,需要处理的任务也越来越多。 过去的单体应用程序已经无法满足日益增进的技术需求。因此人们迫...【详细内容】
2021-12-30  梦回故里归来    Tags:微服务   点击:(0)  评论:(0)  加入收藏
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(8)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(8)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(11)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(22)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条