前端工程化工具系列(十三)—— Rollup(v4.18.0):专注于库构建的 JavaScript 打包器

1 安装

1.1 针对 JavaScript

pnpm add -D rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs @rollup/plugin-babel rollup-plugin-postcss @rollup/plugin-terser

1.2 针对 TypeScript

在 JavaScript 基础上添加一些插件:

pnpm add -D rollup-plugin-typescript2

1.3 支持 Vue

pnpm add -D rollup-plugin-vue

1.4 其他插件

pnpm add -D  @rollup/plugin-json rollup-plugin-copy

2 配置

在项目根目录下创建 rollup.config.js 文件。

2.1 针对 JavaScript

/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable no-underscore-dangle */// 告诉 Rollup 如何查找外部模块
import resolve from '@rollup/plugin-node-resolve';
// 将 CommonJS 转换成 ES 模块
import commonjs from '@rollup/plugin-commonjs';
// 读取 Babel 配置
import { getBabelOutputPlugin } from '@rollup/plugin-babel';
// 压缩发布的js代码
import terser from '@rollup/plugin-terser';
// 处理 CSS 文件,将 CSS 文件放在js中
import postcss from 'rollup-plugin-postcss';
import path from 'path';
import { fileURLToPath } from 'url';const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);export default {// 插件plugins: [commonjs(),resolve(),postcss({// 与ts同级同名 | 自定义文件名称、路径extract: true,}),getBabelOutputPlugin({allowAllFormats: true,configFile: path.resolve(__dirname, 'babel.config.json'),}),terser({compress:{drop_console: true,pure_funcs: ['console.log'], // 删除console.log},}),],input: 'src/index.js',output: [{format: 'esm',file: 'dist/mylibrary.esm.js',},{name: 'MyLibrary',format: 'umd',file: 'dist/mylibrary.umd.js',},],
};

2.2 针对 TypeScript

在 JS 配置的基础上添加:

// 支持typescript
import typescript from 'rollup-plugin-typescript2'; // 加上这一行export default {// 插件plugins: [typescript2(), // 加上这一行getBabelOutputPlugin({...}),],
};

注意 tsconfig.json 一般为:

{"compilerOptions": {// 用来指定要使用的模板标准"module": "esnext",// 用于指定编译之后的版本"target": "esnext",// 用于选择模块解析策略,有"node"和"classic"两种类型"moduleResolution": "node",// 用于指定是否启动所有类型检查 严格模式"strict": true,// 用来指定是否允许编译JS文件"allowJs": true,// 用来指定声明文件或文件夹的路径列表,如果指定了此项,则只有在这里列出的声明文件才会被加载"typeRoots": ["./types","./node_modules/vue/types"],},// 指定一个匹配列表(属于自动指定该路径下的所有ts相关文件)"include": ["components/**/*","./*.js","./*.ts","./*.cjs","types/shims-vue.d.ts"],"exclude": ["node_modules"]
}

2.3 支持 Vue

// 支持vue文件
/* eslint-disable @typescript-eslint/naming-convention */
/* eslint-disable no-underscore-dangle */
// 支持vue文件
import vue from 'rollup-plugin-vue';
// 告诉 Rollup 如何查找外部模块
import resolve from '@rollup/plugin-node-resolve';
// 将 CommonJS 转换成 ES 模块
import commonjs from '@rollup/plugin-commonjs';
// 读取 Babel 配置
import { getBabelOutputPlugin } from '@rollup/plugin-babel';
// 压缩发布的js代码
import terser from '@rollup/plugin-terser';
// 处理 CSS 文件,将 CSS 文件放在js中
import postcss from 'rollup-plugin-postcss';
import path from 'path';
import { fileURLToPath } from 'url';
import typescript2 from 'rollup-plugin-typescript2';const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);export default {// 插件plugins: [vue(),commonjs(),resolve(),postcss({// 与ts同级同名 | 自定义文件名称、路径extract: true,}),typescript2(),getBabelOutputPlugin({allowAllFormats: true,configFile: path.resolve(__dirname, 'babel.config.json'),}),terser({compress:{drop_console: true,pure_funcs: ['console.log'], // 删除console.log},}),],input: 'index.ts',output: [{format: 'esm',file: 'dist/mycomponents.esm.js',},{name: 'MyComponents',format: 'umd',file: 'dist/mycomponents.umd.js',},], // 指出应将哪些模块视为外部模块external: ['vue',],
};

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

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

相关文章

Mybatis06-动态SQL

动态SQL 1.什么是动态SQL 什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 类似JSTL标签 官网描述: MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接…

乡村振兴的乡村旅游品质提升:提升乡村旅游服务质量,打造乡村旅游品牌,增强乡村旅游吸引力,打造具有旅游特色的美丽乡村

目录 一、引言 二、提升乡村旅游服务质量 1、完善基础设施建设 2、提升服务人员素质 3、规范服务流程 三、打造乡村旅游品牌 1、挖掘乡村文化特色 2、打造特色旅游产品 3、加强品牌宣传和推广 四、增强乡村旅游吸引力 1、创新旅游体验方式 2、打造旅游精品线路 3、…

【进阶篇-Day2:JAVA包、抽象类、接口、多态】

目录 1、包2、抽象类2.1 抽象类的定义2.2 抽象类的注意事项2.3 abstract关键字的冲突 3、接口3.1 接口的介绍3.2 接口中的成员特点3.2.1 接口中的成员特点3.2.2 类和接口之间的各种关系 3.3 抽象类和接口的对比 4、多态4.1 多态的介绍4.2 多态的前提4.3 多态的成员访问特点4.4 …

vuInhub靶场实战系列--Kioptrix Level #1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶机信息1.2 靶场配置 二、信息收集2.1 主机发现2.2 端口扫描2.2.1 masscan2.2.2 nmap 2.3 指纹识别2.4 目录扫描2.4.1 dirb…

华为云服务器-云容器引擎 CCE环境构建及项目部署

1、切换地区 2、搜索云容器引擎 CCE 3、购买集群 4、创建容器节点 通过漫长的等待(五分钟左右),由创建中变为运行中,则表明容器已经搭建成功 购买成功后,返回容器控制台界面 5、节点容器管理 6、创建redis工作负载 7、创建mysql工作负载 8、…

E: 仓库 “http://download...graphics:/darktable/xUbuntu_22.04 InRelease” 没有数字签名

问题 Ubuntu22.04装了darktable软件没装好,已经卸载了但是没卸载干净,终端使用 sudo apt update 出现的问题: 解决: sudo nano /etc/apt/sources.list.d/*darktable*.list找到了该软件的相关仓库条目:直接给他注释掉就行了。

重构大学数学基础_week04_从点积理解傅里叶变换

这周我们来看一下傅里叶变换。傅里叶变换是一种在数学和许多科学领域中广泛应用的分析方法,它允许我们将信号或函数从其原始域(通常是时间域或空间域)转换到频域表示。在频域中,信号被表示为其组成频率的幅度和相位,这…

Android13 Settings 左上角箭头图标点击无效

最近在修改A311D2方案固件,系统Settings发现很多bug 最明显的是左上角有个箭头样子的图标,通常认为是返回键,点击之后没有任何效果,目测这个是ActionBar的按键。 SettingsBaseActivity里面有一段这样的代码: // Th…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:大疆RoboMaster AI挑战赛

NVIDIA Jetson TX2助力机器人战队斩获RoboMaster AI挑战赛冠亚军 一个汇聚数百万机器人专家与研究人员的赛场,一场兼具工程、策略和团队挑战的较量,说的正是近日刚刚在澳大利亚布里斯本ICRA大会上闭幕的大疆RoboMaster AI挑战赛今年的冠军I Hiter以及亚军…

进程通信(IPC-Inter Process Communication)

进程之间的通信通过内核空间实现 IPC技术 ①管道(匿名管道/命名管道-FIFO队列) ②System V IPC(消息队列、信号量和共享内存) ③套接字(UNIX套接字&Internet套接字) ※信号 软中断,信号提供了一种处理异步事件的方法,作为进程通信的一种机制&am…

作文笔记11推荐一本书

what介绍书名作者出版社 why推荐理由挑一两点(内容,语言,情节,人物,思想),几点就分几段 how具体1、可以转述摘录精彩片段 2、结合书的情节、人物对话、插图来说明 3、引用别人评价 how如何挑选…

LeetCode714买卖股票的最佳时机含手续费

题目描述 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买…

责任链模式(行为型)

目录 一、前言 二、责任链模式 三、总结 一、前言 责任链模式(Chain of Responsibility Pattern)也叫职责链模式,是一种行为型设计模式,职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦…

第二十一讲:编译和链接

第二十一讲:编译和链接 1.翻译环境和运行环境1.1翻译环境1.2编译1.2.1预编译(预处理)1.2.2编译1.2.2.1词法分析1.2.2.2语法分析1.2.2.3语义分析 1.2.3汇编 1.3链接1.4运行环境1.5#define符号1.5.1#define的使用和原理1.5.2#define使用的陷阱注…

Python学习从0开始——Kaggle机器学习004总结2

Python学习从0开始——Kaggle机器学习004总结2 一、缺失值二、分类变量2.1介绍2.2实现1.获取训练数据中所有分类变量的列表。2.比较每种方法方法1(删除分类变量)方法2(序数编码)方法3独热编码 三、管道3.1介绍3.2实现步骤1:定义预处理步骤步骤2:定义模型步骤3:创建和评估管道 四…

【JAVA】javadoc,如何生成标准的JAVA API文档

目录 1.什么是JAVA DOC 2.标签 3.命令 1.什么是JAVA DOC 当我们写完JAVA代码,别人要调用我们的代码的时候要是没有API文档是很痛苦的,只能跟进源码去一个个的看,一个个方法的猜,并且JAVA本来就不是一个重复造轮子的游戏&#…

探索LLM 在金融领域有哪些潜在应用——通过使用 GPT-4 测试金融工程、市场预测和风险管理等 11 项任务

概述 近年来,用于自然语言理解和生成的人工智能技术在自然语言处理领域取得了突破性进展,OpenAI 的 GPT 和其他大规模语言模型在该领域取得了显著进步。这些模型通过先进的计算能力和算法,展示了处理复杂任务的能力,如理解复杂语…

vue2组件封装实战系列之tag组件

作为本系列的第一篇文章,不会过于的繁杂,并且前期的组件都会是比较简单的基础组件!但是不要忽视这些基础组件,因为纵观elementui、elementplus还是其他的流行组件库,组件库的封装都是套娃式的,很多复杂组件…

关于python中的关键字参数

在python语言中存在两种传参方式: 第一种是按照先后顺序来传参,这种传参风格,称为“位置参数”这是各个编程语言中最普遍的方式。 关键字传参~按照形参的名字来进行传参! 如上图所示,在函数中使用关键字传参的最大作…

【Java数据结构】—— 一维数组

一维数组 在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性: 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。有序性:数组中的元素是有序的&…