Так что мне пришлось самому в этом разобраться, но я думаю, что это определенно не лучшее решение.
Прежде всего, я понятия не имел, как перебирать файлы JSON и использовать их содержимое, поэтому мне нужно было использовать файл JSON с одним пакетом.
{
"address": {
"lib": [
"choices.js/public/assets/scripts/choices.min.js"
],
"src": [
"base.js",
"address.js"
]
},
"foobar": {
"src": [
"base.js",
"foobar.js"
]
}
}
Имея это, я могу перебирать ключи и добавлять пути к именам файлов каждого раздела, создавать массив и передавать его в gulp-concat.
const master = JSON.parse( fs.readFileSync( './package.json' ) );
const jsBundles = JSON.parse( fs.readFileSync( './assets/js/_bundles.json' ) );
…
function prepareBundle( key )
{
var result = [];
if ( typeof( jsBundles[ key ].lib ) !== 'undefined' )
{
for ( var i in jsBundles[ key ].lib)
{
result.push( './node_modules/' + jsBundles[ key ].lib[ i ] );
}
}
if ( typeof( jsBundles[ key ].src ) !== 'undefined' )
{
for ( var i in jsBundles[ key ].src)
{
result.push( master.config.jsSrc + jsBundles[ key ].src[ i ] );
}
}
return result;
}
function createBundle( files, filename )
{
return src( files )
.pipe( concat( filename + '.js' ) )
.pipe( dest( master.config.jsDist ) );
}
function javascripts( done )
{
for ( var key in jsBundles )
{
( function( key )
{
var files = prepareBundle( key );
process.stdout.write( 'creating bundle: ' + key + '\n' );
createBundle( files, key );
})( key );
}
done();
}