rollup打包起手式
使用Rollup打包JavaScript
rollup是一款小巧的javascript模块打包工具,更适合于库应用的构建工具;可以将小块代码编译成大块复杂的代码,基于ES6 modules,它可以让你的 bundle 最小化,有效减少文件请求大小,vue在开发的时候用的是webpack,但是最后将文件打包在一起的时候用的是 rollup.js
全局安装
npm install --global rollup
创建第一个bundle,创建main.js
console.log(111);
执行 rollup --input main.js --output bundle.js --format cjs, 该命令编译 main.js 生成 bundle.js, --format cjs 意味着打包为 node.js 环境代码, 请观察 bundle.js 文件内容
'use strict'
console.log(111);
命令行参数简介:
-
输入(input -i/–input)
String 这个包的入口点 (例如:你的 main.js 或者 app.js 或者 index.js) -
文件(file -o/–output.file)
String 要写入的文件。也可用于生成 sourcemaps,如果适用 -
格式(format -f/–output.format)
关于format选项
rollup提供了五种选项:
格式化成如下文件
- amd – 异步模块定义,用于像RequireJS这样的模块加载器
- cjs – CommonJS,适用于 Node 和 Browserify/Webpack
- es – 将软件包保存为ES模块文件
- iife – 一个自动执行的功能,适合作为
使用配置文件
rollup.config.js
export default {input: 'src/main.js',output: {file: 'bundle.js',format: 'cjs'}
};
执行 rollup -c rollup.config.js启动配置项;
rollup 提供了 --watch / -w 参数来监听文件改动并自动重新打包
使用rollup插件
rollup.config.js
npm install --save-dev rollup-plugin-json
我们用的是 --save-dev 而不是 --save,因为代码实际执行时不依赖这个插件——只是在打包时使用。
在配置文件中启用插件
import json from 'rollup-plugin-json';
export default {input: './main.js',output: {file: 'bundle.js',format: 'umd'},plugins: [json(),],
}
新建文件 data.json
{"name": "xiaoming","age": 12
}
在main.js 引入 data.json
import { name } from './data.json';
console.log(name);
执行 rollup -c rollup.config.js,并查看 bundle.js
(function (global, factory) {typeof exports === 'object' && typeof module !== 'undefined' ? factory() :typeof define === 'function' && define.amd ? define(factory) :(factory());
}(this, (function () { 'use strict';var name = "xiaoming";console.log(name);})));
看到bundle中仅引用了data.json中的name字段,这是因为rollup会自动进行 Tree-shaking,main.js中仅引入了name,age并没有没引用,所以age并不会被打包
rollup基础插件
- rollup-plugin-alias: 提供modules名称的 alias 和reslove 功能
- rollup-plugin-babel: 提供babel能力
- rollup-plugin-eslint: 提供eslint能力
- rollup-plugin-node-resolve: 解析 node_modules 中的模块
- rollup-plugin-commonjs: 转换 CJS -> ESM, 通常配合上面一个插件使用
- rollup-plugin-serve: 类比 webpack-dev-server, 提供静态服务器能力
- rollup-plugin-filesize: 显示 bundle 文件大小
- rollup-plugin-uglify: 压缩 bundle 文件
- rollup-plugin-replace: 类比 Webpack 的 DefinePlugin , 可在源码中通过 process.env.NODE_ENV 用于构建区分 Development 与 Production 环境.
rollup于其他工具集成
打包npm 模块
于webpack和Browserify不同, rollup 不会去寻找从npm安装到你的node_modules文件夹中的软件包;
rollup-plugin-node-resolve 插件可以告诉 Rollup 如何查找外部模块
npm install --save-dev rollup-plugin-node-resolve
打包 commonjs模块
npm中的大多数包都是以CommonJS模块的形式出现的。 在它们更改之前,我们需要将CommonJS模块转换为 ES2015 供 Rollup 处理。
rollup-plugin-commonjs 插件就是用来将 CommonJS 转换成 ES2015 模块的。
请注意,rollup-plugin-commonjs应该用在其他插件转换你的模块之前 - 这是为了防止其他插件的改变破坏CommonJS的检测
npm install --save-dev rollup-plugin-commonjs
使用babel
使用 Babel 和 Rollup 的最简单方法是使用 rollup-plugin-babel
npm install --save-dev rollup-plugin-babel
新建.babelrc
{"presets": [["latest", {"es2015": {"modules": false}}]],"plugins": ["external-helpers"]
}
- 首先,我们设置
"modules": false,否则 Babel 会在 Rollup 有机会做处理之前,将我们的模块转成 CommonJS,导致 Rollup 的一些处理失败 - 我们使用
external-helpers插件,它允许 Rollup 在包的顶部只引用一次 “helpers”,而不是每个使用它们的模块中都引用一遍(这是默认行为)
运行 rollup之前, 需要安装latest preset和external-helpers插件
npm i -D babel-preset-latest babel-plugin-external-helpers
一个简单的配置项
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import babel from 'rollup-plugin-babel';
import json from 'rollup-plugin-json';
export default {input: './main.js',output: {file: 'bundle.js',format: 'umd'},watch: {exclude: 'node_modules/**'},plugins: [resolve(),commonjs(),json(),babel({exclude: 'node_modules/**',plugins: ['external-helpers'],}),],
}
rollup优势
- 自动 Tree-shaking(Tree-shaking, 也被称为 “live code inclusion,” 它是清除实际上并没有在给定项目中使用的代码的过程,但是它可以更加高效。)
- 打包速度快
- 配置简单
rollup VS webpack
rollup更适合构建javascript库,也可用于构建绝大多数应用程序;但是rollup 还不支持一些特定的高级功能,尤其是用在构建一些应用程序的时候,特别是代码拆分和运行时态的动态导入 dynamic imports at runtime.如果你的项目中需要这些功能,则使用webpack更为适合;
相关文章:
rollup打包起手式
使用Rollup打包JavaScript rollup是一款小巧的javascript模块打包工具,更适合于库应用的构建工具;可以将小块代码编译成大块复杂的代码,基于ES6 modules,它可以让你的 bundle 最小化,有效减少文件请求大小,vue在开发的时候用的是webpack,但是…...
【笔记】语言实例比较 3. 无重复字符的最长子串 C++ Rust Java Python
语言实例比较 3. 无重复字符的最长子串 C Rust Java Python C C: 9ms O ( N 2 ) O(N^2) O(N2), 8.68MB mem O ( 1 ) O(1) O(1) 滑动窗口循环 class Solution { public:int lengthOfLongestSubstring(const string s) {//s[start,end) 前面包含 后面不包含int res(0);for (…...
int的大小你知道时4个字节,那么类的大小你知道怎么计算吗?
文章目录 1、如何计算类对象的大小2、类对象的存储方式猜测3、结构体内存对齐规则1、如何计算类对象的大小 class A { public: void PrintA() { cout<<_a<<endl; } private: char _a; };问题: 类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了…...
OpenCV学习笔记(十一)——利用Sobel算子计算梯度
Sobel算子是基于一阶导数的离散差分算子,其中Sobel对于像素值的变化是十分敏感的,在进行边缘检测的时候,Sobel算子常用于对周围像素的重要性进行检测。 Sobel算子包括检验水平方向的算子和检测竖直方向的算子 计算机梯度值的操作如下&#x…...
扩展一下BenchmarkSQL,新增支持ASE/HANA/DB2/SQLServer,可以随便用了
1 背景 提到数据库的性能,自然就避不开性能测试。有专用于测试OLTP的,也有偏重于OLAP的。本文介绍的BenchmarkSQL就属于测试OLTP中的一个,基于TPCC的。网上有很多介绍TPC*的相关测试的文章,大家可以自行脑补。而PostgreSQL自带的pgbench是属于TPCC的前一个基准测试程序,偏…...
Android 静默安装成功后自启动
近期开发上线一个常驻app,项目已上线,今天随笔记录一下静默安装相关内容。我分三篇静默安装(root版)、静默安装(无障碍版)、监听系统更新、卸载、安装。 先说说我的项目需求:要求app一直运行&am…...
计算机二级真题讲解每日一题:《format格式化》
描述 在右侧答题模板中修改代码,删除代码中的横线,填写代码,完成如下功能。 接收用户输入的一个小于 20的正整数,在屏幕上逐行递增显示从 01 到该正整数,数字显示的宽度为 2,不足位置补 0,后面追…...
RabbitMQ问题
如何实现顺序消费? 消息放入到同一个队列中消费 如何解决消息不丢失? 方案: 如上图:消息丢失有三种情况,解决了以上三种情况就解决了丢失的问题 1、丢失1--->消息在到达交换机的时候;解决࿱…...
flutter->Scaffold左侧/右侧侧边栏和UserAccountsDrawerHeader的使用
//appBar的 leading/actions 和 Scaffold的drawer/endDrawer 冲突只能存在一个 import package:flutter/material.dart;void main() {runApp(MyApp()); }class MyApp extends StatelessWidget {const MyApp({super.key});overrideWidget build(BuildContext context) {retur…...
vulnhub prime1通关
目录 环境安装 1.信息收集 收集IP 端口扫描 目录扫描 目录文件扫描 查找参数 打Boss 远程文件读取 木马文件写入 权限提升 方法一 解锁密钥 方法二: linux内核漏洞提权 总结 环境安装 Kali2021.4及其prime靶机 靶机安装:Prime: 1 ~ Vul…...
JVM快速入门(1)JVM体系结构、运行时数据区、类加载器、线程共享和独享、分区、Java对象实例化
5.1 JVM体系结构 线程独占区-程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器;在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数…...
CSS3新属性(学习笔记)
一、. 圆角 border-radius:; 可以取1-4个值(规则同margin) 可以取px和% 一般用像素,画圆的时候用百分比:border-radius:50%; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…...
41-Vue-webpack基础
webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览…...
数据仓库的分层理论
数据仓库的分层理论是为了更好地组织和管理数据,支持复杂的数据分析和决策支持。在这一理论中,数据仓库被分为多个层次,每个层次都有其特定的作用和设计原则。以下是每一层的详细介绍,以及以销售人员为例的Doris建表实例。 ODS层…...
MySQL 8.0-索引- 不可见索引(invisible indexes)
概述 MySQL 8.0引入了不可见索引(invisible index),这个在实际工作用还是用的到的,我觉得可以了解下。 在介绍不可见索引之前,我先来看下invisible index是个什么或者定义。 我们依然使用拆开来看,然后再把拆出来的词放到MySQL…...
Uibot6.0 (RPA财务机器人师资培训第3天 )财务招聘信息抓取机器人案例实战
训练网站:泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博…...
Eureka和Nacos的关系
目录 它们的比较: 结论: Eureka和Nacos都是服务发现和注册中心,它们在微服务架构中扮演着关键角色,但它们是由不同的组织开发的,服务于类似但不完全相同的目的。以下是它们之间的关系: Eureka:…...
极简自建web视频会议,私有云,rtmp/rtsp/webrtc一键参会直播会议互动方案
随着视频互动深入工作日常,很多客户需要自建一个会议,监控的交互平台,目前外面不管是开源还是非开源的平台,都是极为复杂,一般linux安装库关联部署复杂,非技术人员根本没办法使用,不方便集成部署…...
5G智能网关助力工业铸造设备监测升级
随着物联网技术的迅猛发展和工业4.0浪潮的推进,传统工业正面临着严峻的转型升级压力。在这一背景下,铸造行业——这一典型的传统重工业领域,也必须积极探索借助5G、物联网、边缘计算等技术提升生产经营效率的新路径。 本文就基于佰马合作伙伴…...
奇舞周刊第523期:来自 rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处...
奇舞推荐 ■ ■ ■ 来自 rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处 过去很长一段时间,前端框架们都在往响应式的方向发展。同时又由于 React hooks 的深远影响,函数式 响应式成为了不少前端心中最理想的前端框架模样。Solid …...
Cuvil × PyTorch推理部署:从模型量化到GPU内核融合,90%开发者忽略的4个关键编译开关
第一章:Cuvil PyTorch推理部署全景概览Cuvil 是一个面向边缘与云协同场景的轻量级模型推理编译与运行时框架,专为优化 PyTorch 模型在异构硬件(如 ARM CPU、NPU、GPU)上的低延迟、高吞吐部署而设计。它通过前端模型解析、中间表示…...
2026最权威的AI论文助手横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作范畴里,“论文一键生成”身为一种崭露头角的技术工具,正渐…...
python批量压缩解压文件
import os import zipfile from pathlib import Path# # 1. 批量解压所有 zip 文件 # def batch_unzip(zip_folder, save_folder):"""批量解压文件夹里所有 .zip 文件zip_folder: 存放压缩包的文件夹save_folder: 解压到哪里"""# 创建输出文件…...
极速搞定Axure RP全版本中文界面:从痛点分析到完美配置的技术指南
极速搞定Axure RP全版本中文界面:从痛点分析到完美配置的技术指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 作…...
StructBERT中文语义匹配实战:Kubernetes集群中StructBERT服务弹性伸缩配置
StructBERT中文语义匹配实战:Kubernetes集群中StructBERT服务弹性伸缩配置 在自然语言处理的实际应用中,语义相似度判断是一个高频且核心的需求。无论是智能客服中的问题匹配、内容平台上的文本查重,还是知识库里的同义句检索,都…...
5个步骤打造Windows专业级音频系统:Equalizer APO深度解析
5个步骤打造Windows专业级音频系统:Equalizer APO深度解析 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 在Windows平台上,Equalizer APO是一个革命性的系统级音频处理工具&…...
终极Android UI开发指南:XUI框架与Material Design完美融合实战
终极Android UI开发指南:XUI框架与Material Design完美融合实战 【免费下载链接】XUI 💍A simple and elegant Android native UI framework, free your hands! (一个简洁而优雅的Android原生UI框架,解放你的双手!) 项目地址: h…...
OpenClaw安全防护指南:Qwen3-14B私有镜像下的权限管控实践
OpenClaw安全防护指南:Qwen3-14B私有镜像下的权限管控实践 1. 为什么需要关注OpenClaw的安全防护? 去年我在尝试用OpenClaw自动化处理财务报表时,曾遭遇过一次"惊魂时刻"——脚本误将未加密的财务数据上传到了临时目录。这次经历…...
HY-Motion 1.0未来演进:支持多人协同与简单物体交互的路线图解析
HY-Motion 1.0未来演进:支持多人协同与简单物体交互的路线图解析 1. 引言:从单人到互动的跨越 HY-Motion 1.0的发布,让文字描述转化为流畅、逼真的3D人体动作变得触手可及。无论是健身动作、日常行为还是复杂的舞蹈编排,这个十亿…...
小程序常用页面跳转 5 种方式汇总(开发常备手册)
小程序多页面协作离不开路由跳转,不同场景对应不同跳转 API,今天一次性整理齐全,开发随时查阅。保留当前页跳转(普通内页)wx.navigateTo({url:"/pages/detail/detail"})关闭当前页再跳转wx.redirectTo({url:…...
