gulp-better-rollup: Преобразования, сделанные плагинами gulp, отброшены - PullRequest
0 голосов
/ 28 мая 2020

Мой текущий проект использует gulp для создания ресурсов (js, img, css). Для создания JS я использую gulp-better-rollup , что упрощает достижение этого в rollup :

Предоставляет несколько файлов в качестве входных и выводить каждый из них как отдельные файлы (а не как единый пакет).

Но теперь у меня есть требование, в котором некоторый код необходимо добавить во время сборки в каждый из этих файлов, прежде чем он будет преобразовано с помощью свертки (babel). Для этой цели я использовал gulp-append-prepend , который добавляет оператор импорта ко всем файлам JS. Но из-за плагина gulp-better-rollup это преобразование отбрасывается, поскольку этот плагин не читает файл из потока.

Ниже приведена просто задача JS моего gulpfile :

const { src, dest } = require("gulp"),
    gulpIf = require('gulp-if'),
    gap = require('gulp-append-prepend'),
    sourcemaps = require("gulp-sourcemaps");

const {isProduction} = require('../common/utils');

function rollup(){
    const gulpRollup = require('gulp-better-rollup');

    // Rollup plugins
    const babel = require('./babel'),
        nodeResolve = require('@rollup/plugin-node-resolve'),
        terser = require('rollup-plugin-terser').terser,
        rootImport = require('rollup-plugin-root-import');

    const baseDir = `${process.cwd()}\\src\\js`;

    // Rollup Config
    const config = {
        plugins: [
            rootImport({root: baseDir,useInput: 'prepend'}),
            nodeResolve(),
            babel(),
            require('rollup-plugin-cleanup')(),
        ]
    };

    const outputConfig = {    
        format: 'iife',
        plugins: [isProduction && terser()],
    };

    return gulpRollup(config,outputConfig);
};

module.exports = function js(browserSync){
    return src([
        // Ref: https://stackoverflow.com/a/35413106
        `src/js/**/!(_)*.js`, // select all js files not starting with _
        `!src/js/**/_*`, // exclude all folder starting with _
        `!src/js/**/_*/**/*` //exclude files/subfolders in folders starting with '_' 
    ])
        .pipe(gap.prependText('import "/../../node_modules/zepto/dist/zepto.min.js"'))  // This transformation is ignored by gulp-better-rollup.
        .pipe(gulpIf(!isProduction, sourcemaps.init()))
        .pipe(rollup())
        .pipe(gulpIf(!isProduction, sourcemaps.write(".")))
        .pipe(dest("assets/js"))    // Outputs each file separately.
        .pipe(gulpIf(!isProduction, browserSync.stream()));
};
...