2017-10-06 87 views
0

我有2个其中有一些共同的部分和不常见的零部件总成的配置文件:如何共享汇总配置文件

// rollup.config.umd.js 
    export config { 
    external: ['invariant', 'lodash'], 
    globals: { 
     invariant: 'invariant' 
    }, 
    input: 'src/index.js', 
    name: 'my.comp', 
    output: { 
     file: 'my.comp.umd.js' 
     format: 'umd' 
    }... 

和其他文件

// rollup.config.esm5.js 
    export config { 
    external: ['invariant', 'lodash'], 
    globals: { 
     invariant: 'invariant' 
    }, 
    input: 'src/index.js', 
    name: 'my.comp', 
    output: { 
     file: 'my.comp.es5.js' 
     format: 'es' 
    }... 

如何保持这些配置文件干?

不保持DRY有以下问题,例如,想象一下许多外部依赖 - 如果忘记在一个地方添加新的依赖关系,我们会遇到麻烦。

(我也用了一些不同的插件集等,以及插件的configs,但说是出于这个问题的范围。)

回答

2

首先,他们只是JavaScript的模块,让你随时可以做这样的事情:

// rollup.config.common.js 
export default { 
    external: ['invariant', 'lodash'], 
    globals: { 
    invariant: 'invariant' 
    }, 
    input: 'src/index.js', 
    name: 'my.comp' 
}; 

// rollup.config.esm5.js 
import common from './rollup.config.common.js'; 

export default Object.assign({ 
    output: { 
    file: 'my.comp.es5.js' 
    format: 'es' 
} 
}, common); 

// rollup.config.umd.js 
import common from './rollup.config.common.js'; 

export default Object.assign({ 
    output: { 
    file: 'my.comp.umd.js' 
    format: 'umd' 
} 
}, common); 

但真正的答案是两个CONFIGS合并成一个一个像这样:为更简单,更易于维护,T

export default { 
    external: ['invariant', 'lodash'], 
    globals: { 
    invariant: 'invariant' 
    }, 
    input: 'src/index.js', 
    name: 'my.comp', 
    output: [ 
    { 
     file: 'my.comp.es5.js' 
     format: 'es' 
    }, 
    { 
     file: 'my.comp.umd.js' 
     format: 'umd' 
    } 
    ] 
}; 

除了他的速度会更快,因为Rollup可以节省很多工作两次。

如果您需要在构建之间更改超过output选项,还可以从单个文件(export default [...])中导出一组配置。

+0

我在发布之前绑定了第一个解决方案,但由于某些原因无法正常工作。然而第二个解决方案输出[]非常好。 BTW汇总非常棒 - thx创建。 – bhantol

+0

好吧 - 第一次工作的部分也工作 - 必须翻转Object.assign的参数与{} – bhantol