Skip to content

Commit

Permalink
Manually fix 'inline' sourcemaps so they work with Webpack. (#671)
Browse files Browse the repository at this point in the history
  • Loading branch information
loganfsmyth committed Sep 2, 2018
1 parent ea52d05 commit 5e0565d
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/index.js
Expand Up @@ -128,6 +128,16 @@ async function loader(source, inputSourceMap, overrides) {
});
}

if (options.sourceMaps === "inline") {
// Babel has this weird behavior where if you set "inline", we
// inline the sourcemap, and set 'result.map = null'. This results
// in bad behavior from Babel since the maps get put into the code,
// which Webpack does not expect, and because the map we return to
// Webpack is null, which is also bad. To avoid that, we override the
// behavior here so "inline" just behaves like 'true'.
options.sourceMaps = true;
}

const {
cacheDirectory = null,
cacheIdentifier = JSON.stringify({
Expand Down
47 changes: 47 additions & 0 deletions test/sourcemaps.test.js
Expand Up @@ -73,6 +73,53 @@ test.cb("should output webpack's sourcemap", t => {
});
});

test.cb("should output webpack's sourcemap properly when set 'inline'", t => {
const config = Object.assign({}, globalConfig, {
devtool: "source-map",
output: {
path: t.context.directory,
},
module: {
rules: [
{
test: /\.jsx?/,
loader: babelLoader + "?presets[]=@babel/env&sourceMap=inline",
exclude: /node_modules/,
},
],
},
});

webpack(config, (err, stats) => {
t.is(err, null);
t.is(stats.compilation.errors.length, 0);
t.is(stats.compilation.warnings.length, 0);

fs.readdir(t.context.directory, (err, files) => {
t.is(err, null);

const map = files.filter(file => file.indexOf(".map") !== -1);

t.true(map.length > 0);

if (map.length > 0) {
fs.readFile(path.resolve(t.context.directory, map[0]), (err, data) => {
t.is(err, null);

const mapObj = JSON.parse(data.toString());

t.is(mapObj.sources[1], "webpack:///./test/fixtures/basic.js");

// Ensure that the map contains the original code, not the
// compiled src.
t.is(mapObj.sourcesContent[1].indexOf("__esModule"), -1);
t.end();
});
}
});
});
});

test.cb("should output webpack's devtoolModuleFilename option", t => {
const config = Object.assign({}, globalConfig, {
devtool: "source-map",
Expand Down

0 comments on commit 5e0565d

Please sign in to comment.