【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


相关文章
|
11天前
|
存储 JavaScript
解锁Vuex高级玩法:模块化与插件共舞,让你的Vue项目状态管理如虎添翼!
【8月更文挑战第27天】Vuex是一款专为Vue.js应用程序设计的状态管理模式及库,它通过集中管理组件状态来确保状态变更的可预测性。在大型应用中,采用模块化管理可以让代码结构更加清晰,同时利用插件增强功能。模块化管理允许将store拆分为包含各自state、mutations、actions和getters的独立模块。插件则能监听状态变化,实现诸如日志记录或数据持久化等功能。本文通过具体示例介绍了如何在Vuex中实现模块化管理和插件的高级应用。
25 1
|
22天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
23天前
|
JavaScript 前端开发
在Vue2或Vue3中项目中使用 Isotope(同位素) 过滤和排序神奇的布局神器,全网独家实现!
本文介绍了在Vue2或Vue3项目中如何使用Isotope(同位素)布局库来创建动态的网格布局,并提供了详细的代码实现和效果展示,包括过滤和排序功能。
48 0
在Vue2或Vue3中项目中使用 Isotope(同位素) 过滤和排序神奇的布局神器,全网独家实现!
|
1天前
|
数据采集 JavaScript 搜索推荐
我们一起聊聊如何对Vue项目进行搜索引擎优化
【9月更文挑战第4天】Vue 项目的搜索引擎优化(SEO)较为复杂,因其内容默认由 JavaScript 渲染,部分搜索引擎难以索引。为提升 SEO 效果,可采用服务器端渲染(SSR)或预渲染,使用 Nuxt.js 或 Vue Server Renderer 实现 SSR,或利用 Prerender SPA Plugin 预渲染静态 HTML。此外,动态管理 Meta 标签、优化静态内容与 Sitemap、懒加载、图片优化、提升页面速度、设置正确的路由模式、使用结构化数据及构建良好外链均有益于 SEO。
33 11
|
18天前
|
JavaScript
Vue项目如何生成树形目录结构
这篇文章介绍了如何在Vue项目中生成树形目录结构,通过安装并使用`mddir`命令行工具来创建一个`directoryList.md`文件,从而快速获取项目的树形目录列表。
Vue项目如何生成树形目录结构
|
23天前
|
数据可视化 JavaScript
Vue3项目使用G6可视化组件实现一个树形机构图
在Vue 3项目中使用G6可视化组件库实现树形机构图的构建和展示。
201 1
Vue3项目使用G6可视化组件实现一个树形机构图
|
9天前
|
JavaScript
Vue3相关组件项目依赖依赖版本信息
这篇文章展示了一个Vue 3项目中使用的组件和库的依赖版本信息,包括`ant-design-vue`、`swiper`、`vue`、`vue-router`等,以及开发依赖如`vite`、`vue-tsc`、`eslint`等。
Vue3相关组件项目依赖依赖版本信息
|
16天前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
52 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
23天前
|
JavaScript UED
如何在Vue3项目中使用防抖节流技巧
在Vue 3项目中使用防抖和节流技巧以优化组件性能,包括使用`lodash`库和自定义实现这两种方法。
134 0
如何在Vue3项目中使用防抖节流技巧
|
23天前
在 Vue3 + ElementPlus 项目中使用 el-autocomplete 控件
本文介绍了在Vue3 + ElementPlus项目中如何使用`el-autocomplete`控件实现自动补全输入功能,并探讨了不同版本ElementPlus中`clearable`属性的兼容性问题。
135 0
在 Vue3 + ElementPlus 项目中使用 el-autocomplete 控件
下一篇
DDNS