首页 > 其他分享 >【Rollup】快速上手及其配置

【Rollup】快速上手及其配置

时间:2024-07-21 14:55:58浏览次数:7  
标签:const log plugin Rollup 配置 rollup js json 快速

概述

Rollup 是一款使用 ES Modules 标准的 JavaScript 打包工具。它也可以将项目中散落的细小模块打包为整块代码。

从作用上来看,Rollup 与 Webpack 非常类似。不过相比于 Webpack,Rollup 要小巧的多。因为 Webpack 在配合一些插件的使用下,几乎可以完成开发过程中,前端工程化的绝大多数工作。而 Rollup 可以说仅仅是一个 ESM 打包器,没有其它。

基本使用:

npm init

在这里插入图片描述

export default{
  h1: 'Hello World!'
}
export const log = msg => {
  console.log(`[logger] ${msg}`);
}
export const error = msg => {
  console.error(`[logger] ${msg}`);
}
import { log } from "./logger";
import message from "./message";

const msg = message.h1
log(msg); // Hello World
npx rollup ./src/index.js --format iife --file dist/bundle.js
  • npx rollup 需要打包的文件 --format 打包格式 --file 输出文件路径
(function () {
  'use strict';

  const log = msg => {
    console.log(`[logger] ${msg}`);
  };

  var message = {
    h1: 'Hello World!'
  };

  const msg = message.h1;
  log(msg); // Hello World

})();

rollup 会自动开启 tree-shacking,对于没有引用到的代码不用进行打包。

配置

rollup.config.js

module.exports =  {
    input: 'src/index.js',
    output: {
        file: 'dist/bundle.js',
        format: 'iife'
    }
}

使用命令执行打包:

npx rollup --config

默认不会使用配置文件,需要用 --config 指定。

插件

使用 rollup-plugin-json 演示。插件用于扩展功能。

npm i rollup-plugin-json --dev
const json = require('rollup-plugin-json');
module.exports =  {
    input: 'src/index.js',
    output: {
        file: 'dist/bundle.js',
        format: 'iife'
    },
    plugins: [
      json(),
    ]
}
import { log } from "./logger";
import message from "./message";
import { name, version } from "../package.json";

const msg = message.h1
log(msg); // Hello World
log(name)
log(version)

导入 json 文件,进行打包,打包成功。

这里只是用了 name,version,所以只对他们进行打包了。其余没有使用到的通过 tree-shacking 没有打包。

加载 npm 模块

rollup 默认只能加载文件路径中的模块,对于第三方模块,不进行加载,所以需要通过 rollup-plugin-node-resolve 这样一个插件进行加载第三方模块。

使用该插件,就可以通过模块名称导入第三方模块了。

npm i rollup-plugin-node-resolve --dev
const json = require('rollup-plugin-json');
const resolve = require('rollup-plugin-node-resolve');

module.exports =  {
    input: 'src/index.js',
    output: {
        file: 'dist/bundle.js',
        format: 'iife'
    },
    plugins: [
      json(),
      resolve()
    ]
}

我们这里使用 ms 这个第三方模块

npm i ms
import ms from "ms";
import { log } from "./logger";
import message from "./message";
import { name, version } from "../package.json";

const msg = message.h1
log(msg); // Hello World
log(name)
log(version)
log(ms(`${hours}h`));

打包后,发现报错:

在这里插入图片描述

这里报错是因为 rollup 默认加载 esm 模块,而没有加载 cjs 模块,但是没有报错安装第三方模块,因此安装第三方模块的问题解决。

至于如何解决没有加载 cjs 模块,看接下来的部分。

加载 cjs 模块

rollup 默认只是加载 esm 模块。

所以上述报错的原因是:ms模块没有默认的导出声明,可以使用@rollup/plugin-commonjs来尝试解决此类问题,

npm i -D rollup-plugin-commonjs
const json = require('rollup-plugin-json');
const resolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');

module.exports =  {
    input: 'src/index.js',
    output: {
        file: 'dist/bundle.js',
        format: 'iife'
    },
    plugins: [
      json(),
      resolve(),
      commonjs()
    ]
}

然后打包成功!

代码分包

可以使用动态导入的方式实现按需加载,rollup 内部也会自动进行代码分包。

// import ms from "ms";
// import { log } from "./logger";
// import message from "./message";
// import { name, version } from "../package.json";

// const msg = message.h1
// log(msg); // Hello World
// log(name)
// log(version)
// log(ms(`${hours}h`));

import("./logger").then(({ log }) => log("Hello World"));

在这里插入图片描述

直接打包报错,iife 标准不会对代码进行拆分。所以要使用 amd 或者 cmd 标准。

我们要在 浏览器中使用,只能使用 amd 标准。

const json = require("rollup-plugin-json");
const resolve = require("rollup-plugin-node-resolve");
const commonjs = require("rollup-plugin-commonjs");

module.exports = {
  input: "src/index.js",
  output: {
    // file: 'dist/bundle.js',
    // format: 'iife'
    dir: "dist",
    format: "amd",
  },
  plugins: [json(), resolve(), commonjs()],
};

然后就可以进行代码分包了。

在这里插入图片描述

多入口打包

多入口打包会自动进行代码分包,所以要使用 amd 标准。

然后,我们只需要将入口写成数组的形式,或者对象的形式即可进行多入口打包。

const json = require("rollup-plugin-json");
const resolve = require("rollup-plugin-node-resolve");
const commonjs = require("rollup-plugin-commonjs");

module.exports = {
  input: ["src/index.js", "src/index2.js"],
  output: {
    // file: 'dist/bundle.js',
    // format: 'iife'
    dir: "dist",
    format: "amd",
  },
  plugins: [json(), resolve(), commonjs()],
};

对于 amd 输出的 js 文件,我们不能直接引用到页面上,必须通过实现 amd 标准的库加载。

所以写一个 html 文件:

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- data-main: 指定 require 加载的模块入口 -->
  <script src="https://unpkg.com/[email protected]/require.js" data-main="bundle.js"></script>
</body>
</html>

在这里插入图片描述

然后在终端通过:

serve dist

开启 一个 http 服务运行 dist 文件。

rollup 总结

优势:

  • 输出结果更加扁平,执行效率更高
  • 自动移除未引用的代码,摇树
  • 打包结果完全可读

缺点:

  • 加载非ESM的第三方模块比较复杂,需要额外的插件配置
  • 模块最终都被打包到一个函数中,无法实现HMR
  • 浏览器环境中,代码拆分功能依赖AMD库

所以开发应用程序最好使用 webpack,而开发类库 / 框架 则最好使用 rollup。

标签:const,log,plugin,Rollup,配置,rollup,js,json,快速
From: https://blog.csdn.net/XiugongHao/article/details/140570343

相关文章

  • 虚拟机配置git连接gitee
    1、安装git终端输入sudoapt-getinstallgit2、配置git配置用户名终端输入gitconfig--globaluser.name"yourname",将替换成你的用户名(一般就和gitee上的用户名一致就行)配置邮箱终端输入gitconfig--globaluser.email"youremail",将替换成gitee绑定的邮箱......
  • sprintboot 配置 lombok
    springboot3.x首先在springboot项目的pom.xml中导入<!--lombok,可以简化实体类声明--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.1......
  • 配置管理中Nexus的应用+mvn上传方式
    前言:        Nexus作为市面上为数不多的开源制品仓库,我个人在做配置管理体系建设的时候是会比较经常使用的,很多开发团队中他们不是很重视或者说虽然因为制品遇到了很多问题但是因为没有接触过制品管理的办法所以苦痛已久,今天也跟各位分享一下配置管理中Nexus的使用,便......
  • Mike11前处理—如何快速简便的提取断面文件Cross sections?——ZDM法
    前言:近期接触了一些关于MIKE11提取断面的技巧,当然很多人应该知道这种方法——ZDM软件提取(一款水工设计软件)。我们一般拿到都是CAD版本的断面文件,如果一个一个去输入的话,繁琐又耗时,还容易出错,今天我们在这里介绍一种简单的断面提取方法—ZDM法此方法适用很普遍,小编抽个时......
  • centos 防火墙配置,并限制端口
    查看防火墙状态systemctlstatusfirewalld如果防火墙处于停止状态,则启动它:systemctlstartfirewalld并设置防火墙开机自启:systemctlenablefirewalld查看当前开放的端口firewall-cmd--list-ports开放端口firewall-cmd--add-port=80/tcp--permanentfirewall......
  • .NET C# 配置 Options
    .NETC#配置Options使用options模式可以带来许多好处,包括清晰的配置管理、类型安全、易于测试和灵活性。但在使用过程中,也需要注意配置复杂性、性能开销和依赖框架等问题。通过合理设计和使用,可以充分发挥options模式的优势,提高代码的可维护性和可靠性。文章目录......
  • 在 PowerShell 中,可以编写脚本来检测本地加载和远程加载的情况。这通常涉及到检查计算
    在PowerShell中,可以编写脚本来检测本地加载和远程加载的情况。这通常涉及到检查计算机上的特定服务或应用程序的状态或配置。以下是一些示例脚本和方法,可以用来实现这些检测:检测本地加载示例:检查本地服务的运行状态powershellCopyCode#检查本地服务状态$serviceName="M......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • 如何使用FlowUs快速构建专业领域知识网络是一个系统化的过程,旨在整合和组织一个特定领
     在这个信息爆炸的时代,快速构建知识网络就像是在浩瀚的知识海洋中搭建一座灯塔,指引我们前行的方向。它不仅帮助我们系统化地整理和理解复杂的信息,还能让我们在专业领域内更快速地成长和进步。当你面对一个全新的项目或挑战时,拥有一个完善的知识网络就像是拥有了一个强大的后......
  • 《yanr 的安装与配置全攻略》
    在软件开发和技术领域,yanr 作为一款强大的工具,能够为我们带来诸多便利。本文将详细介绍 yanr 的安装与配置步骤,帮助您快速上手并充分发挥其优势。一、yanr 简介Yarn(YetAnotherResourceNegotiator)是一种新的JavaScript包管理工具,具有速度快、离线模式、确定性、多注......