Skip to content

Commit

Permalink
Build: Fix the Windows build
Browse files Browse the repository at this point in the history
This commit gets rid of rollup-plugin-hypothetical in favor of a simpler
inline Rollup plugin that fits our need and is compatible with Windows.

Fixes gh-4548
Closes gh-4549
  • Loading branch information
mgol authored Dec 2, 2019
1 parent 44ac8c8 commit 9fd2fa5
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 18 deletions.
44 changes: 27 additions & 17 deletions build/tasks/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ module.exports = function( grunt ) {
const fs = require( "fs" );
const path = require( "path" );
const rollup = require( "rollup" );
const rollupHypothetical = require( "rollup-plugin-hypothetical" );
const rollupFileOverrides = require( "./lib/rollup-plugin-file-overrides" );
const Insight = require( "insight" );
const pkg = require( "../../package.json" );
const srcFolder = path.resolve( `${ __dirname }/../../src` );
Expand Down Expand Up @@ -39,10 +39,18 @@ module.exports = function( grunt ) {
outro: wrapper[ 1 ]
.replace( /^\n*/, "" )
};
const rollupHypotheticalOptions = {
allowFallthrough: true,
files: {}
};
const fileOverrides = new Map();

function getOverride( filePath ) {
return fileOverrides.get( path.resolve( filePath ) );
}

function setOverride( filePath, source ) {

// We want normalized paths in overrides as they will be matched
// against normalized paths in the file overrides Rollup plugin.
fileOverrides.set( path.resolve( filePath ), source );
}

grunt.registerMultiTask(
"build",
Expand Down Expand Up @@ -186,14 +194,14 @@ module.exports = function( grunt ) {

// Remove the jQuery export from the entry file, we'll use our own
// custom wrapper.
rollupHypotheticalOptions.files[ inputRollupOptions.input ] = read( inputFileName )
.replace( /\n*export default jQuery;\n*/, "\n" );
setOverride( inputRollupOptions.input,
read( inputFileName ).replace( /\n*export default jQuery;\n*/, "\n" ) );

// Replace exports/global with a noop noConflict
if ( ( index = excluded.indexOf( "exports/global" ) ) > -1 ) {
rollupHypotheticalOptions.files[ `${ srcFolder }/exports/global.js` ] =
setOverride( `${ srcFolder }/exports/global.js`,
"import jQuery from \"../core.js\";\n\n" +
"jQuery.noConflict = function() {};";
"jQuery.noConflict = function() {};" );
excluded.splice( index, 1 );
}

Expand All @@ -207,9 +215,10 @@ module.exports = function( grunt ) {
}

// Remove the comma for anonymous defines
rollupHypotheticalOptions.files[ `${ srcFolder }/exports/amd.js` ] =
setOverride( `${ srcFolder }/exports/amd.js`,
read( "exports/amd.js" )
.replace( /(\s*)"jquery"(\,\s*)/, amdName ? "$1\"" + amdName + "\"$2" : "" );
.replace( /(\s*)"jquery"(\,\s*)/,
amdName ? "$1\"" + amdName + "\"$2" : "" ) );
}

grunt.verbose.writeflags( excluded, "Excluded" );
Expand All @@ -225,7 +234,7 @@ module.exports = function( grunt ) {

// Replace excluded modules with empty sources.
for ( const module of excluded ) {
rollupHypotheticalOptions.files[ `${ srcFolder }/${ module }.js` ] = "";
setOverride( `${ srcFolder }/${ module }.js`, "" );
}
}

Expand All @@ -234,20 +243,21 @@ module.exports = function( grunt ) {

// Remove the default inclusions, they will be overwritten with the explicitly
// included ones.
rollupHypotheticalOptions.files[ inputRollupOptions.input ] = "";
setOverride( inputRollupOptions.input, "" );

}

// Import the explicitly included modules.
if ( included.length ) {
rollupHypotheticalOptions.files[ inputRollupOptions.input ] += included
.map( module => `import "./${module}.js";` )
.join( "\n" );
setOverride( inputRollupOptions.input,
getOverride( inputRollupOptions.input ) + included
.map( module => `import "./${module}.js";` )
.join( "\n" ) );
}

const bundle = await rollup.rollup( {
...inputRollupOptions,
plugins: [ rollupHypothetical( rollupHypotheticalOptions ) ]
plugins: [ rollupFileOverrides( fileOverrides ) ]
} );

const { output: [ { code } ] } = await bundle.generate( outputRollupOptions );
Expand Down
24 changes: 24 additions & 0 deletions build/tasks/lib/rollup-plugin-file-overrides.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"use strict";

/**
* A Rollup plugin accepting a file overrides map and changing
* module sources to the overridden ones where provided. Files
* without overrides are loaded from disk.
*
* @param {Map<string, string>} fileOverrides
*/
module.exports = ( fileOverrides ) => {
return {
name: "jquery-file-overrides",
load( id ) {
if ( fileOverrides.has( id ) ) {

// Replace the module by a fake source.
return fileOverrides.get( id );
}

// Handle this module via the file system.
return null;
}
};
};
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@
"raw-body": "2.3.3",
"requirejs": "2.3.6",
"rollup": "1.25.2",
"rollup-plugin-hypothetical": "2.1.0",
"sinon": "7.3.1",
"strip-json-comments": "2.0.1",
"testswarm": "1.1.0",
Expand Down

0 comments on commit 9fd2fa5

Please sign in to comment.