本文简单介绍类库打包工具 rollup 。

Rollup 是一款 JavaScript 模块打包器,可以将多个简单的js代码文件编译成一份复杂的js代码文件,需要注意的是 Rollup 主要用于JavaScript类库的打包,譬如 Vue 框架的源码打包。

使用 Rollup 必要性在于,如果我们开发的是较为复杂的大型项目,那么将项目拆分成小的单独文件来组织代码兴许会更简单,因为这通常会消除无法预知的相互影响(remove unexpected interaction),以及显著降低了所要解决的问题的复杂度(complexity of the problem)。

第一步 安装rollup环境

我们可以通过下面的指令来全局安装 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的更多相关文章

  1. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  2. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  3. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  4. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  5. 【webpack 系列】进阶篇

    本文将继续引入更多的 webpack 配置,建议先阅读[webpack 系列]基础篇的内容.如果发现文中有任何错误,请在评论区指正.本文所有代码都可在 github 找到. 打包多页应用 之前我们配置 ...

  6. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  7. 旨在脱离后端环境的前端开发套件 - IDT Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  8. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  9. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  10. openlayers4 入门开发系列之风场图篇

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

随机推荐

  1. 保存计算过程的计算器——java实现

    一.设计模型 按照MVC-Model View Control(模型,视图,控制器)的设计思想展开程序的设计和代码的编写.数据模型部分相当于MVC中的Model角色,视图设计部分给出的界面部分相当于M ...

  2. DPDI online

    DPDI online @三倍镜 用户名:dpdi 密码 dpdi

  3. thinkphphp 计算分页 和分页总数 和sql计算分页 php

    利用page计算分页 $p=input('p')?input('p'):1; $limit=6; $res=db('points_log')->where(['p_uid'=>$uid,' ...

  4. API接口调用--历史上的今天(v1.0)

    历史上的今天 参考(聚合数据):https://www.juhe.cn/docs/api/id/63 事件列表(v1.0) 接口地址: http://api.juheapi.com/japi/toh ...

  5. chatGPT:清理 master 分支的文件,并让这个分支只有一个提交

    Q 我的开发工作都在 master 分支上做的,master 分支有很多的开发的时候产生的临时文件.我想清空 master 分支的历史记录.并且只保留 README.md 和 main.py A 你可 ...

  6. 【记录】Excel 2021|(三)VBA使用Selenium自动登录网页

    文章目录 1 安装 Selenium Basic 2 下载webdriver 3 自动登录 1 安装 Selenium Basic 首先需要安装Selenium Basic,才能在工具栏中找到Sele ...

  7. XXL-MQ v1.4.0 | 轻量级分布式消息队列

    Release Notes 1.[重构]XXL-MQ 核心代码重构,基于"存算分离"与"分区机制"设计思想.在轻量级.分布式的基础上,强化高吞吐.海量消息及水平 ...

  8. C#判断当前时间是否在规定时间段范围内(二维数组超简版)

    直接上C#代码 TimeSpan nowTime = DateTime.Now.TimeOfDay; string[,] arr = { { "7:50", "8:10& ...

  9. 统计SqlServer数据库的表大小

    create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...

  10. Qt图像处理技术一:对QImage图片美颜,使用双指数滤波

    一.效果图 二.demo源码地址(除了磨皮还有一些基本的滤镜) 如果你觉得有用的话,期待你的小星星 实战应用项目: github :https://github.com/dependon/simple ...