如何搭建一个vue2组件库(king-ui-pro)

文章引用图片无法查看,直接查看原文

感兴趣的可以关注或订阅下这个系列,后续会陆续将相关的组件与公共方法进行分享
目前已经完成了的组件有
多行省略pro版,不是简单的多行省略效果
在这里插入图片描述

公共方法:
1、图片预览,知乎的图片飞出预览方式(flip动画实现)
2、异步函数最大并发量限制,并非分批次,而是尽量保持最大的并发数
3、通用的时间处理函数,用于方便处理时间

创建仓库

"vue-loader": "^17.4.2",

安装vue-cli

npm i @vue/cli -g

创建vue2项目

vue create kl-ui

选择依赖,基本啥都不用安装

依赖

npm i style-loader vue-style-loader css-loader vue-loader@15.9.8 -D

本地调试

为仓库生成一个快捷方式

npm link

在业务仓里面执行

npm link king-ui-pro
npm config get prefix

发布流程

打包

npm run build

自动修改版本号

npm version patch

登录

  • 不能使用淘宝源
npm login

推送

npm publish

全局组件注册与导出工具函数

  • 都需要一个install方法
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
import * as funs from "../utils/tool.js";
const result = {};// 挂载工具函数
Object.keys(funs).forEach((key) => {result[key] = arr[key];
});const install = (Vue) => {const requireComponent = require.context("./", true, /\.vue$/);requireComponent.keys().forEach((fileName) => {// 获取组件配置const componentConfig = requireComponent(fileName);// 获取组件的 PascalCase 命名const componentName = fileName.split("/").pop().replace(/\.\w+$/, "");const component = componentConfig.default || componentConfig;// 全局注册组件Vue.component(componentName, component);result[componentName] = {install: function (Vue) {Vue.component(componentName, component);},};});
};// 定义install方法
result.install = install;
export default result;

添加按需引入

每个组件都需要一个注入方法
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
每个组件的js

// 引入vue组件
import klMaxEllPro from './index.vue'// 要提供一个install,将来给Vue.use()函数调用的
klMaxEllPro.install = function (Vue) {// 注册组件Vue.component(klMaxEllPro.name, klMaxEllPro)
}export default klMaxEllPro

注册时

import klMaxEllPro from './klMaxEllPro/index.vue';
import klMaxEllProJs from './klMaxEllPro/index.js';const component = [klMaxEllPro]const install = (Vue) =>{component.map(item =>{Vue.component(item.name, item)})
}export default {install,klMaxEllProJs
}

webpack.config.js 添加每个组件的打包

  entry: {// 全部index: './src/components/index.js',// 单个klMaxEllPro: './src/components/klMaxEllPro/index.js',},

页面配置

package.json

{"name": "king-ui-pro","version": "0.1.4","author": "weixijin","description": "vue compnent组件库","main": "dist/index.umd.js","keywords": ["king-ui","ui","vue"],"scripts": {"build": "npx webpack","serve": "vue-cli-service serve","dev": "vue-cli-service serve --open","build-vue": "vue-cli-service build"},"dependencies": {"core-js": "^3.8.3","vue": "^2.6.14","vue-router": "^3.5.1"},"devDependencies": {"@vue/cli-plugin-babel": "~5.0.0","@vue/cli-plugin-router": "~5.0.0","@vue/cli-service": "~5.0.0","css-loader": "^6.8.1","style-loader": "^3.3.3","vue-loader": "^15.9.8","vue-style-loader": "^4.1.3","vue-template-compiler": "^2.6.14","webpack": "^5.88.2","webpack-cli": "^5.1.4"}
}

webpack.config.js


const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');module.exports = {mode:'development',entry: {// 全部index: './src/components/index.js',// 单个klMaxEllPro: './src/components/klMaxEllPro/index.js',},output: {path: path.resolve(__dirname, 'dist'),filename: '[name].umd.js',library: 'king-ui', // 组件库libraryTarget: 'umd'},module: {rules: [{test: /\.css$/,use: ['style-loader','vue-style-loader', 'css-loader'],},{test: /\.vue$/,use: [{loader: 'vue-loader'}]}]},plugins: [new VueLoaderPlugin()]
}

使用

安装组件库

npm i king-ui-pro@latest -S

全局注入

import kingUiPro from 'king-ui-pro'
import {klFun} from 'king-ui-pro'
// 全局注入king-ui-pro组件
Vue.use(kingUiPro)// 全局注入king-ui-pro方法
Object.keys(klFun).forEach((key) => {Vue.prototype[key] = klFun[key]; 
});

按需注入

import {klMaxEllPro,klMoveTo,klFun} from "king-ui-pro"// 挂载工具函数
Object.keys(klFun).forEach((key) => {Vue.prototype[key] = klFun[key]; 
});Vue.use(klMaxEllPro)
Vue.use(klMoveTo)

直接使用js文件如何使用

  • 直接使用js引入的方式,相关组件方法被挂载在window上,对应使用即可
window['king-ui-pro']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640411.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode(hot100)——贪心算法

55. 跳跃游戏 本题不用纠结于可以跳几步,可以聚焦于覆盖范围,即 当前位置当前跳数 能够覆盖的范围,若这个范围足以到达最后一个位置,则返回true;若for循环结束,则还没返回true,则返回false。 下…

苹果手机远程打卡教程

关于苹果手机远程打卡教程之——有电脑零成本版 📎个人主页:我的主页 📎小白一枚,欢迎指教👏 嗨嗨嗨,今天来出一期iPhone实现远程打卡的教程,让我们可以随时随地的打卡wherever~ 准…

A4云打印仅需5分/页?云打印多少钱?云打印怎么收费?

随着互联网技术的发展,越来越多的同学在打印资料的时候都开始转向线上,转向云打印服务了。云打印服务不仅可以给我们节省很多时间,价格方面较打印店也更有优势。那么云打印多少钱?云打印怎么收费?今天小易就带大家来了…

了解IPS和IDS:这5个差异将改变你的安全观念!

IPS 代表 入侵防御系统(Intrusion Prevention System),它是 IDS 的进一步发展,不仅具备检测攻击的能力,还能在检测到攻击后主动采取措施阻止攻击。IPS 通常部署在防火墙和网络设备之间,能够深度感知并检测流…

《自动机理论、语言和计算导论》阅读笔记:p225-p260

《自动机理论、语言和计算导论》学习第 9 天,p225-p260总结,总计 26 页。 一、技术总结 1.pushdown automation(PDA,下推自动机) 2.DPDA Deterministic PDA(确定性下推自动机)。 二、英语总结 1.instantaneous (1)instant: adj. happi…

基于python实现web漏洞挖掘技术的研究(django)

基于python实现web漏洞挖掘技术的研究(django) 开发语言:Python 数据库:MySQL所用到的知识:网络爬虫,SQL注入,XSS漏洞工具:pycharm、Navicat、Maven 系统的实现与漏洞挖掘 系统的首页面 此次的系统首页面是登录的页…

2024年内外贸一体化融合发展(长沙)交易会

2024年内外贸一体化融合发展(长沙)交易会 一、总体思路 充分发挥湖南作为全国内外贸一体化试点地区作用,坚持“政府主导、市场驱动、企业为主”的原则,以“助力双循环,拓展新市场,促进新消费”为主题&…

线程池 ThreadPoolExecutor 参数详解

一、引言 提到 Java 线程池,就不得不说 ThreadPoolExecutor,它是 Java 并发包 java.util.concurrent 中的一个类,提供一个高效、稳定、灵活的线程池实现,用于实现多线程并发执行任务,提高应用程序的执行效率。 在《任…

4款百里挑一的国产软件,功能强大且免费,埋没了让人心酸

闲话少说,直上狠货! 1、Billfish 这款素材管理工具——Billfish,深受用户好评,个人版完全免费使用。无论是文档、图片、音频,还是复杂的工程文件AEP,它都能轻松实现本地与云端的同步管理。快速预览功能让…

Godot3D学习笔记1——界面布局简介

创建完成项目之后可以看到如下界面: Godot引擎也是场景式编程,这里的一个场景相当于一个关卡。 这里我们点击左侧“3D场景”按钮创建一个3D场景,现在在中间的画面中会出现一个球。在左侧节点视图中选中“Node3D”,右键创建子节点…

路由过滤,路由策略小实验

目录 一,实验拓扑: 二,实验要求: 三,实验思路: 四,实验过程: 1,IP配置: 2、R1 和R2 运行 RIPv2,R2,R3 和R4运行 oSPF&#xff0…

stable diffusion本地部署@win10

一键无脑安装stable-diffusion-webui stable diffusion是当前非常出色的文生图模型,要优于以前gan文生图模型。现在有了stable-diffusion-webui软件,可以一键安装,大大简化了操作难度。本文档就是stable-diffusion-webui在windows 10上的安装…