diff options
author | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2019-12-02 19:55:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-02 19:55:19 +0100 |
commit | 9fd2fa5388dba5c71129a1d9e3bb8e4fe6e4eb0b (patch) | |
tree | 9e6cd3c8c3a6072235e12a19bd6b6e2b9cd35bc8 /build/tasks | |
parent | 44ac8c8529173711b66046ae5cfefa5bd4892461 (diff) | |
download | jquery-9fd2fa5388dba5c71129a1d9e3bb8e4fe6e4eb0b.tar.gz jquery-9fd2fa5388dba5c71129a1d9e3bb8e4fe6e4eb0b.zip |
Build: Fix the Windows build
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
Diffstat (limited to 'build/tasks')
-rw-r--r-- | build/tasks/build.js | 44 | ||||
-rw-r--r-- | build/tasks/lib/rollup-plugin-file-overrides.js | 24 |
2 files changed, 51 insertions, 17 deletions
diff --git a/build/tasks/build.js b/build/tasks/build.js index 188e1e452..4abc70868 100644 --- a/build/tasks/build.js +++ b/build/tasks/build.js @@ -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` ); @@ -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", @@ -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 ); } @@ -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" ); @@ -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`, "" ); } } @@ -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 ); diff --git a/build/tasks/lib/rollup-plugin-file-overrides.js b/build/tasks/lib/rollup-plugin-file-overrides.js new file mode 100644 index 000000000..c494e4e5d --- /dev/null +++ b/build/tasks/lib/rollup-plugin-file-overrides.js @@ -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; + } + }; +}; |