Skip to content

Commit 5d3c1fc

Browse files
committed
custom resolve function option
1 parent 090967f commit 5d3c1fc

File tree

7 files changed

+37
-4
lines changed

7 files changed

+37
-4
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ Default: `false`
121121

122122
Set to `true` if you want @import rules to parse glob patterns.
123123

124+
#### `resolve`
125+
126+
Type: `Function`
127+
Default: `null`
128+
129+
You can overwrite the default path resolving way by setting this option, using the `resolve.sync(id, opts)` signature that [resolve.sync](https://github.com/substack/node-resolve#resolvesyncid-opts) has.
130+
124131
#### Example with some options
125132

126133
```js

index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ function readAtImport(atRule, options, cb, importedFiles, ignoredAtRules, media,
194194
}
195195

196196
addInputToPath(options)
197-
var resolvedFilename = resolveFilename(parsedAtImport.uri, options.root, options.path, atRule.source)
197+
var resolvedFilename = resolveFilename(parsedAtImport.uri, options.root, options.path, atRule.source, options.resolve)
198198

199199
// skip files already imported at the same scope
200200
if (importedFiles[resolvedFilename] && importedFiles[resolvedFilename][media]) {
@@ -336,7 +336,7 @@ function parseImport(str, source) {
336336
*
337337
* @param {String} name
338338
*/
339-
function resolveFilename(name, root, paths, source) {
339+
function resolveFilename(name, root, paths, source, resolver) {
340340
var dir = source && source.input && source.input.file ? path.dirname(path.resolve(root, source.input.file)) : root
341341

342342
try {
@@ -351,15 +351,16 @@ function resolveFilename(name, root, paths, source) {
351351
}
352352
}
353353
var file
354+
resolver = resolver || resolve.sync;
354355
try {
355-
file = resolve.sync(name, resolveOpts)
356+
file = resolver(name, resolveOpts)
356357
}
357358
catch (e) {
358359
// fix to try relative files on windows with "./"
359360
// if it's look like it doesn't start with a relative path already
360361
// if (name.match(/^\.\.?/)) {throw e}
361362
try {
362-
file = resolve.sync("./" + name, resolveOpts)
363+
file = resolver("./" + name, resolveOpts)
363364
}
364365
catch (e) {
365366
// LAST HOPE
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import "sass-module";
2+
3+
content{}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.sass-module{}
2+
3+
content{}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.sass-module{}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"sass": "main"}
2+

test/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,3 +190,19 @@ test("works with no styles at all", function(t) {
190190

191191
t.end()
192192
})
193+
194+
test("@import custom resolve", function(t) {
195+
var resolve = require("resolve")
196+
var sassResolve = function(file, opts) {
197+
opts = opts || {}
198+
opts.extensions = [".scss", ".css"]
199+
opts.packageFilter = function(pkg) {
200+
pkg.main = pkg.sass || pkg.style || "index"
201+
return pkg
202+
}
203+
return resolve.sync(file, opts)
204+
}
205+
compareFixtures(t, "custom-resolve-modules", "should be able to consume modules in the custom-resolve way", {root: __dirname, path: importsDir, resolve: sassResolve})
206+
207+
t.end()
208+
})

0 commit comments

Comments
 (0)