2-2-3-Rollup

Rollup

Rollup也是一款ESM的打包器,也可以将一些散落的模块打包成整块的代码,从而使得这些划分的模块可以更好的运行再浏览器环境或者nodejs环境。

相比于webpack,rollup要小巧的多,webpack可以配合插件实现前端工程化的绝大多部分工作,但是 rollup 只是一个 ESM 打包器,并没有任何其他额外的功能。他的出现也只是为了提供一个充分利用 ESM 各项特性的高效打包器。

快速上手

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

默认会开启tree shaking优化代码

rollup 配置文件

这个文件会运行在node环境中,但是rollup会单独的处理这个配置文件,所以这里面可以直接使用ESM。

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

执行命令

yarn rollup --config

必须指明config参数,因为默认不会使用配置文件的配置。

rollup使用插件

rollup自身就只是对ESM打包,如果想要加载其他类型的资源文件或者是导入CommonJS模块,或者是遍历ECMAScript新特性。rollup就需要使用插件去扩展实现。而且插件是rollup唯一的扩展途径,不象webpack有loader、plugin的方式。

rollup加载npm模块

rollup默认只能按照文件路径的方式去加载本地文件模块,对于node_modules中的第三方模块并不能像webpack一样直接通过模块的名称导入模块。

rollup官方给出了 rollup-plugin-node-resolve 这个插件。通过使用这个插件,就可以再文件中直接使用模块名称去导入对应模块。

加载CommonJS模块

在rollup中默认支持的使ESM,而CommonJS是不被支持的。但是目前还是有大量的npm模块使用CommonJS的方式去导出成员,所以为了兼容这些模块,官方给出了一个插件rollup-plugin-comminjs

rollup代码拆分

在rollup中依然可以使用动态导入的方式实现代码拆分。

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

多入口打包

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

因为要在浏览器中运行,所以这里使用的是amd的模式。对于amd这种输出格式的文件不能直接去引用到页面上,必须要使用通过实现amd标准的库去加载。

<!-- index.html -->
<script src="https://unpkg.com/requirejs@2.3.6/require.js" data-main="foo.js"></script>

requireJS使用data-main参数声明require加载的入口模块路径

rollup选用原则

  • 输出结果更加扁平

  • 自动移除未引用的代码(Tree Shaking)

  • 打包结果依然完全可读

  • 加载非ESM的第三方模块比较复杂(需要配置插件)

  • 模块最终都被打包到一个函数中,无法实现HMR

  • 浏览器环境中,代码拆分功能依赖AMD库

综上优缺点,大多数知名的框架/库都在使用Rollup,因为框架或者类库他们很少引用第三方模块。但是如果是开发一个项目会引用大量的第三方模块,规模比较大的还需要使用代码分包,这样的就需要使用webpack。

应用程序使用webpack,框架或者类库使用rollup

Parcel

一款零配置的前端应用打包器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值