webpack's documentation lists an interesting pattern for shimming a module that sets properties on window, like window.XModule = {...}.
require('imports?window=>{}!exports?window.XModule!./file.js')
Applying the pattern to ES6, I ended up with this:
import XMODULE from 'imports?window=>{}!exports?window.XModule!./file.js'
I'm trying to understand how Webpack processes this statement, specifically, what role the imports-loader part plays, imports?window=>{}. I understand that the exports-loader basically sets XMODULE to be window.XModule from the dependency. As for the imports-loader, it seems like all it does is not allow the window object to get polluted by the dependency... but how?
How does imports?window=>{} work in conjuction with exports?window.XModule?
I figured out the answer to my question. Firstly, the order of the loaders matters (
expose-loaderbeforeimports-loaderbeforeexports-loader):https://webpack.github.io/docs/shimming-modules.html#order-of-loaders
Regarding the specific example in my question...
'imports?window=>{}!exports?window.XModule!./file.js'webpack will run the
imports-loaderand insert the following at the beginning of the module:webpack will run the
exports-loaderand insert the following at the end of the module: