当前位置: 首页 > news >正文

vue3+vite+ts 发布自定义组件到npm

vue3+vite 发布自定义组件到npm

  • 初始化项目
  • 编写组件
  • 配置打包
  • 组件上传到npm
  • 测试组件库

初始化项目

// 创建项目
pnpm create vite vue-test-app --template vue-ts// 运行项目
cd vite vue-test-app
pnpm install
pnpm run dev

编写组件

1、根目录下创建packages目录作为组件的开发包,目录下的index.ts文件作为整个组件库的出口文件,导出组件。

//index.ts
import type { App } from 'vue'
import MyButton from './Button'
import MyTag from './Tag'// 所有组件列表
const components = [MyButton,MyTag
]// 定义 install 方法
const install = (app: App): void => {// 遍历注册所有组件/*component.__name ts报错Argument of type 'string | undefined' is not assignable to parameter of type 'string'.Type 'undefined' is not assignable to type 'string'.ts(2345)解决方式一:使用// @ts-ignore解决方式二:使用类型断言 尖括号语法(component.__name) 或 as语法(component.__name as string)*/components.forEach(component => app.component(component.__name as string, component))
}export {MyButton,MyTag
}const VueTestUI = {install
}export default VueTestUI

2、编写组件,创建packages/Button目录,在该目录下创建Button.vue和index.ts文件。

// Button.vue
<template><button class="MyButton" type="button">我是一个按钮组件</button></template><script lang="ts">export default {name: 'MyButton', //组件名称,必须设置data () {return {}},methods: {},filters: {},created () {}}
</script><style>.MyButton {color: red;}
</style>
// index.ts
import type { App } from 'vue'
import MyButton from "./Button.vue"// 使用install方法,在app.use挂载
MyButton.install = (app: App) => {app.component(MyButton.__name as string, MyButton) //注册组件
}export default MyButton

配置打包

1、修改vite.config.ts配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],base:'/',build:{lib:{entry: path.resolve(__dirname, './packages/index.ts'), //指定组件编译入口文件name: 'vueMoUI',fileName: 'vue-mo-ui'},//库编译模式配置rollupOptions: {external: ['vue', 'swiper', '@vuepic/vue-datepicker', 'qrcode'],output: {// format: 'es', // 默认es,可选 'amd' 'cjs' 'es' 'iife' 'umd' 'system'exports: 'named',globals: { //在UMD构建模式下为这些外部化的依赖提供一个全局变量vue:'Vue',// 'vue-router': 'VueRouter', // 引入vue-router全局变量,否则router.push将无法使用swiper: 'Swiper','@vuepic/vue-datepicker': 'VueDatePicker',qrcode: 'qrcode'}}},/** 设置为 false 可以禁用最小化混淆,或是用来指定使用哪种混淆器。默认为 Esbuild,它比 terser 快 20-40 倍,压缩率只差 1%-2%。注意,在 lib 模式下使用 'es' 时,build.minify 选项不会缩减空格,因为会移除掉 pure 标注,导致破坏 tree-shaking。当设置为 'terser' 时必须先安装 Terser。(yarn add terser -D)*/minify: 'terser', // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效terserOptions: { // 在打包代码时移除 console、debugger 和 注释compress: {/* (default: false) -- Pass true to discard calls to console.* functions.If you wish to drop a specific function call such as console.info and/orretain side effects from function arguments after dropping the functioncall then use pure_funcs instead*/drop_console: true, // 生产环境时移除consoledrop_debugger: true},format: {comments: false // 删除注释comments}}}
})

2、执行打包pnpm run build,会在dist文件夹下生成如下文件
在这里插入图片描述
3、修改package.json

//package.json{"name": "vue-mo-ui","private": false,"version": "0.0.0","author": "FenceRain","description": "组件发布npm练习","type": "module","license": "MIT","files": ["dist"],"main": "./dist/vue-mo-ui.umd.cjs","module": "./dist/vue-mo-ui.js","exports": {"./dist/style.css": "./dist/style.css","./css": "./dist/style.css",".": {"import": "./dist/vue-mo-ui.js","require": "./dist/vue-mo-ui.umd.cjs"}},"scripts": {"dev": "vite","build": "vue-tsc && vite build","preview": "vite preview"},"dependencies": {"terser": "^5.19.2","vue": "^3.3.4","vue-mo-ui": "^0.0.0"},"devDependencies": {"@types/node": "^20.5.7","@vitejs/plugin-vue": "^4.2.3","typescript": "^5.0.2","vite": "^4.4.5","vue-tsc": "^1.8.5"}
}

组件上传到npm

1、需要先在npm官网注册自己的npm账户,链接:https://www.npmjs.com/
2、查询是否已存在包名,可以在npm官网查,也可以使用 npm view 包名
3、上传包必须使用npm官方源,如果配置的是其他镜像需要修改回来

  • 查看当前源:npm config get registry
  • 切换为npm源:npm config set registry https://registry.npmjs.org

4、添加自己的账户

  • npm lgoin 回车按照提示操作
  • 登录完成之后可以通过npm who am i查看是够登录成功,出现自己的账号即成功

5、上传包,没有报错就是上传成功了,可以登录npm查看到自己的包

npn publish

在这里插入图片描述

测试组件库

1、安装组件

pnpm install vue-mo-ui

2、导入使用

<script setup lang="ts">
import {MyButton, MyTag} from 'vue-mo-ui'
</script><template><MyButton></MyButton><MyTag></MyTag>
</template><style scoped></style>

3、如果样式没有加载就在main.ts中导入组件的样式文件

import "../node_modules/vue-mo-ui/dist/style.css"

在这里插入图片描述

相关文章:

vue3+vite+ts 发布自定义组件到npm

vue3vite 发布自定义组件到npm 初始化项目编写组件配置打包组件上传到npm测试组件库 初始化项目 // 创建项目 pnpm create vite vue-test-app --template vue-ts// 运行项目 cd vite vue-test-app pnpm install pnpm run dev编写组件 1、根目录下创建packages目录作为组件的开…...

mybatis使用xml形式配置

以这个注解形式的查询代码为例 Select("select * from emp where name like concat(%,#{name},%) and gender #{gender} and entrydate between #{begin} and #{end} order by update_time desc ")public List<Emp> list(String name, Short gender, LocalDat…...

开源简历生成器OpenResume

什么是 OpenResume &#xff1f; OpenResume 是一个功能强大的开源简历生成器和简历解析器。OpenResume 的目标是为每个人提供免费的现代专业简历设计&#xff0c;让任何人都能充满信心地申请工作。 OpenResume 有 5 个核心特点&#xff1a; 特征描述1. 实时UI更新当您输入简历…...

AI变现之Gpts搞流量+赚钱

文章目录 Gpts | 搞流量 + 赚钱1.项目介绍2.项目分析3.项目实操4.变现路径Gpts | 搞流量 + 赚钱 1.项目介绍 这两天 AI 圈最火的莫过于 OpenAI 开发者大会公布的一个爆炸产品 Gpts 了,大家都知道这个肯定是一个划时代的产品,也绝对是一个风口,虽然官方还没有公布到底怎么通…...

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十六)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...

Elasticsearch文档操作

一、Elasticsearch的CURD 1、CURD之Create PUT lqz/doc/1 {"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直…...

聊一聊go的单元测试(goconvey、gomonkey、gomock)

文章目录 概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests 二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例 三、基准测试和模糊测试3.1、基准测试3.2、模糊测试 四、总结4.1、小结4.2、其他4.3、参考资料 概要…...

Positive Technologies 利用 PT Cloud Application Firewall 保护中小型企业的网络资源

云产品按月订购&#xff0c;无需购买硬件资源 PT Cloud Application Firewall 是 Positive Technologies 推出的首个用于保护网络应用程序的商用云产品。Web 应用层防火墙 (web application firewall, WAF) 现在可以通过 技术合作伙伴——授权服务商和云提供商以订购方式提供1…...

深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密

探索序列建模的基础知识和应用。 简介 序列建模是许多领域的一个重要问题&#xff0c;包括自然语言处理 (NLP)、语音识别和语音合成、时间序列预测、音乐生成和「生物信息学」。所有这些任务的共同点是它们需要坚持。接下来的事情的预测是基于历史的。例如&#xff0c;在“哈桑…...

vue项目本地开发构建速度优化 hard-source-webpack-plugin

1、为啥要优化本地构建速度 有些项目因为项目需求点多、功能复杂、管理混乱、引入第三方插件/样式库过多、本身项目页面较多、文件较多等等原因&#xff0c;会导致项目体积变大、本地构建速度明显变慢&#xff0c;这时就需要对项目webpack进行一些设置来提高打包效率、加快打包…...

燕之屋通过港交所聆讯:苦战IPO十余年,黄健等人提前精准套现

撰稿|行星 来源|贝多财经 11月19日&#xff0c;厦门燕之屋生物工程股份有限公司&#xff08;下称“燕之屋”&#xff09;通过港交所聆讯&#xff0c;并披露了聆讯后资料集&#xff08;即招股书&#xff09;&#xff0c;中金公司和广发证券为其联席保荐人。 据贝多财经了解&a…...

【51单片机系列】C51基础

本文内容是关于C51语言的基础内容的&#xff0c;包括C51的数据类型、变量、运算符、函数以及reg52.h文件中的内容&#xff0c;有些与C中相同的内容没有记录在此&#xff0c;比如常量、某些变量、表达式、程序结构、数组等没有涉及。 文章目录 C51的数据类型1. C51中的基本数据类…...

openssl1.0.2版本Windows安装问题

之前安装过1.1版本&#xff0c;Windows环境下C 安装OpenSSL库 源码编译及使用&#xff08;VS2019&#xff09;_vs2019安装openssl_肥宝Fable的博客-CSDN博客 后来发现linux编译不过&#xff0c;以为是版本问题&#xff0c;相差太大&#xff0c;所以降一下版本&#xff0c;以免…...

【Java 进阶篇】Ajax 实现——原生JS方式

大家好&#xff0c;欢迎来到这篇关于原生 JavaScript 中使用 Ajax 实现的博客&#xff01;在前端开发中&#xff0c;我们经常需要与服务器进行数据交互&#xff0c;而 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于创建异步请求的技术&#xff0c;它…...

Spring Cloud Stream实践

概述 不同中间件&#xff0c;有各自的使用方法&#xff0c;代码也不一样。 可以使用Spring Cloud Stream解耦&#xff0c;切换中间件时&#xff0c;不需要修改代码。实现方式为使用绑定层&#xff0c;绑定层对生产者和消费者提供统一的编码方式&#xff0c;需要连接不同的中间…...

高精度算法【Java】(待更新中~)

高进度加法 在Java中可以使用BigInteger进行高精度计算&#xff0c;除此也可以仿照竖式相加的计算原理进行计算。 BigInteger 提供所有 Java 的基本整数操作符的对应物&#xff0c;并提供 java.lang.Math 的所有相关方法。另外&#xff0c;BigInteger 还提供以下运算&#xff1…...

说一说HTTP1.0、1.1、2.0版本区别和优化

说一说HTTP1.0、1.1、2.0版本区别和优化 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的应用层协议。 在不同的版本中&#xff0c;HTTP经历了一系列的演进和改进&#xff0c;主要包括HTTP 1.0、HTTP 1.1和HTTP 2.0。 下面详细解释它们之间…...

51.Sentinel微服务保护

目录 &#xff08;1&#xff09;初识Sentinel。 &#xff08;1.1&#xff09;雪崩问题及解决方案。 &#xff08;1.1.1&#xff09;雪崩问题。 &#xff08;1.1.2&#xff09;解决雪崩问题的四种方式。 &#xff08;1.1.3&#xff09;总结。 &#xff08;1.2&#xff09;…...

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `ajax()`

嗨&#xff0c;亲爱的读者们&#xff01;欢迎来到这篇关于使用 jQuery 中的 ajax() 方法进行 Ajax 请求的博客。在前端开发中&#xff0c;jQuery 提供了简便而强大的工具&#xff0c;其中 ajax() 方法为我们处理异步请求提供了便捷的解决方案。无需手动创建 XMLHttpRequest 对象…...

I.MX6ULL开发笔记(一)——环境搭建、镜像烧录、网络连接

本系列为使用野火IMX6ULL开发的学习笔记&#xff0c;使用的开发板为如下&#xff1a; 具有的硬件资源有如下&#xff1a; 文章目录 一、环境搭建Win11安装WSL安装串口驱动安装串口工具安装Ubuntu与windows文件互传 二、镜像烧录修改串口终端登录前信息 三、fire-config工具配…...

低代码组件“看似简单,上线即崩”?20年专家拆解5个被90%团队忽略的线程安全与事务传播陷阱

第一章&#xff1a;低代码组件“看似简单&#xff0c;上线即崩”的真相低代码平台承诺“拖拽即交付”&#xff0c;但真实生产环境中&#xff0c;大量业务系统在上线后数小时内便出现表单提交失败、数据丢失、权限错乱或页面白屏等问题。这些故障并非源于复杂逻辑&#xff0c;而…...

如何让Apple Touch Bar在Windows完美运行?DFRDisplayKm驱动全攻略

如何让Apple Touch Bar在Windows完美运行&#xff1f;DFRDisplayKm驱动全攻略 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm Apple Touch Bar作为MacBook Pro的特…...

python基于Hadoop的就业推荐系统的设计与实现 Spark+Hadoop+Hive 大数据 深度学习 机器学习

前言随着就业市场信息不对称问题日益突出&#xff0c;开发高效的智能就业推荐系统 成为当务之急。本研究基于Hadoop生态系统&#xff0c;设计并实现了一套面向求职者和招聘企业的智能推荐系统。系统采用分布式架构&#xff0c;后端基于Django框架实现业务逻辑处理&#xff0c;前…...

Ubuntu安装中文输入法后无法输入中文----问题分析及解决方法

问题&#xff1a;之前在Ubuntu系统上安装过搜狗输入法&#xff0c;且能正常输入中文。但重启之后无法调出&#xff0c;Shift切换也不管用&#xff0c;依旧是英文原因分析&#xff1a;后台进程&#xff08;Fcitx&#xff09;卡死或崩溃了解决方法&#xff1a;重启Fcitx输入法框架…...

PyTorch 2.8镜像实际效果:torch.compile+FlashAttention-2双优化下的吞吐量提升对比

PyTorch 2.8镜像实际效果&#xff1a;torch.compileFlashAttention-2双优化下的吞吐量提升对比 1. 镜像环境与技术亮点 PyTorch 2.8深度学习镜像为开发者提供了一个开箱即用的高性能计算环境。基于RTX 4090D 24GB显卡和CUDA 12.4的深度优化组合&#xff0c;这个镜像特别适合需…...

Linux I2C设备驱动避坑指南:以MPU6050为例,详解i2c_transfer与数据读取失败

Linux I2C设备驱动深度调试&#xff1a;MPU6050通信稳定性问题全解析 当你在嵌入式系统中集成MPU6050传感器时&#xff0c;是否遇到过这样的场景&#xff1a;设备树配置正确&#xff0c;驱动代码逻辑清晰&#xff0c;但传感器数据读取却间歇性失败&#xff0c;内核日志中频繁出…...

运算放大器与比较器的本质区别及应用指南

1. 运算放大器与比较器的本质区别在电子电路设计中&#xff0c;运算放大器&#xff08;Op-Amp&#xff09;和电压比较器&#xff08;Comparator&#xff09;是两种极为常见却又经常被混淆的器件。它们在外观符号上几乎一模一样&#xff1a;都有五个引脚——正负电源端、同相与反…...

吃透哈希槽:Redis集群核心分片机制,从原理到实战避坑

在分布式Redis集群中&#xff0c;“数据如何均匀分片、节点如何高效协同”是核心难题。上一篇我们详解了一致性哈希&#xff0c;它通过环形结构解决了传统哈希的节点迁移痛点&#xff0c;但在Redis集群的实际落地中&#xff0c;官方并没有采用一致性哈希&#xff0c;而是选择了…...

终极指南:如何彻底解决Colab运行text-generation-webui的Matplotlib后端错误

终极指南&#xff1a;如何彻底解决Colab运行text-generation-webui的Matplotlib后端错误 【免费下载链接】text-generation-webui The original local LLM interface. Text, vision, tool-calling, training, and more. 100% offline. 项目地址: https://gitcode.com/GitHub_…...

Multisim课程设计救星:从卡诺图到仿真,手把手搞定五人表决器(附源文件)

五人表决器数字电路设计实战&#xff1a;从卡诺图到Multisim仿真的全流程解析 第一次拿到数字电路课程设计任务书时&#xff0c;看着"五人表决器"这个题目&#xff0c;我的大脑和实验室的示波器一样一片空白。直到在面包板上成功点亮第一个LED指示灯&#xff0c;才真…...