使用vite框架封装vue3插件,发布到npm

目录

  一、vue环境搭建

1、创建App.vue

2、修改main.ts

3、修改vite.config.ts

二、插件配置

1、创建插件

2、开发调试

3、打包配置

4、package.json文件配置


上一篇文章讲述使用vite《如何使用vite框架封装一个js库,并发布npm包》封装js库,本文将讲述使用vite框架封装vue3插件。基本环境的搭建,参见《如何使用vite框架封装一个js库,并发布npm包》。如下图所示,

  一、vue环境搭建

基本环境搭建好以后,开始安装开发环境。注意,我们的目的是开发vue插件,不是开发vue项目。因此,vue的依赖应该安装在开发环境当中,而不是生产环境。命令行如下:

pnpm add vue@latest vue-tsc @vitejs/plugin-vue  @types/node -D

1、创建App.vue

安装完成后,在src目录下创建App.vue文件:

<script setup lang="ts">
//import { ref, reactive } from 'vue';
import typescriptLogo from './typescript.svg';
</script><template><div><a href="https://vitejs.dev" target="_blank"><img src="./vite.svg" class="logo" alt="Vite logo" /></a><a href="https://www.typescriptlang.org/" target="_blank"><img:src="`${typescriptLogo}`"class="logo vanilla"alt="TypeScript logo"/></a><h1>Vite + TypeScript</h1><div class="card"><button id="counter" type="button"></button></div><p class="read-the-docs">Click on the Vite and TypeScript logos to learn more</p></div>
</template>

2、修改main.ts

修改src目录下的main.ts文件:

import './style.css';
import { createApp } from 'vue';
import App from './App.vue';createApp(App).mount('#app');

3、修改vite.config.ts

修改vite.config.ts配置文件:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';export default defineConfig({plugins: [vue()],build: {lib: {entry: resolve(__dirname, 'lib/main.ts'),name: 'Counter',fileName: 'counter'}},server: {host: '0.0.0.0',port: 3100,open: true,strictPort: true}
});

至此vue开发环境就已经配置好了,使用启动命令:

pnpm dev

 看到一以上配置,有些同学可能好奇,干嘛 这么麻烦,直接使用vite创建一个vue项目不就行了?直接使用vite创建一个vite项目也可以开发vue插件。这里只是提供了一个方法开发vue插件的方法,我在开发vue插件的时候也是做个比较后,选择使用library库进行开发,并且个人认为这比在vue项目当中开发插件更好,更快,更简洁。至于说大家怎么选择,仁者见仁智者见智,根据个人喜好来吧。

如果在开发的时候希望代码规范漂亮,可以选择给插件配置prettier和eslint,安装依赖命令如下:

pnpm add eslint @typescript-eslint/parser eslint-config-airbnb-base eslint-config-prettier eslint-plugin-import eslint-plugin-prettier eslint-plugin-vue prettier -D

 prettier和eslint文件配置参见Vue3+Vite+TS+Eslint搭建生产项目最终版配置 ,这些都不是必须得,可以选择不用。

二、插件配置

1、创建插件

在src目录下建立components,创建一个JsonExportExcel.vue文件:

<script setup lang="ts">
import { toRaw } from 'vue';
import { json2Excel } from '@/assets/utils';const props = defineProps({title: {type: String,default: () => 'file name'},jsonData: {type: Array,default: () => []},fields: {type: Object,default: () => {}}
});
const { jsonData, fields, title } = toRaw(props);
const handleClick = () => {json2Excel(jsonData, fields, title);
};
</script>
<script lang="ts">
export default {name: 'JsonExportExcel' // 插件名称
};
</script><template><button class="muk-btn primary" @click="handleClick">download</button>
</template><style scoped>
.muk-btn {appearance: none;border: none;outline: none;background: #fff;text-align: center;border: 1px solid transparent;border-radius: 4px;cursor: pointer;
}.large {width: 240px;height: 50px;font-size: 16px;
}.moddle {width: 180px;height: 50px;font-size: 16px;
}.small {width: 100px;height: 32px;
}.mini {width: 60px;height: 32px;
}.default {border-color: #e4e4e4;color: #666;
}.primary {border-color: rgb(104, 72, 199);background: rgb(120, 97, 183);color: #fff;
}.plain {border-color: skyblue;color: skyblue;background: lighten(skyblue, 50%);
}.gray {border-color: #ccc;background: #ccc;color: #fff;
}
</style>

2、开发调试

在lib文件目录下引入JsonExportExcel.vue,然后开发调试JsonExportExcel.vue组件,lib/main.ts文件:

import ExcelExportJson from '../src/components/ExcelExportJson.vue';
import JsonExportExcel from '../src/components/JsonExportExcel.vue';
// 按需引入
export { ExcelExportJson, JsonExportExcel };
const components = [ExcelExportJson, JsonExportExcel];// 批量组件注册
const install = {install(App: any) {components.forEach((item) => {console.log('🚀 ~ components.forEach ~ item:', item);App.component(item.name, item);});}
};export default install;

3、打包配置

在vue.config.ts当中配置文件打包:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';export default ({ mode, command }) => {console.log('🚀 ~ command:', command);console.log('🚀 ~ mode:', mode);return defineConfig({plugins: [vue()],resolve: {alias: {'@': resolve(__dirname, 'src')}},build: {minify: 'esbuild',sourcemap: true,lib: {entry: resolve(__dirname, 'lib/main.ts'),name: 'vue3ExcelJson',fileName: (format) => `vue3-excel-json.${format}.js`},rollupOptions: {external: ['vue', 'xlsx'],output: {globals: {vue: 'Vue',xlsx: 'Xlsx'}}}},esbuild: {drop: mode === 'production' ? ['console', 'debugger'] : []},server: {host: '0.0.0.0',port: 3100,open: true,strictPort: true}});
};

4、package.json文件配置

{"name": "vue3-excel-json","version": "1.0.5","description": "Based on Vue3 plugin, quickly implement the function of uploading Excel to JSON, importing JSON, and exporting Excel","type": "module","files": ["dist","index.d.ts"],"main": "./dist/vue3-excel-json.umd.js","module": "./dist/vue3-excel-json.es.js","style": "./dist/style.css","types": "./index.d.ts","exports": {".": {"types": "./index.d.ts","import": "./dist/vue3-excel-json.es.js","require": "./dist/vue3-excel-json.umd.js"},"./dist/style.css": {"import": "./dist/style.css","require": "./dist/style.css"}},"scripts": {"dev": "vite","build": "vue-tsc && vite build"},"keywords": ["excel","json","export","excel json"],"author": "patton","license": "ISC","repository": {"type": "git","url": "https://github.com/renleiabc/vue3-excel-json.git"},"bugs": {"url": "https://github.com/renleiabc/vue3-excel-json/issues"},"devDependencies": {"@types/node": "^20.11.0","@typescript-eslint/parser": "^6.18.1","@vitejs/plugin-vue": "^5.0.3","eslint": "^8.56.0","eslint-config-airbnb-base": "^15.0.0","eslint-config-prettier": "^9.1.0","eslint-plugin-import": "^2.29.1","eslint-plugin-prettier": "^5.1.3","eslint-plugin-vue": "^9.20.0","prettier": "^3.1.1","sass": "^1.69.7","typescript": "^5.3.3","vite": "^5.0.10","vue": "^3.4.10","vue-tsc": "^1.8.27"},"dependencies": {"xlsx": "^0.18.5"}
}

配置号以后,就可以登录npm发布。

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

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

相关文章

Jmeter后置处理器——JSON提取器

目录 1、简介 2、使用步骤 1&#xff09;添加线程组 2&#xff09;添加http请求 3&#xff09; 添加JSON提取器 1、简介 JSON是一种简单的数据交换格式&#xff0c;允许互联网应用程序快速传输数据。JSON提取器可以从JSON格式响应数据中提取数据、简化从JSON原始数据中提取特定…

Java学习——Junit单元测试

​​ Junit&#xff1a;事实上的标准单元测试框架 使用Junit&#xff1a;只需要使用 TestCase 和 Assert http://t.csdnimg.cn/hgMFJ

Linux网络编程---IP 地址格式转换函数

Linux网络编程—IP 地址格式转换函数 我们更容易阅读的IP地址是以点分十进制表示的&#xff0c;例如&#xff1a;192.168.5.10 &#xff0c;这是一种字符串的形式&#xff0c;但是计算器所需要的IP地址是以二进制进行表示&#xff0c;这便需要我们在点分十进制字符串和二进制地…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城 免 费 搭 建

鸿鹄云商 B2B2C产品概述 【B2B2C平台】&#xff0c;以传统电商行业为基石&#xff0c;鸿鹄云商支持“商家入驻平台自营”多运营模式&#xff0c;积极打造“全新市场&#xff0c;全新 模式”企业级B2B2C电商平台&#xff0c;致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

【现代密码学】笔记6--伪随机对象的理论构造《introduction to modern cryphtography》

【现代密码学】笔记6--伪随机对象的理论构造《introduction to modern cryphtography》 写在最前面6 伪随机对象的理论构造 写在最前面 主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充&#xff1a;骆婷老师的PPT 《introduction to modern cryphtogr…

Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

一、前言 在嵌入式板子上由于没有系统层面的输入法支持&#xff0c;所以都绕不开一个问题&#xff0c;那就是在需要输入的UI软件中&#xff0c;必须提供一个输入法来进行输入&#xff0c;大概从Qt5.7开始官方提供了输入法的源码&#xff0c;作为插件的形式加入到Qt中&#xff…

网络广播号角喇叭在智能工地施工现场的应用,以及网络广播在公共广播中的实际作用。

网络号角喇叭在智能工地施工现场的应用&#xff0c;以及网络广播在公共广播中的实际作用。 SV-7044村村通ip网络通信广播号角喇叭&#xff0c;网络音箱&#xff0c;网络音柱是一种公共广播技术&#xff0c;主要应用于公共场所&#xff0c;如公交、商场、大型活动场所等。可以用…

visual studio的安装及scanf报错的解决

visual studio是一款很不错的c语言编译器 下载地址&#xff1a;官网 点击后跳转到以下界面 下滑后点击下载Vasual Sutdio&#xff0c;选择社区版即可 选择位置存放下载文件后&#xff0c;即可开始安装 安装时会稍微等一小会儿。然后会弹出这个窗口&#xff0c;我们选择安装位…

无需编程,简单易上手的家具小程序搭建方法分享

想要开设一家家具店的小程序吗&#xff1f;现在&#xff0c;我将为大家介绍如何使用乔拓云平台搭建一个家具小程序&#xff0c;帮助您方便快捷地开展线上家具销售业务。 第一步&#xff0c;登录乔拓云平台进入商城后台管理页面。 第二步&#xff0c;在乔拓云平台的后台管理页面…

Vulnhub-Raven-1

一、信息收集 端口扫描 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f3:5e:01:ef:93:49:3d:91:1e:ae:8b:3c:fc (DSA) |_ 256 0e:85:71:a8:a2:c3:08:69:9c:91:c0:3f:84:18:df:…

多线程——CAS

什么是CAS CAS的全称&#xff1a;Compare and swap&#xff0c;字面意思就是&#xff1a;“比较并交换”&#xff0c;一个CAS涉及到以下操作&#xff1a; 假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B 1.比较A与V是否相等&#xff08;比较&#xf…

antd pro项目部署到gitpage白屏

先总结一下如何部署项目到gitpage 1.新建分支gh-pages 2.把打包好的文件放在这个分支下 3. 之前打开一直白屏&#xff0c;有很多坑 第一个&#xff0c;import { getIntl } from umijs/max;这个引入要&#xff0c;不能是./引入的 第二个&#xff0c;新建一个config.prod.t…

盘点2023年信息系统故障

安全生产&#xff0c;人人有责。每年信息系统安全事件层出不穷&#xff0c;作为一线运维人员对这些生产安全故障当抱有敬畏之心&#xff0c;并从中总结经验教训&#xff0c;分析原因&#xff0c;不能简单的调侃为开猿节流、降本增笑的结果。本文简要盘点2023年发生的主要信息系…

Java NIO (一)简介(备份)

1 NIO简介 在1.4版本之前&#xff0c;Java NIO类库是阻塞IO&#xff0c;从1.4版本开始&#xff0c;引进了新的异步IO库&#xff0c;被称为Java New IO类库&#xff0c;简称为Java NIO。New IO类库的目的 就是要让Java支持非阻塞IO。 Java NIO类库包含三个核心组件&#xff1a; …

Shell基本操作(2)

文件显示与编辑 连接并显示文件内容 cat cat[options] file... options -n加上行号 -s将连续两行以上的空白行替换为一行如果file不止一个文件&#xff0c;则会将它们连接起来如果想一次只看一页&#xff0c;可以使用more或者less命令 过滤文件内容grep grep命令可以查找拥…

【STM32CubeMX串口通信详解】USART1 -- DMA发送 + DMA空闲中断 接收不定长数据

文章目录&#xff1a; 前言 一、准备工作 1、接线 2、新建工程 二、CubeMX的配置 1、USART1 配置 异步通信 2、通信协议参数 3、打开DMA发送、接收 三、发送操作、代码解释 四、printf 重定向到USART1 五、接收代码的编写 1、定义一个结构体变量&a…

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(4)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

金和OA jc6 Upload 任意文件上传漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

༺༽༾ཊ—设计-七个原则-模式—ཏ༿༼༻

第一原则&#xff1a;单一职责 一个类只负责一个功能领域中的相应职责&#xff1b; 接下来我们举一个代码例子&#xff0c;主要的功能实现是&#xff1a; 在主函数中运行调用描边工具和填充工具画矩形与圆形 首先写一个圆形类&#xff0c;里面只有一个方法用来返回string类型…

SAP中采购文档价格条件可以删除吗?

首先要声名&#xff0c;基于采购价格条件的严谨性和历史追朔需求&#xff0c;删除属于危险操作。不建议普通用户去执行操作。如果有兴趣&#xff0c;在测试系统中自行测试一下即可。正式系统中&#xff0c;还请慎重处理。 笔者公司日常不会去删除采购价格&#xff0c;日常处理…