前端开发系列126-进阶篇之Rollup
Rollup 是一款 JavaScript 模块打包器,可以将多个简单的js代码文件编译成一份复杂的js代码文件,需要注意的是 Rollup 主要用于JavaScript类库的打包,譬如 Vue 框架的源码打包。
使用 Rollup 必要性在于,如果我们开发的是较为复杂的大型项目,那么将项目拆分成小的单独文件来组织代码兴许会更简单,因为这通常会消除无法预知的相互影响(remove unexpected interaction),以及显著降低了所要解决的问题的复杂度(complexity of the problem)。
我们可以通过下面的指令来全局安装 rollup 和一些必要的插件。
npm install @babel/preset-env @babel/core rollup rollup-plugin-babel rollup-plugin-serve cross-env -D
rollup 打包工具
@babel/preset-env babel将高级语法转换为高级语法
@babel/core 需要使用 babel核心模块
rollup-plugin-babel 和 babel关联的 rollup插件
rollup-plugin-serve 在本地开启(设置)静态服务
cross-env 在本地设置环境变量等
这里我先新创建 Vue_L文件夹,先执行npm init -y初始化,然后再执行上面的命令行,下面列出安装和执行成功后显示的结果信息。
+ cross-env@7.0.2
+ rollup-plugin-babel@4.4.0
+ @babel/preset-env@7.9.5
+ @babel/core@7.9.0
+ rollup@2.7.2
+ rollup-plugin-serve@1.0.1
added 158 packages from 93 contributors and audited 2000 packages in 23.326s
found 0 vulnerabilities
在根目录中创建rollup.config.js文件,并引入插件模块,并配置入口、出口以及插件等信息。
import babel from 'rollup-plugin-babel';
import serve from 'rollup-plugin-serve';
export default {
/* 设置打包的入口文件 */
input: "./src/index.js",
/* 输出配置项 */
output: {
/* 配置出口路径 */
file: "dist/umd/xxx.js",
/* 指定打包后全局变量的名字 */
name: "Person",
/* 统一模块规范 */
format: "umd",
/* es6->es5 开启源码调试(显示报错位置) */
sourcemap: true
},
/* 使用插件 */
plugins: [
babel({
exclude: "node_modules/**"
}),
process.env.ENV === 'development' ? serve({
open: true,
/* 默认打开的 HTML 文件路径 */
openPage: "/public/index.html",
port: 3000,
contentBase: ""
}) : null
]
}
在项目根目录中创建 .babelrc 文件,设置文件内容
{
"presets": [
"@babel/preset-env"
]
}
创建项目所需要的 public 、src 、dist 等文件夹和对应的文件,下面列出文件树结构。
wendingding:Vue_L wendingding$ tree -L 2
.
├── dist
│ └── umd
├── node_modules
│ ├── @babel
│ ├── ansi-styles
│ ├── babel-plugin-dynamic-import-node
│ ├── browserslist
│ ├── caniuse-lite
│ ...
│ └── which
├── package-lock.json
├── package.json
├── public
│ └── index.html
├── rollup.config.js
└── src
└── index.js
在 index.html文件中,通过 script文件引入最终打包好的文件.
<script src="/dist/umd/xxx.js"></script>
<script>
// 使用 xxx.js 文件中提供的class
let x = new Person("zs", 18);
console.log(x);
</script>
在 package.json文件中配置scripts项中的build:dev任务和serve任务。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build:dev": "rollup -c",
"serve": "cross-env ENV=development rollup -c -w",
},
执行指令$ npm run serve即可 (如果只是简单的想要打包,那么执行npm run build:dev指令即可)。
/* /dist/umd/xxx.js 文件的内容 */
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ?
module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.Person = factory());
}(this, (function () { 'use strict';
function Person(name, age) {
this.name = name;
this.age = age;
}
return Person;
})));
//# sourceMappingURL=xxx.js.map
rollup v2.7.2
bundles ./src/index.js → dist/umd/xxx.js...
http://localhost:3000 -> /Users/文顶顶/Documents/花田半亩 /Learn/Hall/Vue_L
created dist/umd/xxx.js in 616ms
[2019-08-24 16:35:26] waiting for changes...
-c 等同于--config命令,表示使用 配置文件来执行打包过程。
-w 等同于--watch命令,用于监听源文件是否有改动,如果有改动那么就会重新打包。
这里顺便列出该打包工具的其它可用参数,作为参考。
-i, --input <filename> 要打包的文件(必须)
-o, --file <output> 输出的文件 (如果没有这个参数,则直接输出到控制台)
-f, --format <format> 输出的文件类型 (amd, cjs, esm, iife, umd)
-e, --external <ids> 将模块ID的逗号分隔列表排除
-g, --globals <pairs> 以`module ID:Global` 键值对的形式,用逗号分隔开
任何定义在这里模块ID定义添加到外部依赖
-n, --name <name> 生成UMD模块的名字
-h, --help 输出 help 信息
-m, --sourcemap 生成 sourcemap (`-m inline` for inline map)
--amd.id AMD模块的ID,默认是个匿名函数
--amd.define 使用Function来代替`define`
--no-strict 在生成的包中省略`"use strict";`
--no-conflict 对于UMD模块来说,给全局变量生成一个无冲突的方法
--intro 在打包好的文件的块的内部(wrapper内部)的最顶部插入一段内容
--outro 在打包好的文件的块的内部(wrapper内部)的最底部插入一段内容
--banner 在打包好的文件的块的外部(wrapper外部)的最顶部插入一段内容
--footer 在打包好的文件的块的外部(wrapper外部)的最底部插入一段内容
--interop 包含公共的模块(这个选项是默认添加的)
前端开发系列126-进阶篇之Rollup的更多相关文章
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 【webpack 系列】进阶篇
本文将继续引入更多的 webpack 配置,建议先阅读[webpack 系列]基础篇的内容.如果发现文中有任何错误,请在评论区指正.本文所有代码都可在 github 找到. 打包多页应用 之前我们配置 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- 旨在脱离后端环境的前端开发套件 - IDT Server篇
IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- [置顶]【实用 .NET Core开发系列】- 导航篇
前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...
- openlayers4 入门开发系列之风场图篇
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
随机推荐
- 保存计算过程的计算器——java实现
一.设计模型 按照MVC-Model View Control(模型,视图,控制器)的设计思想展开程序的设计和代码的编写.数据模型部分相当于MVC中的Model角色,视图设计部分给出的界面部分相当于M ...
- DPDI online
DPDI online @三倍镜 用户名:dpdi 密码 dpdi
- thinkphphp 计算分页 和分页总数 和sql计算分页 php
利用page计算分页 $p=input('p')?input('p'):1; $limit=6; $res=db('points_log')->where(['p_uid'=>$uid,' ...
- API接口调用--历史上的今天(v1.0)
历史上的今天 参考(聚合数据):https://www.juhe.cn/docs/api/id/63 事件列表(v1.0) 接口地址: http://api.juheapi.com/japi/toh ...
- chatGPT:清理 master 分支的文件,并让这个分支只有一个提交
Q 我的开发工作都在 master 分支上做的,master 分支有很多的开发的时候产生的临时文件.我想清空 master 分支的历史记录.并且只保留 README.md 和 main.py A 你可 ...
- 【记录】Excel 2021|(三)VBA使用Selenium自动登录网页
文章目录 1 安装 Selenium Basic 2 下载webdriver 3 自动登录 1 安装 Selenium Basic 首先需要安装Selenium Basic,才能在工具栏中找到Sele ...
- XXL-MQ v1.4.0 | 轻量级分布式消息队列
Release Notes 1.[重构]XXL-MQ 核心代码重构,基于"存算分离"与"分区机制"设计思想.在轻量级.分布式的基础上,强化高吞吐.海量消息及水平 ...
- C#判断当前时间是否在规定时间段范围内(二维数组超简版)
直接上C#代码 TimeSpan nowTime = DateTime.Now.TimeOfDay; string[,] arr = { { "7:50", "8:10& ...
- 统计SqlServer数据库的表大小
create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...
- Qt图像处理技术一:对QImage图片美颜,使用双指数滤波
一.效果图 二.demo源码地址(除了磨皮还有一些基本的滤镜) 如果你觉得有用的话,期待你的小星星 实战应用项目: github :https://github.com/dependon/simple ...