rollup的基本使用 基本配置与处理各种文件

Rollup是一个JavaScript模块打包工具,专注于ESModule,提供简洁配置。相较于webpack,它更擅长处理纯JavaScript代码。文章介绍了Rollup的基本使用、配置、与webpack的区别,以及如何处理第三方库、CSS、Vue文件,实现代码压缩和本地服务器设置。同时,文章讨论了在开发和生产环境下的不同配置策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rollup

rollup是一个javascript的模块化打包工具 可以帮助我们编译小的代码到一个大的负载的代码中 比如一个库或者一个应用

rollup与webpack的区别
rollup主要针对ES Module进行打包
另外webpack通常可以通过各种loader处理各种各样的文件 以及处理他们的依赖关系
rollup更多时候专注于处理javascript代码的(当然也可以处理css font vue等文件)
rollup的配置和理念相对于webpack来收 更加的简洁和容易理解
在早期webpack不支持tree shaking时 rollup具备更强的优势

通常在实际项目开发过程中 都会使用webpack

rollup的基本使用

npm install rollup

创建main.js 打包到bundle.js
打包浏览器的库
npx rollup ./src/main.js -f iife -o dist/bundle.js
打包AMD的库
npx rollup ./src/main.js -f amd -o dist/bundle.js
打包CommonJS的库
npx rollup ./src/main.js -f cjs --o dist/bundle.js
打包通用的库(必须跟上name)
npx rollup ./src/main.js -f umd --name mathUtil -o dist/bundle.js

rollup的配置

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: [
		{
			format: "umd",
			name: "whyUtils",
			file: "./build/bundle.umd.js",
		},
		{
			format: "cjs",
			file: "./build/bundle.cjs.js",
		},
		{
			format: "amd",
			file: "./build/bundle.amd.js",
		},
		{
			format: "iife",
			file: "./build/bundle.browser.js",
		},
	],
};

解决rollup和第三方库的问题

安装解决commonjs的库
npm install @rollup/plugin-commonjs

安装解决node_modules的库
npm install @rollup/plugin-node-resolve

const commonjs = require("@rollup/plugin-commonjs")
const resolve = require("@rollup/plugin-node-resolve")

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		resolve(),
		commonjs()
	],
};

Babel转换代码

安装rollup对应的babel插件
npm install @rollup/plugin-babel
修改配置文件

const {babel} = require("@rollup/plugin-babel")

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		babel({
			babelHelpers: "bundled",
			exclude: /node_modules/
		})
	],
};

babel.config.js文件
npm install @babel/preset-env

module.exports = {
	presets: [
		"@babel/preset-env"
	]
}

Terser代码压缩

如果我们希望对代码进行压缩 可以使用@rollup/plugin-terser
npm install @rollup/plugin-terser

const {babel} = require("@rollup/plugin-babel")
const terser = require("@rollup/plugin-terser")
module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		babel({
			babelHelpers: "bundled",
			exclude: /node_modules/
		}),
		terser()
	],
};

处理css文件

npm install rollup-plugin-postcss postcss
配置postcss的插件

const postcss = require("rollup-plugin-postcss postcss");

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		postcss()
	],
};

处理vue文件

处理vue文件 我们需要使用rollup-plugin-vue插件
但是注意默认 情况下我们安装的是vue3.x的版本 所以我们这里指定了以下rollup-plugn-vue的版本
npm install rollup-plugin-vue @vue/compiler-sfc

使用vue插件

const vue = require("rollup-plugin-vue");
module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		vue()
	],
};

在我们打包vue项目后 汇报process is not edefined的错误
这时因为我们在打包的vue代码中 用到process.env.NODE_ENV 所以我们可以使用一个插件rollup-plugin-replace设置它对应的值
npm install rollup-plugin-replace

const vue = require("rollup-plugin-vue");
const replace = require("rollup-plugin-replace");

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		vue(),
		replace({
		"process.envNODE_ENV": JSON.stringify("production"),
	}),
	],
};

搭建本地服务器

第一步 使用rollup-plugin-serve搭建服务
npm install rollup-plugin-serve

const serve = require("rollup-plugin-serve");

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		serve({
			port: 8000,
			open: true,
			contentBase: ".",
		}),
	],
};

第二步 当文件发生变化 自动刷新浏览器
npm install rollup-plugin-livereload

const serve = require("rollup-plugin-serve");
const livereload = require("rollup-plugin-livereload")

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: [
		serve({
			port: 8000,
			open: true,
			contentBase: ".",
		}),
		libereload()
	],
};

第三步 启动时 开启文件监听
npx rollup -c -w

区分开发环境

我们可以在package.json中创建一个开发和构建的脚本

  "scripts": {
    "serve":"rollup -c --environment NODE_ENV=development -w",
		"build":"rollup -c --environment NODE_ENV=production "
  },
const serve = require("rollup-plugin-serve");
const livereload = require("rollup-plugin-livereload");
const postcss = require("rollup-plugin-postcss postcss");
const terser = require("@rollup/plugin-terser");
const vue = require("rollup-plugin-vue");
const replace = require("rollup-plugin-replace");

const isProduction = process.env.NODE_ENV === "production";

const plugins = [
	postcss(),
	vue(),
	replace({
		"process.envNODE_ENV": JSON.stringify("production"),
	}),
];

if (isProduction) {
	plugins.push(terser());
} else {
	const extraPlugins = [
		serve({
			port: 8000,
			open: true,
			contentBase: ".",
		}),
		livereload(),
	];
	plugins.push(...extraPlugins);
}

module.exports = {
	//入口
	input: "./lib/index.js",
	//出口
	output: {
		format: "umd",
		name: "utils",
		file: "./build/bundle.umd.js",
	},
	plugins: plugins,
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_聪明勇敢有力气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值