diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index 069dad9d9a..707d6a43ed 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -324,14 +324,16 @@ export default class OptionManager { } } - init(opts: Object): Object { + init(opts: Object = {}): Object { + let filename = opts.filename; + // resolve all .babelrc files if (opts.babelrc !== false) { - this.findConfigs(opts.filename); + this.findConfigs(filename); } // merge in base options - this.mergeOptions(opts, "base"); + this.mergeOptions(opts, "base", null, filename && path.dirname(filename)); // normalise this.normaliseOptions(opts); diff --git a/packages/babel-register/src/node.js b/packages/babel-register/src/node.js index 4a6c757a90..2006e35212 100644 --- a/packages/babel-register/src/node.js +++ b/packages/babel-register/src/node.js @@ -46,14 +46,15 @@ function mtime(filename) { return +fs.statSync(filename).mtime; } -function compile(filename, opts = {}) { +function compile(filename) { let result; - opts.filename = filename; - let optsManager = new OptionManager; - optsManager.mergeOptions(deepClone(transformOpts)); - opts = optsManager.init(opts); + + // merge in base options and resolve all the plugins and presets relative to this file + optsManager.mergeOptions(deepClone(transformOpts), "base", null, path.dirname(filename)); + + let opts = optsManager.init({ filename }); let cacheKey = `${JSON.stringify(opts)}:${babel.version}`;