是否可以在没有输入文件的情况下运行汇总插件(在多捆绑实例中)?

Oti*_*ght 8 javascript plugins bundle rollup ecmascript-6

我遇到过一种情况,我通过汇总捆绑多个文件,文档中提供了这样的示例cli

我导出一组捆绑包,如下所示:

export default [
    {
        input: 'packages/A/index.js',
        output: {
            name: '[name]Bundle',
            file: '[name].umd.js',
            format: 'umd'
        }
    },
    {
        input: 'packages/B/index.js',
        output: {
            name: '[name]Bundle',
            file: '[name].umd.js',
            format: 'umd'
        }
    }
];
Run Code Online (Sandbox Code Playgroud)

然后我有一个函数可以为每个包添加一个通用配置(想想插件),比如:

import path from "path";

import alias from '@rollup/plugin-alias';
import resolve from '@rollup/plugin-node-resolve';


const augment = configs => {

    const generateAlias = (symbol, location) => {
        return {
            find: symbol,
            replacement: path.resolve(process.cwd(), location)
        };
    }

    const entries = [
        generateAlias("@", "src/"),
        generateAlias("~", "src/assets/scss/"),
        generateAlias("#", "src/assets/img/"),
        generateAlias("%", "config/"),
    ];

    const plugins = [
        alias({
            entries
        }),
        resolve({ browser: true }),
    ];

    return configs.map(entry => {
        return {
            ...entry,
            plugins
        }
    });
}

export {
    augment
}

Run Code Online (Sandbox Code Playgroud)

我将上面导出的数组包装如下augment

const bundles = [/* above example */];

export default augment(bundles);
Run Code Online (Sandbox Code Playgroud)

现在这一切都工作正常,但我有两个插件,我实际上不想将它们应用到每个捆绑包,我只想在所有捆绑包构建完成后运行它们,这两个插件是;rollup-plugin-serverollup-plugin-workbox现在实际上与捆绑的任何文件都没有任何关系,并且多次实例化没有任何意义。

作为函数的一部分,我想做的augment是将它们附加到返回数组的末尾,例如:

const exportedArray = configs.map(/* function from above */);

exportedArray.push(...[
        {
                plugins: [
                        serve({
                                host,
                                port,
                                contentBase: 'dist/'
                        })
                ]
        }
]);

return exportedArray;
Run Code Online (Sandbox Code Playgroud)

这不会包含input,我已经尝试了上面的方法并且汇总抱怨,替代选项是将这些插件添加到阵列上的最终包中,我只是更喜欢实例化它们而不将它们绑定到特定包的想法。

Ste*_*aes 2

Rollup 需要一个输入文件才能工作,但这并不意味着您不能简单地丢弃文件的结果。您可以创建一个空文件empty.js(或者在其中添加一些注释)并将其用作输入。只需忽略输出属性,这样结果就不会写入任何地方。

- -编辑 - -

有点像这样:

export default {
    input: './empty.js',
    plugins: [{
        name: 'test plugin',
        load() {
            console.log('test plugin')
        }
    }]
}

Run Code Online (Sandbox Code Playgroud)

- -编辑 - -

或者,您可以写入虚拟文件并再次将其删除

export default {
    input: './empty.js',
    plugins: [{
        name: 'test plugin',
        load() {
            console.log('test plugin')
        }
    }]
}

Run Code Online (Sandbox Code Playgroud)