使用rollup打包vue3+ts+vite组件并发布至npm

news2025/1/20 5:55:43

创建项目(我使用的是yarn)

使用vite创建vue3+ts项目,这里不演示,自行创建

创建打包区域

  1. src下创建rollup文件夹;
  2. cmd控制台进入至rollup;
  3. 执行yarn --init,根据自己需求生成package.json文件,文件内容参考下方;
  4. 执行tsc --init,生成tsconfig.json文件,文件内容参考下方;
  5. 执行 yarn add -D typescript rollup-plugin-typescript2 glob @types/node;
  6. rollup文件夹下新建rollup.config.js文件,内容暂时为空;
  7. package.json增加执行命令lib,参考如下;
  8. 将项目下的vite-env.d.ts文件复制一份到rollup文件夹下
// package.json参考如下
{
  "name": "ag-tool",
  "version": "1.0.0",
  "description": "vue常用函数",
  "main": "index.ts",
  "author": "Agwenbi",
  "license": "MIT",
  "scripts": {
    "lib": "rollup -c --bundleConfigAsCjs"
  },
  "devDependencies": {
    "@types/node": "^20.2.3",
    "glob": "^10.2.6",
    "rollup": "^3.23.0",
    "rollup-plugin-typescript2": "^0.34.1",
    "typescript": "^5.0.4"
  }
}
// tsconfig.json参考
{
  "compilerOptions": {
    "target": "ES5", // 编译成es5
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "preserve",

    /* Linting */
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": true,
    "stripInternal": true,
    "noUnusedLocals": false, // 不检查未使用的变量
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "declaration": true // 生成d.ts文件
  }
}
// vite-env.d.ts文件参考如下,注意,下面那句不能去掉
/// <reference types="vite/client" />

declare module '*.vue' {
  import { DefineComponent } from 'vue';
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

目录参考如下

在这里插入图片描述在这里插入图片描述

src下新建demo文件夹,并新建index.vue与index.ts

// index.vue
<template>
  <div class="demo">
    <span>{{ num }}</span>
    <button @click="debounceAdd">防抖增加+</button>
    <button @click="throttleAdd">节流增加+</button>    
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { useDebounce, useThrottle } from '../utils';
const num = ref(0);
const debounceAdd = useDebounce(() => {
  num.value++;
});
const throttleAdd = useThrottle(() => {
  num.value++;
})
</script>

<style lang="scss" scoped>
.demo{
  background-color: red;
  span{
    color: green;
  }
}
</style>
// index.ts
import { App } from 'vue';
import demoCom from './index.vue';

demoCom.install = (Vue: App<Element>) => {
  Vue.component('demoCom', demoCom);
}
export default demoCom;

安装sass、rollup-plugin-vue、rollup-plugin-postcss

因为demo文件中使用了sass,所以我们需要在rollup中安装sass,注意是在rollup项目中,不是跟项目
yarn add sass rollup-plugin-vue rollup-plugin-postcss -D

rollup文件夹下的src文件夹新增index.ts文件

import { useDebounce, useThrottle } from './utils';
export { default as demoCom } from './demo';

export { useDebounce, useThrottle };
export default {
  useDebounce,
  useThrottle
}

配置rollup.config.js

import { defineConfig } from 'rollup';
import glob from 'glob';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import typescript from 'rollup-plugin-typescript2';
import vuePlugin from 'rollup-plugin-vue';
import postcss from 'rollup-plugin-postcss';

export default defineConfig({
  input: Object.fromEntries(
		glob.sync('src/**/*.ts').map(file => [
			path.relative(
				'src',
				file.slice(0, file.length - path.extname(file).length)
			),
			fileURLToPath(new URL(file, import.meta.url))
		])
	),
  output: [{// 输出两份文件,这一份用于上传到npm
		format: 'es',
		dir: 'lib'
	}, {// 用于跟项目测试
		format: 'es',
		dir: '../plugins'
	}],
  plugins: [
    typescript(),
    vuePlugin(),
    postcss()
  ]
})

打包测试

控制台输入yarn lib

启动调试项目,并在App.vue下使用demoCom组件

<template>
  <demoCom />
</template>

<script setup lang="ts">
import { demoCom } from './plugins';
</script>

<style scoped>
</style>

发布

  1. 在rollup文件夹下,执行终端命令;
  2. 执行npm who am i,检查自己是否有登录,如果没有,则执行npm adduser登录;
  3. 你可能需要执行这句代码,npm config set registry https://registry.npmjs.org/
  4. 执行npm publish,正常情况如下图所示,可在npm官网登录自己账号,查看是否有当前包

在这里插入图片描述
在这里插入图片描述

常用操作npm包的命令

删除整个包:npm unpublish 包名 --force
删除指定版本包:npm unpublish 包名@版本号

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

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

相关文章

KY222 打印日期

1.题目&#xff1a; 2.分析&#xff1a; 见代码。 3.我的代码&#xff1a; #include <iostream> using namespace std;class Date { public:Date(int year 1): _year(year) {}inline int GetMonthDay(int year, int month) {static int arr[13] { 0, 31, 28, 31, 3…

CE做业(6)

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 &#xff08;1&#xff09;剩余空间 取出剩余空间 &#xff08;1&#xff09;剩余空间 &#xff08;2&#xff09;判断是否<20 #…

自动化测试 selenium

目录 一、了解自动化测试和selenium 1. 什么是自动化测试&#xff1f;为什么要使用自动化测试&#xff1f; 2. 为什么使用selenium&#xff1f; 3. 环境部署 4. 什么是驱动&#xff1f;驱动的工作原理 5. selenium 的依赖代码 二、selenium 的基础语法 1. 元素的定位 …

二叉树的序列化(serialization)与反序列化(de-serialization)

目录 1. 概要 2. 用一维数组表示二叉树 3. python实现 3.1 二叉树节点的表示 3.2 串行化的python实现 3.3 反串行化的python实现 3.4 测试 1. 概要 本文简要介绍二叉树的序列化处理和反序列化处理及对应的python实现。 二叉树通常为了方便而以一维数组&#xff08;比如…

mysql 库的操作

文章目录 mysql 库的操作1. 创建数据库创建数据库案例 2. 字符集和校验规则查看系统默认的字符集合校验规则查看数据库支持的字符集查看数据库支持的字符集较验规则校验规则对数据库的影响 3. 操作数据库查看数据库显示创建语句修改数据库删除数据库查看数据库连接情况 mysql 库…

强化学习:值迭代和策略迭代

值迭代 通过上一章的学习&#xff0c;我们知道了贝尔曼最优方程的求解实际上分两部分&#xff0c;一是给定一个初始值 v k v_k vk​ 找到最优策略 π k 1 π_{k1} πk1​ &#xff0c;二是更新 v k 1 v_{k1} vk1​   下面&#xff0c;我们将详细剖析这个算法&#xff0…

Java字节流battle字符流

目录 Java字节流&#xff08;Byte Stream&#xff09; FileInputStream和FileOutputStream Java字符流&#xff08;Character Stream&#xff09; FileReader和FileWriter 如何在使用是区分什么时候用输出什么时候用输入 Write方法 close方法 Java中的close方法本身抛出…

基本定时器工作模式

计数和定时 BasicTimer支持8位或16位向上计数模式。当计数值大于等于比较寄存器&#xff08;CMPH、CMPL&#xff09;&#xff0c;会产生计数中断标志&#xff0c;并从自动重载寄存器&#xff08;LOADH、LOADL&#xff09;加载新的比较值。这样可以实时调整每个计数周期的计数长…

python自动化测试-最常用的自动化测试框架

在开始学习python自动化测试之前&#xff0c;先了解目前市场上的自动化测试框架有哪些&#xff1f; 随着技术的不断迭代更新&#xff0c;优胜劣汰也同样发展下来。从一开始工具型自动化&#xff0c;到现在的框架型&#xff1b;从一开始的能用&#xff0c;到现在的不仅能用&…

Qt6.5 grpc组件使用 + golang grpc server示例

1. 资料 1) Protobuf 开发文档 https://protobuf.dev/ 2) protobuf安装指南 https://grpc.io/docs/protoc-installation/ 3) protoc 下载 https://github.com/protocolbuffers/protobuf/releases/tag/v23.1 2. Qt grpc 组件 & 工具 1) Qt6.5 安装目录下 xx\Qt\6.5.…

实验7 多用户界面、菜单以及对话框程序设计

实验内容 1.设计一个具有两个页面的程序&#xff0c;第一个页面显示一张封面的图片&#xff0c;第二个页面显示“欢迎进入本系统”,这两个页面之间能相互切换。    2.设计一个具有3个选项的菜单程序&#xff0c;当单击每个选项时&#xff0c;分别跳转到3个不同的页面。 3.设…

快速搭建一个 Kubernetes+Crane 环境,以及如何基于 Crane 优化你的集群和应用初体验

文章目录 一、活动介绍二、环境搭建三、安装本地的 Kind 集群和 Crane 组件四、界面截图五、主要功能六、整体架构七、Crane的优势八、总结参考文献 一、活动介绍 Crane 是由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目&#xff0c;遵循 FinOps 标准&#xff0c;…

零基础如何入门网络安全?一般人还真不行

前景 很多零基础朋友开始将网络安全作为发展的大方向&#xff0c;的确&#xff0c;现如今网络安全已经成为了一个新的就业风口&#xff0c;不仅大学里开设相关学科&#xff0c;连市场上也开始大量招人。 那么网络安全到底前景如何&#xff1f;大致从市场规模、政策扶持、就业…

信息收集-目录信息

&#xff08;一&#xff09;目录结构 网页的目录结构跟整个网站的布局有关&#xff0c;收集到的信息可以包括目录名称、目录结构、目录所包含的文件、文件类型、文件大小等。收集到的信息有助于评估网站的安全性、了解网站的架构和目录结构&#xff0c;甚至可能有助于发现敏感…

3个月出国|材料科学老师自费赴韩国访学

K老师指定韩国为访学的目标国家&#xff0c;希望专业匹配&#xff0c;尽快出国。最终我们获得了韩国庆北大学的邀请函&#xff0c;其学校名气、专业匹配度及导师影响力都符合K老师的要求。本案例从开始委托我们申请到最终出国&#xff0c;仅仅用时3个月。 K老师背景&#xff1a…

基于pytest的接口测试框架详解,一定有你想知道的

目录 需求一&#xff1a;一套用例可以测试多套环境 需求二: 可以被jenkins调度执行 需求三 拥有测试报告 需求四&#xff1a;接口中某些字段值在每次请求中不重复 需求五&#xff1a; 可以多接口关联测试 需求六 构造的表数据可以和接口字段数据关联 需求七 pytest用例和…

java内部类和异常类1

文章目录 一、Java内部类二、Java匿名类总结 一、Java内部类 成员变量和方法&#xff0c;实际上&#xff0c;类还有一种成员&#xff1a;内部类。在一个类中定义另一个类&#xff0c;我们把这样的类称作内部类&#xff0c;包含内部类的类称作内部类的外嵌类。 内部类和外嵌类…

编辑距离00

题目链接 爬楼梯 题目描述 注意点 word1 和 word2 由小写英文字母组成返回将 word1 转换成 word2 所使用的最少操作数 解答思路 本题本质上的操作只有三种&#xff1a;在单词 A 中插入一个字符&#xff1b;在单词 B 中插入一个字符&#xff1b;修改单词 A 的一个字符&…

OpenGL之元素缓冲对象

文章目录 EBO(元素缓冲对象)创建元素缓冲对象创建两个相邻不同颜色的三角形 EBO(元素缓冲对象) 素缓冲对象(Element Buffer Object&#xff0c;EBO)&#xff0c;也叫索引缓冲对象(Index Buffer Object&#xff0c;IBO)。要解释元素缓冲对象的工作方式最好还是举个例子&#xf…

【Python redis】零基础也能轻松掌握的学习路线与参考资料

Python redis是一种非常流行的缓存数据库&#xff0c;对于Python Web应用程序开发非常有用&#xff0c;能快速地处理大量的数据请求。Python redis的学习路线需要对Python语言有深刻的理解&#xff0c;并了解使用redis的API。在掌握了Python redis的基本知识后&#xff0c;就可…