rollup打包vue组件并发布到npm的方法
作者:UzumakiHan 发布时间:2024-05-22 10:43:32
个人认为rollup在打包组件的实现方式比用webpack方便,webpack应该是比较适合打包大型的工程项目,而rollup适合打包一些平时在项目中的组件
rollup中文文档:简介 | rollup.js 中文文档 | rollup.js中文网 (rollupjs.com)
这次打包一个滚动加载更多的组件,因为平时用vant是vant-list 会遇到一些问题,例如滚动到底部没有触发加载更多逻辑。
首先在项目根目录安装rollup
npm i rollup -D
安装一些rollup常用到的plugins
基本的工程化插件
@rollup/plugin-node-resolve 帮助 rollup 识别外部模块
@rollup/plugin-babel babel插件 将es6+转为es5
rollup-plugin-copy 直接复制静态文件
@rollup/plugin-terser 压缩代码
@rollup/plugin-commonjs 将commonjs模块转为es模块
@rollup/plugin-typescript typescript插件
@rollup/plugin-alias 路径别名
npm i @rollup/plugin-babel @rollup/plugin-commonjs @rollup/plugin-node-resolve @rollup/plugin-terser rollup-plugin-vue @rollup/plugin-typescript @babel/core - D
处理Vue文件
rollup-plugin-vue
用于处理.vue文件。vue2和vue3项目所用的rollup-plugin-vue版本不一样,vue的编译器也不一样。
vue2:rollup-plugin-vue^5.1.9 + vue-template-compiler
vue3:rollup-plugin-vue^6.0.0 + @vue/compiler-sfc
npm i vue-template-compiler @vue/compiler-sfc -D
vue2和vue3版本的plugins可以这样在devDependencies中指定,,然后npm install
"devDependencies":{
"rollup-plugin-vue2": "npm:rollup-plugin-vue@^5.1.9",
"rollup-plugin-vue3": "npm:rollup-plugin-vue@^6.0.0",
}
打包CSS插件
rollup-plugin-postcss 识别css和预处理文件 (如果css,rollup-plugin-postcss需要配合sass使用)
这里我以分别vue2和vue3各创建一个rollup.config.js
vue2-----rollup.vue2.config.js,配置如下
import resolve from '@rollup/plugin-node-resolve';
import vue2 from 'rollup-plugin-vue2';
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import terser from '@rollup/plugin-terser';
import json from '@rollup/plugin-json';
import postcss from 'rollup-plugin-postcss'
import typescript from "@rollup/plugin-typescript";
export default {
input: 'src/index.ts',
output: {
globals: {
vue: "Vue"
}
},
plugins: [
resolve(),
typescript(),
terser(),
json(),
vue2({
css: true,
compilerTemplate: true,
preprocessStyles: true
}),
babel({
exclude: "**/node_modules/**"
}),
commonjs(),
postcss()
]
}
vue3-----rollup.vue3.config.js,配置如下
import resolve from '@rollup/plugin-node-resolve';
import vue3 from 'rollup-plugin-vue3';
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import terser from '@rollup/plugin-terser';
import json from '@rollup/plugin-json';
import postcss from 'rollup-plugin-postcss'
import typescript from '@rollup/plugin-typescript';
export default {
input: 'src/index.ts',
output: {
globals: {
vue: "Vue"
}
},
plugins: [
resolve(),
typescript(),
terser(),
json(),
vue3({
css: true,
compilerTemplate: true,
preprocessStyles: true
}),
babel({
exclude: "**/node_modules/**"
}),
commonjs(),
postcss()
]
}
配置打包命令,这里我把cjs、umd、es、iife都分别打包出来了
"scripts": {
"build": "npm run build:vue3 && npm run build:vue2",
"build:vue2": "rimraf dist/vue2/* && npm run build:umdvue2 && npm run build:esvue2 && npm run build:unpkgvue2 && npm run build:cjsvue2",
"build:umdvue2": "rollup -c rollup.vue2.config.js --format umd --name mList --file dist/vue2/index.umd.js",
"build:esvue2": "rollup -c rollup.vue2.config.js --format es --file dist/vue2/index.esm.js",
"build:unpkgvue2": "rollup -c rollup.vue2.config.js --format iife --file dist/vue2/index.min.js",
"build:cjsvue2": "rollup -c rollup.vue2.config.js --format cjs --file dist/vue2/index.cjs.js",
"build:vue3": "rimraf dist/vue3/* && npm run build:umdvue3 && npm run build:esvue3 && npm run build:unpkgvue3 && npm run build:cjsvue3",
"build:umdvue3": "rollup -c rollup.vue3.config.js --format umd --name mList --file dist/vue3/index.umd.js",
"build:esvue3": "rollup -c rollup.vue3.config.js --format es --file dist/vue3/index.esm.js",
"build:unpkgvue3": "rollup -c rollup.vue3.config.js --format iife --file dist/vue3/index.min.js",
"build:cjsvue3": "rollup -c rollup.vue3.config.js --format cjs --file dist/vue3/index.cjs.js"
},
打包后的文件
然后可以发布到npm
npm地址:hfex-list - npm (npmjs.com)
github地址:UzumakiHan/hfex-list: 下拉加载更多组件 (github.com)
来源:https://blog.csdn.net/Hhjian524/article/details/130816796
猜你喜欢
- /** * 得到XML文件属性的集合对象 * @param x
- 这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- MySQL数据库中文问题的解决方法:1.my.ini MySQL配置文件设置[client]default-character-set=gb
- 前言如果你之前没用过进度条,八成是觉得它会增加不必要的复杂性或者很难维护,其实不然。要加一个进度条其实只需要几行代码。from alive_
- 程序测试是展现BUG存在的有效方式,但令人绝望的是它不足以展现其缺位。——艾兹格·迪杰斯特拉(Edsger W. Dijkstra)算法审查
- 学习目的:掌握下拉列表框的用法,并理解AutoPostBack属性; 理解IsPoskBack及用法; 初识DataTable的
- 今日需求其实就是把Word中的表格转到Excel中,顺便做一个调整。这个需求在实际工作中,很多人还是经常碰到的!如果单单是两个表格,那只要简
- //获得视频文件的缩略图function getVideoCover($file,$time,$name) { &nb
- 首先介绍两种编码方式硬编码和onehot编码,在模型训练所需要数据中,特征要么为连续,要么为离散特征,对于那些值为非数字的离散特征,我们要么
- 前言:集合分为可变集合和不可变集合两种,所以对其的增删改查操作要看集合的类型来决定。不可变的数据当然不能增删改,只能查询,可变集合则限制稍微
- 1.使用Qt Design设计一个空白窗口(注意:我是使用MainWindow创建的窗口)2.使用PyUIC将.ui文件转换成.py文件右键
- 本文实例分析了Python中的异常处理try/except/finally/raise用法。分享给大家供大家参考,具体如下:异常发生在程序执
- 问题现象从阿里云上镜像过来的一台数据库服务器,SQL Agent服务启动不了,提示服务启动后停止。(原数据库服务器是正常的,怀疑跟镜像有关)
- 可能由于操作系统不同,或者在安装SQL 2008的时候已经安装SQL其他版本,因此可能会遇到问题,那么这时我们的实际经验和动手测试的能力也是
- 本文实例为大家分享了JavaScript实现烟花特效的具体代码,供大家参考,具体内容如下本特效使用面向对象编程分析OOA点击触发事件烟花运动
- 问题联邦学习原始论文中给出的FedAvg的算法框架为:参数介绍: K 表示客户端的个数, B表示每一次本地更新时的数据量, E 表示本地更新
- 安装pdfminer 库windows 下安装pdfminer3kpip install pdfminer3kLiunx 下安装pdfmin
- 前言上篇说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则!pytest执行用
- 数模比赛中,常常需要对数据进行处理和分析,但
- 先说需求: 1、django 自带了admin后管,如果我们需要使用,只需把我们定义的models注册即可;2、但如果只是简单注册,那显示的