52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
/*eslint-env node*/
|
|
/**
|
|
* External dependencies
|
|
*/
|
|
const fs = require( 'fs' );
|
|
const path = require( 'path' );
|
|
const rimraf = require( 'rimraf' );
|
|
const noop = () => {};
|
|
|
|
const rootPath = path.resolve( __dirname, '../' );
|
|
|
|
// This is a simple webpack plugin to merge the JS files generated by MiniCssExtractPlugin.
|
|
// Despited basically being noop files, they are required to get the real JS files to load,
|
|
// silently failing without them.
|
|
// See https://github.com/webpack-contrib/mini-css-extract-plugin/issues/147
|
|
|
|
function MergeExtractFilesPlugin( files = [], output = false ) {
|
|
this.files = files;
|
|
this.output = output;
|
|
}
|
|
|
|
MergeExtractFilesPlugin.prototype.apply = function( compiler ) {
|
|
if ( ! this.output ) {
|
|
return;
|
|
}
|
|
compiler.hooks.afterEmit.tap( 'afterEmit', () => {
|
|
this.files.forEach( ( f ) => {
|
|
// If we're watching, we might not have created all the file stubs.
|
|
if ( ! fs.existsSync( path.resolve( rootPath, f ) ) ) {
|
|
return;
|
|
}
|
|
const content = fs.readFileSync( path.resolve( rootPath, f ) );
|
|
try {
|
|
fs.appendFileSync(
|
|
path.resolve( rootPath, this.output ),
|
|
'\n\n' + content
|
|
);
|
|
// noop silently ignores errors with deleting the file.
|
|
rimraf( f, noop );
|
|
} catch ( error ) {
|
|
/* eslint-disable-next-line no-console */
|
|
console.log(
|
|
` There was an error merging ${ f } into ${ this.output }`,
|
|
error
|
|
);
|
|
}
|
|
} );
|
|
} );
|
|
};
|
|
|
|
module.exports = MergeExtractFilesPlugin;
|