Skip to content

进阶用法

Include/Exclude 模式

使用 glob 模式控制哪些文件添加 banner:

js
addBanner({
  content: '/*! ${name} v${version} */',
  include: ['**/*.js', '**/*.mjs'],
  exclude: ['**/*.min.js']
})

支持的模式

模式示例匹配
扩展名匹配**/*.js任意 .js 文件
前缀匹配src/**src/ 下所有文件
目录匹配**/dist/**任意位置的 dist 目录
通配符匹配*.min.jsfoo.min.js

多 Banner 支持

不同文件类型使用不同的 banner:

js
addBanner({
  banners: {
    '.js': '/*! ${name} v${version} - JavaScript */',
    '.mjs': '/*! ${name} v${version} - ES Module */',
    '.css': '/* ${name} v${version} - Stylesheet */'
  }
})

基于模式的 Banner

也可以使用模式作为键:

js
addBanner({
  banners: {
    '.js': '/* JS Banner */',
    '**/worker.js': '/* Web Worker */',
    '**/*.min.js': '/* Minified */'
  }
})

编程式使用

编程式地使用插件:

js
import { rollup } from 'rollup'
import addBanner from 'rollup-plugin-add-banner'

const bundle = await rollup({
  input: 'src/index.js',
  plugins: [
    addBanner({
      content: '/*! ${name} v${version} */'
    })
  ]
})

await bundle.write({
  file: 'dist/index.js',
  format: 'es'
})

多输出格式

生成多种输出格式时,每个输出都会添加 banner:

js
export default {
  input: 'src/index.js',
  output: [
    { file: 'dist/index.cjs', format: 'cjs' },
    { file: 'dist/index.mjs', format: 'es' }
  ],
  plugins: [
    addBanner({
      content: '/*! ${name} v${version} */'
    })
  ]
}

插件 API

在运行时访问 banner 信息:

js
const plugin = addBanner({
  content: '/*! ${name} v${version} */',
  envVar: 'NODE_ENV'
})

export default {
  plugins: [plugin]
}

// 后续代码中
console.log('已解析的 banner:', plugin.api.getBanner())
console.log('是否添加 banner:', plugin.api.shouldAddBanner())
console.log('模板变量:', plugin.api.getVars())

与其他插件集成

与 TypeScript 插件

js
import typescript from '@rollup/plugin-typescript'
import addBanner from 'rollup-plugin-add-banner'

export default {
  plugins: [
    typescript(),
    addBanner({ content: '/*! ${name} v${version} */' })
  ]
}

与 Node Resolve 插件

js
import { nodeResolve } from '@rollup/plugin-node-resolve'
import addBanner from 'rollup-plugin-add-banner'

export default {
  plugins: [
    nodeResolve(),
    addBanner({ content: '/*! ${name} v${version} */' })
  ]
}

动态 Banner 生成

动态生成 banner 内容:

js
const banner = (() => {
  const year = new Date().getFullYear()
  return `/*! ${pkg.name} v${pkg.version} (c) ${year} ${pkg.author} */`
})()

addBanner({ content: banner })

基于环境的配置

不同环境使用不同的 banner:

js
const isProduction = process.env.NODE_ENV === 'production'

addBanner({
  content: isProduction
    ? '/*! ${name} v${version} - Production Build */'
    : '/*! ${name} v${version} - Development Build */',
  // 或使用 envVar 选项自动检查
  envVar: isProduction ? undefined : 'DISABLE_BANNER'
})

基于 MIT 许可发布