diff --git a/src/assets/LESSAsset.js b/src/assets/LESSAsset.js index 4cfc17f3bee..aa4241edf24 100644 --- a/src/assets/LESSAsset.js +++ b/src/assets/LESSAsset.js @@ -4,6 +4,7 @@ const promisify = require('../utils/promisify'); const Resolver = require('../Resolver'); const fs = require('../utils/fs'); const path = require('path'); +const parseCSSImport = require('../utils/parseCSSImport'); class LESSAsset extends Asset { constructor(name, options) { @@ -80,6 +81,7 @@ function getFileManager(less, options) { } async loadFile(filename, currentDirectory) { + filename = parseCSSImport(filename); let resolved = await resolver.resolve( filename, path.join(currentDirectory, 'index') diff --git a/src/assets/SASSAsset.js b/src/assets/SASSAsset.js index 95da1847768..d92c68d7ffd 100644 --- a/src/assets/SASSAsset.js +++ b/src/assets/SASSAsset.js @@ -4,6 +4,7 @@ const promisify = require('../utils/promisify'); const path = require('path'); const os = require('os'); const Resolver = require('../Resolver'); +const parseCSSImport = require('../utils/parseCSSImport'); class SASSAsset extends Asset { constructor(name, options) { @@ -50,11 +51,7 @@ class SASSAsset extends Asset { ? opts.importer : [opts.importer]; opts.importer.push((url, prev, done) => { - if (!/^(~|\.\/|\/)/.test(url)) { - url = './' + url; - } else if (!/^(~\/|\.\/|\/)/.test(url)) { - url = url.substring(1); - } + url = parseCSSImport(url); resolver .resolve(url, prev === 'stdin' ? this.name : prev) .then(resolved => resolved.path) diff --git a/src/utils/parseCSSImport.js b/src/utils/parseCSSImport.js new file mode 100644 index 00000000000..7fe29fb9247 --- /dev/null +++ b/src/utils/parseCSSImport.js @@ -0,0 +1,10 @@ +function parseCSSImport(url) { + if (!/^(~|\.\/|\/)/.test(url)) { + url = './' + url; + } else if (!/^(~\/|\.\/|\/)/.test(url)) { + url = url.substring(1); + } + return url; +} + +module.exports = parseCSSImport; diff --git a/test/integration/less-import/base.less b/test/integration/less-import/base.less index 00b74d20da2..1f903f4a362 100644 --- a/test/integration/less-import/base.less +++ b/test/integration/less-import/base.less @@ -1,3 +1,5 @@ +@import '~external-less/a.less'; + @base: #f938ab; .base { diff --git a/test/integration/less-import/node_modules/external-less/a.less b/test/integration/less-import/node_modules/external-less/a.less new file mode 100644 index 00000000000..f24ba3e3d99 --- /dev/null +++ b/test/integration/less-import/node_modules/external-less/a.less @@ -0,0 +1,3 @@ +.external { + background: red; +} \ No newline at end of file diff --git a/test/integration/less-import/node_modules/external-less/package.json b/test/integration/less-import/node_modules/external-less/package.json new file mode 100644 index 00000000000..5e81de7a22d --- /dev/null +++ b/test/integration/less-import/node_modules/external-less/package.json @@ -0,0 +1,4 @@ +{ + "name": "external-less", + "private": true +}