You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Gulp.js中使用Rollup配置多输出文件的问题求助

Gulp环境下Rollup多输出配置正确实现方式

错误原因梳理

  • 首次报错是因为bundle.write()仅支持单个入参,多输出配置需要放在同一个数组中传入,而非拆分多个独立对象作为参数传入
  • 二次报错是因为@rollup/stream不支持直接传入output数组,会将数组的索引值识别为非法配置字段

实现方案

方案1:Rollup原生API实现(推荐)

直接使用Rollup官方Node API配合Gulp异步任务,无需额外stream适配工具,天然支持多输出配置,写法更简洁稳定:

const gulp = require('gulp');
const rollup = require('rollup');

gulp.task('js', async function () {
  // 初始化bundle实例
  const bundle = await rollup.rollup({
    input: './app.js',
    // 通用配置(plugins、external等)写在此处
    plugins: []
  });

  // 传入output数组生成多份输出
  await bundle.write([
    {
      file: './dist/library.js',
      format: 'umd',
      name: 'library',
      sourcemap: true
    },
    {
      file: './dist/file2.js',
      format: 'umd'
    }
  ]);

  return Promise.resolve();
});

方案2:@rollup/stream兼容实现

如果原有构建链路依赖stream管道,可通过合并多份rollup流实现多输出,需要先安装依赖:
npm install merge-stream --save-dev

const gulp = require('gulp');
const source = require('vinyl-source-stream');
const buffer = require('vinyl-buffer');
const rollup = require('@rollup/stream');
const merge = require('merge-stream');

gulp.task('js', function() {
  // 定义所有输出配置
  const outputConfigs = [
    {
      file: 'bundle.js',
      format: 'umd'
    },
    {
      file: 'test.js',
      format: 'umd'
    }
  ];

  // 为每个输出配置生成独立的构建流
  const buildStreams = outputConfigs.map(config => {
    return rollup({
      input: './app.js',
      output: config
    })
    .pipe(source(config.file))
    .pipe(buffer())
    .pipe(gulp.dest('./build/js'));
  });

  // 合并所有流等待全部构建完成
  return merge(buildStreams);
});

内容的提问来源于stack exchange,提问作者Alvaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:27:02