当前位置: 代码迷 >> 综合 >> 其他打包工具 Rollup Parcel
  详细解决方案

其他打包工具 Rollup Parcel

热度:38   发布时间:2023-12-05 14:53:07.0

Rollup

rollup与webpack十分相似 Rollup更为小巧,只是ESM的打包器 不支持HMR(模块热替换)这种高级特性
是为了提供ESM各种特性的高效打包器

快速上手

yarn add rollup --dev 安装依赖 会在 node-modules 下 bin/ rollup 提供一个cli程序
运行 yarn rollup yarn rollup ./src/index.js 打包入口文件是index.js yarn
rollup ./src/index.js --format iife 输出的是浏览器支持的iife格式 yarn rollup
./src/index.js --format iife --file dist/bundle.js 输出到dist文件夹下

配置文件
rollup.config.js

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

打包命令
yarn rollup --config 启动打包配置文件
yarn rollup --config rollup.config.js 启动不同配置文件名称

使用插件
导入commonJS模块,或边缘ECMAScript的新特性
插件是Rollup唯一的扩展路径
rollup-plugin-json
yarn add rollup-plugin-json --dev

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

src/index.js

// 导入模块成员
import {
     log } from './logger'
import messages from './messages'
import {
     name, version } from '../package.json'// 使用模块成员
const msg = messages.hilog(msg)log(name)
log(version)

加载npm 模块
yarn add rollup-plugin-node-resolve --dev

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()]
}

src/index.js

// 导入模块成员
import _ from 'lodash-es'   //导入lodash模块
import {
     log } from './logger'
import messages from './messages'
import {
     name, version } from '../package.json'// 使用模块成员
const msg = messages.hilog(msg)log(name)
log(version)
log(_.camelCase('hello world'))

加载CommonJS模块
yarn add rollup-plugin-commonjs --dev

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

cjs-module.js

module.exports = {
    foo: 'bar'
}

index.js

// 导入模块成员
import _ from 'lodash-es'
import {
     log } from './logger'
import messages from './messages'
import {
     name, version } from '../package.json'
import cjs from './cjs-module'// 使用模块成员
const msg = messages.hilog(msg)log(name)
log(version)
log(_.camelCase('hello world'))
log(cjs)

代码拆分
yarn rollup --config --format amd

import('./logger').then(({
     log }) => {
    log('code splitting~')
})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'}
}

yarn rollup --config

选用原则 Rollup/Webpack

输出结果更扁平
自动移除未引用代码
打包结果依然完全可读

缺点

加载非ESM的第三方模块比较复杂
模块最终都被打包到一个函数中,
无法实现HMR(模块热替换) 浏览器环境中,
代码拆分功能依赖AMD库

如果不适合大量引用第三方库,引用html,分包
如果开发框架或者一个类库,比较适合,大多知名框架、库打包使用rollup

Parcel

零配置的前端应用打包器

只需要了解简单几个命令就可以使用打包方案
yarn init
yarn add parcel-bundler --dev
yarn pracel src/index.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')})
}

生产模式打包

yarn parcel build src/index.html