Skip to content

Commit

Permalink
fix: use async config loading if available
Browse files Browse the repository at this point in the history
  • Loading branch information
the-spyke authored and nicolo-ribaudo committed Nov 8, 2020
1 parent 989103c commit 2385e81
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 7 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Expand Up @@ -20,7 +20,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [10.x, 12.x, 14.x]
node-version: [10.x, 12.x, 13.x, 14.x, 15.x]
webpack-version: [latest, next]
include:
- node: 14.x
Expand Down
2 changes: 2 additions & 0 deletions package.json
Expand Up @@ -5,6 +5,7 @@
"files": [
"lib"
],
"type": "commonjs",
"main": "lib/index.js",
"engines": {
"node": ">= 6.9"
Expand Down Expand Up @@ -42,6 +43,7 @@
"react-intl": "^3.3.2",
"react-intl-webpack-plugin": "^0.3.0",
"rimraf": "^3.0.0",
"semver": "7.0.0",
"webpack": "^4.0.0"
},
"scripts": {
Expand Down
4 changes: 3 additions & 1 deletion src/index.js
Expand Up @@ -159,7 +159,9 @@ async function loader(source, inputSourceMap, overrides) {
);
}

const config = babel.loadPartialConfig(
// babel.loadPartialConfigAsync is available in v7.8.0+
const { loadPartialConfigAsync = babel.loadPartialConfig } = babel;
const config = await loadPartialConfigAsync(
injectCaller(programmaticOptions, this.target),
);
if (config) {
Expand Down
3 changes: 3 additions & 0 deletions test/fixtures/babelrc.mjs
@@ -0,0 +1,3 @@
export default {
presets: ["@babel/preset-env"]
};
54 changes: 54 additions & 0 deletions test/loader.test.js
Expand Up @@ -2,6 +2,7 @@ import test from "ava";
import fs from "fs";
import path from "path";
import rimraf from "rimraf";
import { gte } from "semver";
import webpack from "webpack";
import createTestDirectory from "./helpers/createTestDirectory";

Expand Down Expand Up @@ -127,3 +128,56 @@ test.cb(
});
},
);

test.cb("should load ESM config files", t => {
const config = Object.assign({}, globalConfig, {
entry: path.join(__dirname, "fixtures/constant.js"),
output: {
path: t.context.directory,
},
module: {
rules: [
{
test: /\.js$/,
loader: babelLoader,
exclude: /node_modules/,
options: {
// Use relative path starting with a dot to satisfy module loader.
// https://github.com/nodejs/node/issues/31710
// File urls doesn't work with current resolve@1.12.0 package.
extends: (
"." +
path.sep +
path.relative(
process.cwd(),
path.resolve(__dirname, "fixtures/babelrc.mjs"),
)
).replace(/\\/g, "/"),
babelrc: false,
},
},
],
},
});

webpack(config, (err, stats) => {
t.is(err, null);
// Node supports ESM without a flag starting from 13.2.0.
if (gte(process.version, `13.2.0`)) {
t.deepEqual(
stats.compilation.errors.map(e => e.message),
[],
);
} else {
t.is(stats.compilation.errors.length, 1);
const moduleBuildError = stats.compilation.errors[0];
const babelLoaderError = moduleBuildError.error;
t.true(babelLoaderError instanceof Error);
// Error messages are slightly different between versions:
// "modules aren't supported" or "modules not supported".
t.regex(babelLoaderError.message, /supported/i);
}
t.is(stats.compilation.warnings.length, 0);
t.end();
});
});
12 changes: 7 additions & 5 deletions test/sourcemaps.test.js
Expand Up @@ -171,11 +171,13 @@ test.cb("should output webpack's devtoolModuleFilename option", t => {
t.is(err, null);

// The full absolute path is included in the sourcemap properly
t.not(
data
.toString()
.indexOf(JSON.stringify(`==${globalConfig.entry}==`)),
-1,
t.regex(
data.toString(),
new RegExp(
// Forward slashes on Windows are common in Babel/Webpack:
// https://github.com/webpack/webpack/pull/1909
JSON.stringify(`==${globalConfig.entry.replace(/\\/g, "/")}==`),
),
);

t.end();
Expand Down

0 comments on commit 2385e81

Please sign in to comment.