@rollup/plugin-html 使用及原理介绍

@rollup/plugin-html 使用及原理介绍

一款用于自动创建 html 文件并导入 rollup 打包文件进行展示的插件。

安装

npm install @rollup/plugin-html -D

使用

import html  from '@rollup/plugin-html';module.exports = {input: 'index.js',output: {file: 'dist.js',},plugins: [html()]
};

在打包生成文件的同级目录中生成一个 index.html 文件,并自动引入打包文件。

<!doctype html>
<html lang="en"><head><meta charset="utf-8"><title>Rollup Bundle</title></head><body><script src="dist.js" type="module"></script></body>
</html>

配置

attributes

Type: Object

Default: { html: { lang: 'en' }, link: null, script: null }

为 html、link、script 标签添加额外属性。

通过 key-value 的形式来添加标签属性,分别代表了 html 元素中的 属性名 和 值。

对于输出格式是 esm 的,会自动在 script 中添加 {type: ‘module’}属性。

fileName

Type: String

Default: 'index.html'

定义生成的 html 文件名。

meta

Type: Array[...object]

Default: [{ charset: 'utf-8' }]

用于定义 html 文件中 meta 元素的属性。

publicPath

Type: String

Default: ''

TODO 不确定

title

Type: String

Default: 'Rollup Bundle'

声明 html 文件的 title 值。

template

Type: Function

Default: internal function
Returns: String

用于自定义生成 html 文件。函数的格式如下:

const template = ({ attributes, bundle, files, publicPath, title }) => { ... }
  • attributes:获取到传递给插件的参数
  • bundle:包含 AssetInfo 或者 ChunkInfo 的对象。
  • files:AssetInfo 或者 ChunkInfo 中 isEntry 为 true 的文件,及资源文件(isAsset: true) 的文件
  • publicPath:传递的 publicPath 值。
  • title: 传递的 title 值

默认的 html 模板是

<!DOCTYPE html>
<html ${attributes}><head>${metas}<title>${title}</title>${links}</head><body>${scripts}</body>
</html>

之后会根据传参自动填充上去。

支持输出的格式

该插件默认支持 esm (es), iife, 和 umd 格式。如果是其他格式,可以在 template 配置中手动定义如何解析。

amd

使用 requireJS 语法,只允许一个 script 标签。如果导出多个文件,那么需要通过一个代理文件来导入。RequireJs 的使用需要手动引入一个依赖 https://requirejs.org/docs/start.html

system

首先需要一个独立的 script 标签,里边必须先包含了 s.js 这个加载器。之后才能使用:

<script>System.import('./batman.js')</script>

原理

在 generateBundle 钩子中调用 emitFile 生成一个 html 文件。

async generateBundle(output, bundle) {...const htmlFile: EmittedAsset = {type: 'asset',source,name: 'Rollup HTML Asset',fileName};this.emitFile(htmlFile);
}

模板生成:

const defaultTemplate = async ({attributes,files,meta,publicPath,title
}: RollupHtmlTemplateOptions) => {// 给入口文件生成 script 标签const scripts = (files.js || []).map(({ fileName }) => {const attrs = makeHtmlAttributes(attributes.script);return `<script src="${publicPath}${fileName}"${attrs}></script>`;}).join('\n');// 给入口资源文件生成 link 标签const links = (files.css || []).map(({ fileName }) => {const attrs = makeHtmlAttributes(attributes.link);return `<link href="${publicPath}${fileName}" rel="stylesheet"${attrs}>`;}).join('\n');// 生成 meta 标签const metas = meta.map((input) => {const attrs = makeHtmlAttributes(input);return `<meta${attrs}>`;}).join('\n');return `
<!doctype html>
<html${makeHtmlAttributes(attributes.html)}><head>${metas}<title>${title}</title>${links}</head><body>${scripts}</body>
</html>`;
};

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

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

相关文章

uniApp使用XR-Frame创建3D场景(8)粒子系统

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 本片我们详细讲解一下xr-frame的粒子系统 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{{sec8}}"><xr-asset-load t…

基于ssm的线上旅行信息管理系统论文

摘 要 随着旅游业的迅速发展&#xff0c;传统的旅行信息查询管理方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;特开发了本线上旅行信息管理系统。 本论文首先对线上旅行信息管理系统进行需求分析&#xff0c;从系…

android pdf框架-10,相册浏览

MupdfViewer 这是最后apk,源码在前面的文章已经贴过了本站下载地址,只是不是最新的.可能不少是旧的内容. subsampling-scale-image-view这是一个大图片的分块加载的实现.比较不错的.滑动方面我觉得使用flinger的效果比它要流畅,惯性要好. 也有人把这个作成pdf渲染器.但翻页就…

将ENVI的roi转为mask图像

方法1&#xff1a; 直接使用ENVI step1: 将roi文件存储为.roi格式 [1] 链接: link step2: 将.roi转为mask [2] 链接: link [3] 链接: link 方法2&#xff1a; 使用Matlab step1: 将roi文件存储为.xlm 文件 step2&#xff1a;针对把每个roi存储为一个单独文件 [4] 读取xlm文…

Electron+Vue构建项目时出错:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

问题&#xff1a;ElectronVue构建项目时出错&#xff1a;Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT URL:https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/1701 一&#xff0c;构建时node版本要低 同时构建命令如下&#xff1a; "el…

配置SSH后 GitHub无法使用了

首先进入这个网页GitHub Status看是否能正常访问 。如果这个网络都不行&#xff0c;那先解决网络问题&#xff0c;国内不让访问Github的。 如果在使用Git克隆仓库时遇到连接问题&#xff0c;先排查 Git配置或网络配置问题。可以使用下面的方法诊断和解决这个问题&#xff1a; …

aidl文件生成Java、C++[android]、C++[ndk]、Rust接口

目录 前言一、Java二、C[android]三、C[ndk]四、Rust接口 前言 在 Android 开发中&#xff0c;AIDL 文件通常会被自动编译&#xff0c;生成对应语言的接口文件。对于应用层 Java 开发者来说&#xff0c;使用 AIDL 和 Binder 封装的接口可以让他们更加专注于应用逻辑&#xff0…

【Kotlin】List、Set、Map简介

1 List Java 的 List、Set、Map 介绍见 → Java容器及其常用方法汇总。 1.1 创建 List 1.1.1 emptyList var list emptyList<String>() // 创建空List 1.1.2 List 构造函数 var list1 List(3) { "abc" } // [abc, abc, abc] var list2 ArrayList<In…

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表&#xff0c;可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

免费软件“蓝莓投屏”:支持多个Airplay同时镜像的投屏软件。

引言&#xff1a; 由于定制盒子(3288)不支持投屏功能&#xff08;有些5.1不支持&#xff0c;安卓4.X本身也不支持&#xff09;&#xff0c;需要借助第三方的投屏软件来实现这一需求。所以&#xff0c;研究半天&#xff0c;蓝莓投屏以其简便易用的特性脱颖而出&#xff0c;只需…

每日一题--最长连续序列

洛阳春-岑参 人到洛阳花似锦&#xff0c;偏我来时不逢春。 谁道三冬无春色&#xff0c;冰山高处万里银 目录 题目描述 思路分析 方法及其时间复杂度 法一 暴力枚举&#xff1a; 法二 哈希表遍历&#xff1a; 法三 并查集&#xff1a; 个人总结 题目描述 128. 最长连续序…

独立服务器和云计算各有什么优势

独立服务器和云计算各有什么优势 一、性能 独立服务器&#xff1a;独立服务器提供了独享的硬件资源&#xff0c;通常具有更高的性能和更稳定的性能表现。对于对性能有较高需求的任务&#xff0c;如大数据处理、游戏服务器等&#xff0c;独立服务器是更好的选择。 云计算&…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

网络工程师实验命令(华为数通HCIA)

VRP系统的基本操作 dis version #查看设备版本信息 sys #进入系统视图 system-name R1 #改设备名字为R1进入接口配置IP地址 int g0/0/0 ip address 192.168.1.1 255.255.255.0 #配置接口地址为192.168.1.1/255.255.255.0 ip address 192.168.1.2 24 sub #此…

Apache Hive的基本使用语法(二)

Hive SQL操作 7、修改表 表重命名 alter table score4 rename to score5;修改表属性值 # 修改内外表属性 ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL""TRUE"); # 修改表注释 ALTER TABLE table_name SET TBLPROPERTIES (comment new_commen…

二维双指针,滑动窗口

二维双指针 思路&#xff1a;考虑暴力做法&#xff0c;我们统计前缀和&#xff0c;然后枚举以 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​), ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)为左上&#xff0c;右下顶点的矩阵有多少是合法的&#xff0c;那么&#xff0c;这样的时间复杂度为 n 4…

[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)

使用Shell脚本实现功能&#xff1a; kubectl执行失败后&#xff0c;等待30秒后再重试&#xff0c;一共重试3次&#xff0c;代码如下&#xff1a; #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…

【二十七】【算法分析与设计】归并(1),912. 排序数组,归并排序,递归函数的时间复杂度计算,LCR 170. 交易逆序对的总数

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < …

Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤

集群搭建 整体思路:先在一个节点上安装、配置,然后再克隆出多个节点,修改 IP ,免密,主机名等 提前规划: 需要三个节点,主机名分别命名:node1、node2、node3 在下面对 node1 配置时,先假设 node2 和 node3 是存在的 **注意:**整个搭建过程,除了1和2 步,其他操作都使…

go中方法的Receiver (值类型指针类型)

在Go语言中&#xff0c;方法的接收者&#xff08;Receiver&#xff09;定义了该方法是与哪种类型的变量关联。方法的接收者可以是值类型也可以是指针类型&#xff0c;这决定了调用方法时是如何传递接收者的。 值类型与指针类型接收者 值类型接收者 当方法的接收者是值类型时&a…