大家好,我是鱼樱!!!
关注公众号【鱼樱AI实验室】
持续每天分享更多前端和AI辅助前端编码新知识~~喜欢的就一起学反正开源至上,无所谓被诋毁被喷被质疑文章没有价值~~~坚持自己观点
一个城市淘汰的自由职业-农村前端程序员(虽然不靠代码挣钱,写文章就是为爱发电),兼职远程上班目前!!!热心坚持分享~~~
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一、Rollup 核心架构优势
- Tree-shaking 算法:基于ESM静态分析的最彻底依赖优化
- 输出格式灵活:支持ESM/CJS/UMD/IIFE等多种模块格式
- 插件生态:通过插件实现全流程扩展(约300+官方/社区插件)
二、核心API与工程化应用场景
1. 基础API体系
javascript
const rollup = require('rollup');
// 核心三部曲
const bundle = await rollup.rollup(inputOptions); // 构建阶段
await bundle.write(outputOptions); // 输出阶段
await bundle.close(); // 资源释放
2. 关键配置对象
输入配置(inputOptions)
javascript
{
input: 'src/main.js', // 入口文件
plugins: [ // 插件系统
vue(),
babel({ extensions: ['.js', '.vue'] })
],
external: ['vue', 'react'], // 外部依赖排除
cache: true // 构建缓存加速
}
输出配置(outputOptions)
javascript
{
dir: 'dist', // 输出目录
format: 'esm', // 模块格式
name: 'MyLibrary', // UMD全局变量名
sourcemap: true, // 源码映射
entryFileNames: '[name].js', // 入口命名规则
chunkFileNames: 'chunks/[hash].js' // 代码分割规则
}
3. 高级API应用
代码动态分析
javascript
const { watch } = require('rollup');
// 监听模式开发
const watcher = watch({
...inputOptions,
output: [outputOptions],
watch: {
include: 'src/**',
exclude: 'node_modules/**'
}
});
watcher.on('event', (event) => {
if (event.code === 'BUNDLE_END') {
console.log(`构建完成,耗时${event.duration}ms`);
}
});
自定义插件开发
javascript
// 简易版Vue SFC处理器
export default function vuePlugin() {
return {
name: 'vue-processor',
transform(code, id) {
if (!/\.vue$/.test(id)) return;
const { parse, compile } = require('@vue/compiler-sfc');
const { descriptor } = parse(code);
const { code: renderCode } = compile(descriptor);
return { code: renderCode };
}
};
}
三、Vue工程化最佳实践
1. 完整Vue项目配置
javascript
// rollup.config.js
import vue from '@rollup/plugin-vue';
import postcss from 'rollup-plugin-postcss';
import { terser } from 'rollup-plugin-terser';
export default {
input: 'src/main.js',
output: {
dir: 'dist',
format: 'esm'
},
plugins: [
vue({
css: false, // 禁用CSS内联
template: { compilerOptions: { whitespace: 'condense' } }
}),
postcss({
extract: true, // 独立CSS文件
minimize: true
}),
terser()
]
};
2. 组件库打包优化策略
- 按需加载 :配合
@rollup/plugin-multi-entry
实现多入口 - 样式隔离 :使用
postcss-modules
开启CSS Modules - 类型声明 :集成
rollup-plugin-dts
生成类型文件
3. 与Vite的深度整合
javascript
// vite.config.js
export default {
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return 'vendor';
}
}
}
}
}
}
四、React工程化最佳实践
1. 现代React项目配置
javascript
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
export default {
input: 'src/index.jsx',
output: {
dir: 'dist',
format: 'esm',
preserveModules: true // 保留源码结构
},
plugins: [
json(),
commonjs({
include: /node_modules/
}),
babel({
babelHelpers: 'bundled',
extensions: ['.js', '.jsx', '.ts', '.tsx'],
presets: ['@babel/preset-react']
})
]
};
2. 高级优化技巧
-
Hooks保持 :配置
@rollup/plugin-replace
保持开发环境提示javascriptreplace({ 'process.env.NODE_ENV': JSON.stringify('production'), preventAssignment: true })
-
Suspense支持 :配合
@babel/plugin-transform-react-jsx
处理异步组件 -
状态管理集成:为Redux Toolkit添加不可变数据结构优化
3. 微前端场景应用
javascript
// 子系统独立打包配置
export default {
input: 'src/micro-app.js',
output: {
dir: 'dist',
format: 'system', // SystemJS格式
entryFileNames: 'micro-app-[hash].js'
},
plugins: [
// 确保共享依赖单例
nodeResolve({
dedupe: ['react', 'react-dom']
})
]
};
五、性能优化关键路径
- 构建速度优化 :
- 使用
rollup-plugin-cache
缓存AST解析 - 并行处理:
rollup-plugin-parallel
加速资源处理
- 使用
- 输出质量优化 :
@rollup/plugin-image
自动压缩图片rollup-plugin-visualizer
分析包体积
- 运行时优化 :
- 动态导入:
output.inlineDynamicImports
控制代码拆分 - 预加载提示:
output.assetFileNames
管理资源加载优先级
- 动态导入:
六、企业级工程方案
1. Monorepo支持方案
javascript
// 基于pnpm workspace的配置
import { defineConfig } from 'rollup';
import { nodeResolve } from '@rollup/plugin-node-resolve';
export default defineConfig({
input: 'packages/**/index.js',
output: {
dir: 'dist',
format: 'esm',
preserveModulesRoot: 'packages'
},
plugins: [
nodeResolve({
// 解析monorepo内部依赖
modulePaths: ['packages/*/node_modules']
})
]
});
2. 安全审计集成
javascript
import { rollupPluginHTML } from '@web/rollup-plugin-html';
import { auditPlugin } from 'rollup-plugin-lighthouse';
export default {
plugins: [
rollupPluginHTML({
input: 'src/index.html'
}),
auditPlugin({
thresholds: {
performance: 90,
accessibility: 90
}
})
]
};
3. 多环境配置方案
javascript
// rollup.config.prod.js
import analyze from 'rollup-plugin-analyzer';
export default {
...baseConfig,
plugins: [
...baseConfig.plugins,
analyze({
summaryOnly: true,
filter: module => !/node_modules/.test(module.id)
})
]
};
七、未来演进方向
- Bundleless支持 :通过
@rollup/plugin-virtual
实现按需编译 - WASM集成 :
@rollup/plugin-wasm
直接引入WebAssembly模块 - ESM CDN优化 :
rollup-plugin-preserve-shebang
支持Deno环境 - 构建时渲染 :结合
rollup-plugin-ssr
实现服务端渲染预处理
最佳实践提示:对于新项目建议采用Vite作为开发环境(底层Rollup)+ 自定义Rollup生产配置的组合方案,平衡开发体验与构建优化需求。