From 0c20e2d09714186df4189a88fe3d1947cb64ab99 Mon Sep 17 00:00:00 2001 From: Steven Dickinson Date: Mon, 30 Nov 2015 17:04:44 +0000 Subject: [PATCH] Allow 'absolute' specification of webpack config. --- resolvers/webpack/index.js | 17 +++++++++----- resolvers/webpack/test/config.js | 22 +++++++++++++++++++ .../some/absolute.path.webpack.config.js | 16 ++++++++++++++ .../files/some/absolutely/goofy/path/foo.js | 0 4 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 resolvers/webpack/test/config.js create mode 100644 resolvers/webpack/test/files/some/absolute.path.webpack.config.js create mode 100644 resolvers/webpack/test/files/some/absolutely/goofy/path/foo.js diff --git a/resolvers/webpack/index.js b/resolvers/webpack/index.js index 26b0cb6072..be22d6388d 100644 --- a/resolvers/webpack/index.js +++ b/resolvers/webpack/index.js @@ -27,12 +27,17 @@ exports.resolveImport = function resolveImport(source, file, settings) { var webpackConfig try { - var packageDir = findRoot(file) - if (!packageDir) throw new Error('package not found above ' + file) - - webpackConfig = require(path.join(packageDir, get(settings, 'config', 'webpack.config.js'))) - } catch (err) { - webpackConfig = {} + // see if we've got an absolute path + webpackConfig = require(get(settings, 'config', null)) + } catch(err) { + try { + var packageDir = findRoot(file) + if (!packageDir) throw new Error('package not found above ' + file) + + webpackConfig = require(path.join(packageDir, get(settings, 'config', 'webpack.config.js'))) + } catch (err) { + webpackConfig = {} + } } // externals diff --git a/resolvers/webpack/test/config.js b/resolvers/webpack/test/config.js new file mode 100644 index 0000000000..28f3bca105 --- /dev/null +++ b/resolvers/webpack/test/config.js @@ -0,0 +1,22 @@ +var chai = require('chai') + , expect = chai.expect + +import { resolveImport as resolve } from '../index' + +import path from 'path' + +var file = path.join(__dirname, 'files', 'src', 'jsx', 'dummy.js') +var absoluteSettings = { + config: path.join(__dirname, 'files/some/absolute.path.webpack.config.js') +} + +describe("config", function () { + it("finds webpack.config.js in parent directories", function () { + expect(resolve('main-module', file)).to.exist + .and.equal(path.join(__dirname, 'files', 'src', 'main-module.js')) + }) + it("finds absolute webpack.config.js files", function () { + expect(resolve('foo', file, absoluteSettings)).to.exist + .and.equal(path.join(__dirname, 'files', 'some', 'absolutely', 'goofy', 'path', 'foo.js')) + }) +}) diff --git a/resolvers/webpack/test/files/some/absolute.path.webpack.config.js b/resolvers/webpack/test/files/some/absolute.path.webpack.config.js new file mode 100644 index 0000000000..4748d186d2 --- /dev/null +++ b/resolvers/webpack/test/files/some/absolute.path.webpack.config.js @@ -0,0 +1,16 @@ +var path = require('path') + +module.exports = { + resolve: { + alias: { + 'foo': path.join(__dirname, 'absolutely', 'goofy', 'path', 'foo.js'), + }, + modulesDirectories: ['node_modules', 'bower_components'], + root: path.join(__dirname, 'src'), + }, + + externals: [ + { 'jquery': 'jQuery' }, + 'bootstrap', + ], +} diff --git a/resolvers/webpack/test/files/some/absolutely/goofy/path/foo.js b/resolvers/webpack/test/files/some/absolutely/goofy/path/foo.js new file mode 100644 index 0000000000..e69de29bb2