diff --git a/lib/index.js b/lib/index.js index 9d14912..32867d1 100644 --- a/lib/index.js +++ b/lib/index.js @@ -27,6 +27,11 @@ function getImportsToResolve (original, includePaths) { if (!extname) { exts = EXT_PRECEDENCE } + if (extname && EXT_PRECEDENCE.indexOf(extname) === -1) { + basename = path.basename(original) + names = [basename] + exts = EXT_PRECEDENCE + } if (basename[0] !== '_') { names.push('_' + basename) } diff --git a/test/fixtures/double-extensions/expect.css b/test/fixtures/double-extensions/expect.css new file mode 100644 index 0000000..b703d8a --- /dev/null +++ b/test/fixtures/double-extensions/expect.css @@ -0,0 +1,6 @@ +.foobar { + color: #FFF; + background-image: url(_/normal/actual/img/logo.png); } + +header { + color: #AAA; } diff --git a/test/fixtures/double-extensions/foobar.default.scss b/test/fixtures/double-extensions/foobar.default.scss new file mode 100644 index 0000000..99980cb --- /dev/null +++ b/test/fixtures/double-extensions/foobar.default.scss @@ -0,0 +1,4 @@ +.foobar { + color: #FFF; + background-image: url("../normal/actual/img/logo.png"); +} diff --git a/test/fixtures/double-extensions/index.scss b/test/fixtures/double-extensions/index.scss new file mode 100644 index 0000000..dd0828e --- /dev/null +++ b/test/fixtures/double-extensions/index.scss @@ -0,0 +1,5 @@ +@import "foobar.default"; + +header { + color: #AAA; +} diff --git a/test/fixtures/double-extensions/webpack.config.js b/test/fixtures/double-extensions/webpack.config.js new file mode 100644 index 0000000..247c0c8 --- /dev/null +++ b/test/fixtures/double-extensions/webpack.config.js @@ -0,0 +1,37 @@ +'use strict' + +const path = require('path') +const ExtractTextPlugin = require('extract-text-webpack-plugin') +const loader = require.resolve('../../..') +const cssLoader = require.resolve('css-loader') + +module.exports = { + context: path.join(__dirname), + entry: { + index: './index.scss' + }, + output: { + path: path.join(__dirname, '../../runtime/double-extensions'), + filename: '[name].js' + }, + module: { + rules: [ + { + test: /\.(scss|sass)$/, + use: ExtractTextPlugin.extract({ + use: [ + cssLoader, + loader + ] + }) + }, + { + test: /\.png$/, + loader: 'file-loader?name=[path][name].[ext]' + } + ] + }, + plugins: [ + new ExtractTextPlugin('[name].css') + ] +} diff --git a/test/index.test.js b/test/index.test.js index f4bad56..facefa4 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -72,26 +72,34 @@ describe('test sass-loader', function () { }) it('should compile without options', function (done) { - const config = require('./fixtures/simple/webpack.config.js') - const compiler = webpack(config) + runSimpleTest(done, 'simple') + }) - compiler.run((err, stats) => { - if (!handleError(err, stats, done)) { - return - } + it('should resolve files with double extensions', function (done) { + runSimpleTest(done, 'double-extensions') + }) +}) - try { - assert.equal(stats.errors, undefined) +function runSimpleTest (done, fixtureName) { + const config = require('./fixtures/' + fixtureName + '/webpack.config.js') + const compiler = webpack(config) + + compiler.run((err, stats) => { + if (!handleError(err, stats, done)) { + return + } - let css = fs.readFileSync(path.join(__dirname, 'runtime/simple/index.css'), 'utf8') - let expect = fs.readFileSync(path.join(__dirname, 'fixtures/simple/expect.css'), 'utf8') + try { + assert.equal(stats.errors, undefined) - assert.equal(clearCRLF(css), clearCRLF(expect)) + let css = fs.readFileSync(path.join(__dirname, 'runtime/' + fixtureName + '/index.css'), 'utf8') + let expect = fs.readFileSync(path.join(__dirname, 'fixtures/' + fixtureName + '/expect.css'), 'utf8') - done() - } catch (err) { - done(err) - } - }) + assert.equal(clearCRLF(css), clearCRLF(expect)) + + done() + } catch (err) { + done(err) + } }) -}) +}