标准答案

  1. Rollup 对 ESM 静态分析和 Tree Shaking 支持成熟,适合输出更干净的库代码。
  2. 组件库、工具库通常需要同时产出 ESM、CJS、类型声明和可能的 UMD 文件,Rollup 对这些产物控制较细。
  3. 应用构建除了 JS 打包,还涉及 HTML 注入、开发服务器、HMR、资源处理、环境变量、代码分割等整体体验。
  4. Rollup 也可以打包应用,但通常需要更多插件和工程配置。
  5. 现代工具里,Vite 用 Rollup 做生产构建,本质上也是复用 Rollup 在产物优化上的能力。

题目解析

库和应用的打包目标不同。库更关心“别人怎么消费我”:能不能按需引入、类型是否完整、模块格式是否兼容、peerDependencies 是否外置。

应用更关心“用户怎么加载页面”:HTML、资源路径、缓存、动态路由、懒加载、环境配置、开发调试体验都会进入构建链。

所以说 Rollup 更适合库,不是说它不能打应用,而是它在库产物控制和 ESM 分析上更自然;应用侧往往会选择 Vite、Webpack、Rspack 这类更完整的工程方案。

代码示例

库构建里经常会显式输出多种格式。

JavaScript
export default {
  input: 'src/index.ts',
  output: [
    { file: 'dist/index.mjs', format: 'es' },
    { file: 'dist/index.cjs', format: 'cjs' }
  ],
  external: ['vue', 'react']
}

常见误区

  • 把“适合库构建”理解成 Rollup 不能构建应用。
  • 库构建时把 React、Vue 等宿主依赖直接打进产物,导致消费方出现多实例或体积膨胀。
  • 只输出一种模块格式,没有考虑使用方的 Node、Bundler、浏览器脚本等不同消费环境。

作者信息