Мой текущий проект использует 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()));
};