If loading a preset fails, show its name/path (#4506) (#4517)

This commit is contained in:
Moti Zilberman 2016-09-18 06:01:08 +03:00 committed by Henry Zhu
parent cbbc1c7333
commit e64d86c1eb
3 changed files with 47 additions and 25 deletions

View File

@ -258,6 +258,7 @@ export default class OptionManager {
} }
let presetLoc; let presetLoc;
try {
if (typeof val === "string") { if (typeof val === "string") {
presetLoc = resolve(`babel-preset-${val}`, dirname) || resolve(val, dirname); presetLoc = resolve(`babel-preset-${val}`, dirname) || resolve(val, dirname);
if (!presetLoc) { if (!presetLoc) {
@ -285,7 +286,13 @@ export default class OptionManager {
throw new Error(`Unsupported preset format: ${val}.`); throw new Error(`Unsupported preset format: ${val}.`);
} }
onResolve && onResolve(val); onResolve && onResolve(val, presetLoc);
} catch (e) {
if (presetLoc) {
e.message += ` (While processing preset: ${JSON.stringify(presetLoc)})`;
}
throw e;
}
return val; return val;
}); });
} }

View File

@ -0,0 +1,3 @@
module.exports = function () {
throw new Error('Not a real preset');
}

View File

@ -1,6 +1,7 @@
var assert = require("assert"); var assert = require("assert");
var OptionManager = require("../lib/transformation/file/options/option-manager"); var OptionManager = require("../lib/transformation/file/options/option-manager");
var Logger = require("../lib/transformation/file/logger"); var Logger = require("../lib/transformation/file/logger");
var path = require("path");
suite("option-manager", function () { suite("option-manager", function () {
suite("memoisePluginContainer", function () { suite("memoisePluginContainer", function () {
@ -43,5 +44,16 @@ suite("option-manager", function () {
/Using removed Babel 5 option: base.auxiliaryComment - Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`/ /Using removed Babel 5 option: base.auxiliaryComment - Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`/
); );
}) })
test("throws for resolved but erroring preset", function() {
return assert.throws(
function () {
var opt = new OptionManager(new Logger(null, "unknown"));
opt.init({
'presets': [path.resolve(__dirname, "fixtures", "option-manager", "not-a-preset")]
});
},
/While processing preset: .*option-manager(?:\/|\\\\)not-a-preset\.js/
);
})
}); });
}); });