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

目录

  一、vue环境搭建

1、创建App.vue

2、修改main.ts

3、修改vite.config.ts

二、插件配置

1、创建插件

2、开发调试

3、打包配置

4、package.json文件配置

5、执行打包命令 pnpm build

6、修改index.d.ts


目录

  一、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当中配置文件打包:

 安装vite-plugin-dts,此插件的作用:为打包的库里加入声明文件(即生成:.d.ts文件) 

pnpm add vite-plugin-dts -D
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import dts from 'vite-plugin-dts';
import viteCompression from 'vite-plugin-compression';export default ({ mode, command }) => {console.log('🚀 ~ command:', command);console.log('🚀 ~ mode:', mode);return defineConfig({plugins: [vue(),dts(),viteCompression({verbose: true,disable: false, // 不禁用压缩deleteOriginFile: false, // 压缩后是否删除原文件threshold: 10240, // 压缩前最小文件大小algorithm: 'gzip', // 压缩算法ext: '.gz' // 文件类型})],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"}
}

5、执行打包命令 pnpm build

生成目录如下:

 

6、修改index.d.ts

import type { App } from 'vue';export interface InstallOptions {/** @default `ElIcon` */prefix?: string;
}
// eslint-disable-next-line no-unused-vars
declare const _default: (app: App, { prefix }?: InstallOptions) => void;
export default _default;
export { default as ExcelExportJson } from './dist/src/components/ExcelExportJson.vue';
export { default as JsonExportExcel } from './dist/src/components/JsonExportExcel.vue';

配置号以后,就可以登录npm发布,Github代码仓库

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

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

相关文章

华为设备vlan下配置MSTP,STP选举

核心代码,不同实例&#xff0c;承载不同流量&#xff0c;为每个实例设置一个根网桥达到分流的效果 stp region-config //进入stp区域的设置 region-name R1 //区域命名为R1 instance 1 vlan 10 …

蒙特卡洛概率抽样简介

蒙特卡罗方法是一类对概率分布进行随机抽样的技术。 在许多问题领域中&#xff0c;描述或估计概率分布相对简单&#xff0c;但计算所需的数量却很棘手。这可能是由于多种原因造成的&#xff0c;例如domain的随机性质或随机变量的指数级数量增长。 相反&#xff0c;可以通过使…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子明细实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

【FastAPI】请求体

在 FastAPI 中&#xff0c;请求体&#xff08;Request Body&#xff09;是通过请求发送的数据&#xff0c;通常用于传递客户端提交的信息。FastAPI 使得处理请求体变得非常容易。 请求体是客户端发送给 API 的数据。响应体是 API 发送给客户端的数据 注&#xff1a;不能使用 …

Mantle: A Programmable Metadata Load Balancer for the Ceph File System——论文泛读

SC 2015 Paper 元数据论文阅读汇总 问题 优化Ceph的元数据局部性和负载平衡。 现有方法 提高元数据服务性能的最常见技术是在专用的元数据服务器&#xff08;MDS&#xff09;节点之间平衡负载 [16, 25, 26, 21, 28]。常见的方法是鼓励独立增长并减少通信&#xff0c;使用诸…

Qt 状态机框架:The State Machine Framework (一)

传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 一、什么是状态机框架 状态机框架提供了用于创建和执行状态图/表[1]的类。这些概念和表示法基于Harel的Statecharts&#xff1a;一种复杂系统的可视化形式&#xff…

12AOP面向切面编程/GoF之代理模式

先看一个例子&#xff1a; 声明一个接口&#xff1a; // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口&#xff1a; package com.sunsplanter.prox…

Controller层自定义注解拦截request请求校验

一、背景 笔者工作中遇到一个需求&#xff0c;需要开发一个注解&#xff0c;放在controller层的类或者方法上&#xff0c;用以校验请求参数中(不管是url还是body体内&#xff0c;都要检查&#xff0c;有token参数&#xff0c;且符合校验规则就放行)是否传了一个token的参数&am…

Linux中的yum源仓库和NFS文件共享服务

一.yum简介 1.1 yum简介 yum&#xff0c;全称“Yellow dog Updater, Modified”&#xff0c;是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键&#xff0c;可以一键下载&#xff0c;一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…

普通人做VR全景创业,优势表现在哪里?

伴随着5G时代的到来&#xff0c;快节奏的生活带动了“宅经济”、“云生活”的发展&#xff0c;消费者也越来越依赖智能化设备给生活带来的便利。因此VR全景将成为未来消费升级的一种新媒介&#xff0c;VR全景能够将企业环境以及产品、服务等信息更直观、透明化地展示给用户&…

01章【JAVA开发入门】

计算机基本概念 计算机组成原理 计算机组装 计算机&#xff1a;电子计算机&#xff0c;俗称电脑。是一种能够按照程序运行&#xff0c;自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成&#xff0c;没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、…

【GCC】6 接收端实现:周期构造RTCP反馈包

基于m98代码。GCC涉及的代码,可能位于:webrtc/modules/remote_bitrate_estimator webrtc/modules/congestion_controller webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc webrtc 之 RemoteEstimatorProxy 对 remote_bitrate_estimator 的 RemoteEstimato…