【Vue五分钟】Vue项目的后期打包、上传、构建文档、组件测试操作

简介: 组件库默认是英文,如果需要其它语言就可以利用 LocaleProvider 组件进行配置(内置了大概有43 种语言,可随意切换)

🥇 如何做到国际化

  组件库默认是英文,如果需要其它语言就可以利用 LocaleProvider 组件进行配置(内置了大概有43 种语言,可随意切换)

2345_image_file_copy_359.jpg

所以我们前往 main.js 引入这个组件注册,然后前往 App.vue 使用这个组件,动态绑定一个变量 locale,导入一个中文语 言包和英文语言包,在 data 里面指定 locale 的值,如此就可 以修改。

  不过要提供一个可以切换的配置,我们可以把语言配置项挂 载到路由上,监听路由上的 locale,绑定一个函数,根据配 置项决定 locale 的值,大部分组件会修改,不过日历日期组 件组件是用别人的库 moment,需要对这个库做语言包的切 换。引入该库,默认是加载全部的语言包(之后打包讲按需 加载),我们依然路由上的配置项返回对应的语言包。

  回到 header 做一个改变路由配置项切换语言的功能,可以利用 Dropdown 下拉菜单组件,记得注册,需要两个 item,然 后图标改为 global,item 需要给对应的 key:zhCN 和 enUS, 给菜单加一个点击事件 localeChange,接收一个 key,通过这 个 key 来改变 router,直接 push 到挂载了对应 key 值配置项 的路由上去。当然菜单还需要一个 selectedKeys,指向我们 路由配置项上的 locale,如果没有就 zhCN。给点样式。

  在分析页添加日历(体现语言效果),main.js 导入 DatePicker, 然后回到分析页使用一下就行。 当然,如果是自己开发的组件需要国际化的话就可以使用 Vue I18n,这个是专门的国际化插件,先安装,然后在 main.js 中引入,新建一个 locale 文件夹存放语言包,下面建一个 zhCN.js 中文的,导出一个“app.dsahboard.analysis.timeLabel”:” 时间”,尽量写长一些,不然后面命名比较困难,同样的再建 一个 enUS.js,把值改成 time,回到 main.js 导入这两个语言 包。use 注册 18n 先,实例化 i18n,默认语言通过 url 取到(通 过一个 query-string 这个库的 parse 来解析这个 url,将字符 串解析成对象),取其 locale,没有就默认中文,message 对 象配置语言包。

2345_image_file_copy_360.jpg

2345_image_file_copy_361.jpg

💖 如何高效的构建打包发布

  其实我们已经进行了一定打包优化方式,如 babel 中使用组 件库的按需加载、路由中使用 webpackChunkName 对路由懒 加载和拆包、lodash 引用的时候都是具体到方法所在文件(第 一行)而不是整个拿进来(第二行)。

import debounce from "lodash/debounce";
import {debounce} from 'lodash'

但是这样子还远远不够,可以利用 cli 提供的命令来分析哪些 还需要优化(npm run build -- --report)就可以生成一个打包 报告(report.html),打开可以看得出来主要是 icon 下面的包 和 moment 里面的语言包,echart 也引用了很多的图标。查 看 github 置顶的 issue 可以找到解决方法,主要是组件按需 加载(已经做了)、图标按需加载、moment 语言包按需加载。 先看图标按需加载,可以看到是给 webpack 配置别名让组件 库引用图标的时候都走到本地的图标配置文件中(弊端是组 件库中使用的图标也需要单独配置,但是并不知道使用了什 么图标,目前也只能用这种)。我们建一个 icon.js,往里面放 需要的图标,再前往 vue.config.js 对别名进行配置。如此就 完成了图标的按需加载,只不过不管是自己还是组件库内部 使用的图标都需要在 icon.js 中配置。

//src/icons.js
//export what you need
export {
  default as SmileOutline
}
  from '@ant-design/icons/lib/outline/SmlieOutline';
export {
  default as MeOutline
}
  from '@ant-design/icons/lib/outline/MeOutline';

接下来是 moment,原理就是把 moment 引用的包都忽略掉, 那么我们打包的时候 moment 的语言包就不会被打包进来了, 当然使用的话就需要单独引入 moment 对应的语言包了.

2345_image_file_copy_362.jpg

接下来还有 echarts ,可以看到是整个都引入而我们只是使用了柱状图,引入核心代码/ 引擎、引入柱状图、引入 title 。那 么这样子打包的时候就只会打包柱状图和配置 title 的代码。

import echarts from "echarts/lib/echarts";
import "echarts/lib/chart/bar";
import "echarts/lib/component/title";

2345_image_file_copy_364.jpg

👏 如何构建可交互的组件文档

 可以看到组件库文档除了 demo 还有对应的源码提供,有三 种方式实现这个代码展示。 第一种方案就是直接复制一份,一份作为字符串展示出来, 一份作组件,这是最不靠谱。 第二种是成本比较低比较灵活,就是让组件加载两次,第一 次让 vue-loader 处理,第二次选择其它 loader 如 raw-loader 把文件直接导出为字符串。不过这里需要注意,我们在 webpack 对.vue 文件都走了 vue-loader 的处理,如果想对同 一文件类型走不同处理,可以直接在文件中导入的时候直接 指定 loader 不让其去走 webpack 的配置。

2345_image_file_copy_366.jpg

现 在要 做 的就 是 把 chart 的 代码 在 下面 显 示, 先安 装 raw-loader 就可以直接使用了,然后我们回到 analysis 导入 chart 组件的代码字符串 charCode,然后直接{{}}就可以展示 了 , 只 不 过 需 要 高 亮 所 以 安 装 vue-highlight ( 封 装 了 highlight.js 这个库让我们可以用指令的方式去使用),这个库 需要在 main.js 中引入注册,这样子就能显示只不过没有高亮, 所以我们去 highlight.js 找喜欢的样式库在 mian.js 引入。 第三种方式是自己写 loader 然后对 markdown 进行处理,成本比较高。

import VueHighlightJS from 'vue-heghlightjs';
import 'highlight.js/styles/github.css';
Vue.use(VuehighlightJS);
import chartCode from "vue-heghlightjs"
export default {
   data() {
 return {
  chartOption:{},
chartCode
}
}

💬 如何做好组件的单元测试

  对 pro 的一些重要函数做一下单元测试,首先需要配置一下 jest.config.js,修改 testMarch,但凡.spec 结尾的都走单元测 试,再添加一个测试报告,这个可以在文档 Vue Test Utils 找 到测试覆盖率(第一个是是否开启,这个需要看环境而不是 每次都去生成,看 process.env.COVERGE 是否为 true 第二个 是把哪些文件列入进来做测试分析的数据,我们可以加上 src, 只要 src 下面的,并且排除掉 node 模块),到此完成测试配置。

  接下来修改 eslint 的配置,环境需要打开 node 和 jest(不然 关键字会标红)。

  现在测试的话主要是针对 auth.js,可以运行 npm run test: unit -- --watch 让其每次更改测试用例保存都自动运行。改动 一下,定义一个 currentAuth 变量,默认为[‘admin’],并且导 出这个变量,使用的话也是用这个变量来动态改变 auth。 新建一个 auth.spec.js,导入 check、currentAuth,定义一个 测试集 describe,开始写单测。如果可校验的权限值为空时 (清空拿到的权限值),希望检测输入的是 user 的时候是为 false,admin 也是 false(因为允许通过的数组被清空了,写 啥都没有用)。再测试一种校验组有 user 的情况,先清空校 验组再给校验组一个 user 测试,再测试一种 admin 加 user。 到此就完成了权限的单元测试,同时也完成了 pro 的骨架,还有样式、完全响应式、组件等可以一一优化。

2345_image_file_copy_367.jpg

2345_image_file_copy_368.jpg

2345_image_file_copy_369.jpg


相关文章
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
921 2
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1678 4
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1756 0
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
809 161
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
1368 159
|
JavaScript 前端开发 UED
Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
1040 8
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
978 1
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
1321 6