diff --git a/lib/plugin.js b/lib/plugin.js index 97ac0a964..86b7b650c 100644 --- a/lib/plugin.js +++ b/lib/plugin.js @@ -138,8 +138,15 @@ function cloneRule (rule, normalizedRule) { return res } +// Some loaders like babel-loader passes its own option directly to babel +// and since babel validates the options, "ident" would cause an unknown option +// error. For these loaders we'll bail out on the ident reuse. +const reuseIdentBlackList = /babel-loader/ + +// Reuse options ident, so that imports from within css-loader would get the +// exact same request prefixes, avoiding duplicated modules (#1199) function reuseIdent (use) { - if (use.ident) { + if (use.ident && !reuseIdentBlackList.test(use.loader)) { use.options.ident = use.ident delete use.ident } diff --git a/test/edgeCases.spec.js b/test/edgeCases.spec.js index a15bc1b47..c89b2df93 100644 --- a/test/edgeCases.spec.js +++ b/test/edgeCases.spec.js @@ -56,3 +56,23 @@ test('test-less oneOf rules', done => { } }, res => assertComponent(res, done)) }) + +test('babel-loader inline options', done => { + mockBundleAndRun({ + entry: 'basic.vue', + module: { + rules: [ + { + test: /\.js/, + loader: 'babel-loader', + options: { + babelrc: false, + presets: [ + [require('babel-preset-env'), { modules: false }] + ] + } + } + ] + } + }, res => assertComponent(res, done)) +})