Rollup

相比于webpack,rollup要小巧的多,它仅仅是一款ES Module打包器,并不支持例如HMR等特性,它的初衷是提供一个充分利用ESM各项特性的高效打包器;

Rollup快速上手

yarn add roullup --dev

下载之后rollup会提供一个cli程序,可以通过yarn或者npx来执行,避免我们通过路径去查找cl(这里和前面我们手动写的xp-web工作流类似)

  • Usage: rollup [options]
  • 必须指定 --format,即打包后的格式(amd, cjs, system, esm, iife, umd);
  • –file 指定打包后输出的文件(webpack会自动输出);

yarn rollup ./src/index.js --format iife --file ./dist/bundle.js

  • rollup默认会开启tree-shaking,未引用部分都不会输出

Rollup配置文件

新建rollup.config.js,rollup必须手动指定配置文件

yarn rollup --config rollup.config.js

// rollup.config.js
export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'iife'}
}

Rollup插件

当我们需要加载其他类型的资源文件,编译新特性等,我们可以使用插件来拓展Rollup,插件是Rollup唯一拓展途径

这里我们使用rooluo-plugin-json插件为例 yarn add rollup-plugin-json --dev,将json文件的对象默认导出;

//----------rollup.config.js中
import json from 'rollup-plugin-json'export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'iife'},plugins: [json()]
}//---------index.js文件中
import { name } from '../package.json'

Rollup加载npm模块

rollup默认只能按照文件路径去加载本地模块,不能像webpack一样直接用名称去加载node_modules里面的对应模块;rollup默认只能处理ESM模块;

rollup-plugin-node-resolve

import json from 'rollup-plugin-json'
import resolve from 'rollup-plugin-node-resolve'export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'iife'},plugins: [json(),resolve()]
}

Rollup加载CommonJS模块

因为rollup默认只能处理ESM模块,为了兼容CJS模块,Rollup提供了一个插件;

  • 这里有个知识点,可以使用ESM导入CJS模块,CJS模块会默认导出,但是反过来不行;

rollup-plugin-commonjs

import commonjs from 'rollup-plugin-commonjs'export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'iife'},plugins: [commonjs()]
}// cjs-module.js
module.exports = {foo: 'bar'
}
// index.js
import cjs from './cjs-module'console.log(cjs) //{ foo: 'bar'}

Rollup代码分割

rollup的代码分割与webpack有些相似,可以对比学习;

rollup同样支持动态导入,但是由于多文件导出,就不再支持output的file属性,而是dir属性,并且不支持iife模式

export default {input: 'src/index.js',output: {// file: 'dist/bundle.js',// format: 'iife'dir: 'dist',format: 'amd'}
}// index.jsimport('./logger').then(({ log }) => {log('code splitting~')
})

rollup也同样支持多入口打包,对于公共部分也会提取出来,使用的形式可以和webpack一样,使用对象键值对的方式,也可以使用数组的方式;因为多入口打包内部会提取公共模块,所以这里仍然不可以使用iife模式打包;

export default {// input: ['src/index.js', 'src/album.js'],input: {foo: 'src/index.js',bar: 'src/album.js'},output: {dir: 'dist',format: 'amd'}
}

Rollup和webapck对比

  • 输出结果更加扁平
  • 自动移除未引用代码
  • 打包结果仍然完全可读
  • 加载非ESM的第三方模块比较复杂
  • 模块最终都被打包到一个函数中,无法实现HMR
  • 浏览器环境中,amd模式代码拆分功能依赖AMD库

如果我们正在开发一个框架或者类库可以使用rollup,大多数知名框架和库都在使用rollup打包;

Parcel

零配置的前端应用打包器

yarn add parcel-bundler --dev

yarn parcel src/index.html

parcel推荐我们使用html作为入口文件(这点与webpack推荐我们使用js文件不同)

  • parcel同样支持动态导入的代码分割;
  • 支持HMR,但与webpack不同的是只有一个参数,当前模块修改时就会触发;
  • 运行parcel打包的同时会开启一个本地服务器;
  • parcel会自动安装依赖,无需npm install手动安装模块;
  • parcel以生产模式打包 yarn parcel build src/index.html
  • parcel使用worker进程去启动多核编译,同时有文件系统缓存,即使在重启构建后也能快速再编译,极速的打包体验
// index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Parcel Tutorials</title>
</head>
<body><script src="main.js"></script>
</body>
</html>
// import $ from 'jquery'
import foo from './foo'
import './style.css'
import logo from './zce.png'foo.bar()import('jquery').then($ => {$(document.body).append('<h1>Hello Parcel</h1>')$(document.body).append(`<img src="${logo}" />`)
})if (module.hot) {module.hot.accept(() => {console.log('hmr')})
}

【前端工程化】四:打包工具Rollup快速上手和Parcel的使用相关推荐

  1. exe打包工具_pyqt5快速上手基础篇12-使用Pyinstaller打包应用程序

    前言 本节我们学习如何使用Pyinstaller打包pyqt5应用程序,pyqt5的打包要比之前文章中讲述的tkinter的打包稍微复杂点,主要区别在于pyqt5打包需要导入Qt相关库,笔者开始打包时 ...

  2. 前端打包工具rollup、webpack、vite的区别

    前端打包工具rollup.webpack.vite的区别 文章目录 前端打包工具rollup.webpack.vite的区别 一.结论 二.rollup 三.webpack 1. 核心概念 2. 重要 ...

  3. JS打包工具rollup——完全入门指南

    因项目需要,最近一直在研究前端打包技术,参照以下文章及rollup官网,通过亲手操练,对rollup有了初步的了解.看到一篇不错的文章,转载记录.感谢作者的无私分享. 原文链接地址:https://s ...

  4. 前端组件/库打包利器rollup使用与配置实战

    目前主流的前端框架vue和react都采用rollup来打包,为了探索rollup的奥妙,接下来就让我们一步步来探索,并基于rollup搭建一个库打包脚手架,来发布自己的库和组件. 前言 写rollu ...

  5. rollup函数_Vue3同款打包工具Rollup常用配置

    Rollup的优势 在最新的Vue3版本中,也使用了rollup作为打包工具.相比于webpack,rollup要轻量许多,用于弥补gulp的无tree-shaking是很好的选择,最大的用途是打包生 ...

  6. 前端工程化-包管理工具npm-yarn-cnpm-pnpm详细介绍以及如何选择

    文章目录 包管理工具详解 npm包管理工具 1.代码共享的方案 2.npm包管理工具介绍 3.npm的配置文件 常见配置文件 常见配置文件属性 版本号的说明 4.npm install npm ins ...

  7. 前端实现小型打包工具

    该工具可以实现以下两个功能 将 ES6 转换为 ES5 支持在 JS 文件中 import CSS 文件 通过这个工具的实现,大家可以理解到打包工具的原理到底是什么 实现 因为涉及到 ES6 转 ES ...

  8. Python 代码检查工具 pylint (快速上手)

    文章目录 安装和配置 1. 安装 2. 检查是否安装 3. 生成默认配置文件 4. 查看帮助文件 快速上手 1. 测试单个文件 2. 测试整个工程 3. 生成报告样例 4. 根据意见修改 进阶知识 1 ...

  9. 强大的数学专业工具Maple快速上手

    文章目录 前言 1 基本运算 1.1 常用变量 其他 2 代数 3 函数 3.1 函数的定义 3.2 常用函数 多项式展开 因式分解 解一元方程 解多元方程: 序列函数 seq 连乘 product( ...

最新文章

  1. 用Access作为后台数据库支撑,书写一个C#写入记录的案例
  2. 《深入理解计算机系统》读书笔记五:信息的表示和存储
  3. 同盾科技完成 7280 万美元 C 轮融资
  4. [PHP] 三种运行模式 ISAPI模式 APACHE2HANDLER模式 CGI模式 FastCGI模式
  5. Java 异常 总结 try catch finally Exception
  6. 在数据采集器中用TensorFlow进行实时机器学习
  7. 【招聘(南京)】南京纳龙科技有限公司招高级.net开发工程师
  8. 开发函数计算的正确姿势——借助 Ghostscript 将 PDF 转换成 JPG
  9. 网页设计图片向上浮动_HTML5 背景图片漂浮/浮动特效
  10. Eclipse,工程builed失败的原因。
  11. 模块ntdll中出现异常eaccessviolation_SAP ERP软件中的物料凭证 MIGO
  12. pip可识别的requirements.txt的写法
  13. 计算机网络校园网建设设计摘要,计算机网络专业毕业论文校园网建设设计.doc...
  14. outlook服务器邮件满了怎么办,Outlook邮箱不能接收邮件提示邮件箱已满怎么办?
  15. 汇总病毒样本的常用反调试技术、反分析技巧(持续更新)
  16. 数据挖掘是什么,数据挖掘的学习路线是什么?
  17. python---关于集合
  18. python文件下载战_在您的Python平台游戏中放一些战利品
  19. 获取保存在路由器中的ADSL账号和密码
  20. 第5章 LinearR/PLR/SVR/KNN/DTR/RFR(测算房价)

热门文章

  1. 高精地图,养不起的 「 奢侈品 」
  2. 比尔盖茨限制女儿使用计算机,盖茨限制女儿每天只能玩游戏45分钟
  3. Java项目:养老院管理系统(java+SSM+BootStrap+jsp+Maven+mysql)
  4. 如何看懂电路图--电源电路单元
  5. 在BIOS中如何更改启动顺序
  6. 静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?
  7. 所有硬件检测工具全集
  8. Python POST 爬虫爬取掘金用户信息
  9. Python处理excel基本操作
  10. 使用 lxml 构建 XML 文档