Skip to content

Commit 2b03e31

Browse files
committed
Add extensions option.
1 parent 6530c7c commit 2b03e31

File tree

6 files changed

+34
-3
lines changed

6 files changed

+34
-3
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ $ npm i css-modules-require-hook
3636
* `string` **rootDir** — absolute path to the project directory. Providing this will result in better generated class names. It can be obligatory, if you run require hook and build tools (like [css-modulesify](https://github.com/css-modules/css-modulesify)) from different working directories.
3737
* `string` **to** — provides `to` option to the [LazyResult instance](https://github.com/postcss/postcss/blob/master/docs/api.md#processorprocesscss-opts).
3838
* `array` **use** — custom subset of postcss plugins.
39+
* `array` **extensions** — attach the hook to additional file extensions (for example `['.scss']`).
3940

4041
### Examples
4142

src/hook.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
/**
22
* @param {function} compile
3+
* @param {string} extension
34
*/
4-
export default function attachHook(compile) {
5-
require.extensions['.css'] = function hook(m, filename) {
5+
export default function attachHook(compile, extension) {
6+
require.extensions[extension] = function hook(m, filename) {
67
const tokens = compile(filename);
78
return m._compile('module.exports = ' + JSON.stringify(tokens), filename);
89
};

src/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ let rootDir = process.cwd();
3131
* @param {string} opts.rootDir
3232
* @param {string} opts.to
3333
* @param {array} opts.use
34+
* @param {array} opts.extensions
3435
*/
3536
export default function setup(opts = {}) {
3637
// clearing cache
@@ -63,6 +64,13 @@ export default function setup(opts = {}) {
6364
plugins.push(generateScopedName
6465
? new Scope({generateScopedName: opts.generateScopedName})
6566
: Scope);
67+
68+
const extraExtensions = get('extensions', null, 'array', opts);
69+
if (extraExtensions) {
70+
extraExtensions.forEach((extension) => {
71+
hook(filename => fetch(filename, filename), extension);
72+
});
73+
}
6674
}
6775

6876
/**
@@ -104,4 +112,4 @@ function fetch(_to, _from, _trace) {
104112
return tokens;
105113
}
106114

107-
hook(filename => fetch(filename, filename));
115+
hook(filename => fetch(filename, filename), '.css');

test/common-test-cases.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,19 @@ describe('common-test-cases', () => {
219219
});
220220
});
221221

222+
describe('extra extension', () => {
223+
before(() => {
224+
expectedTokens = JSON.parse(readFileSync(resolve('test/test-cases/extra-extension/expected.json'), 'utf8'));
225+
hook({extensions: ['.scss']})
226+
});
227+
228+
it('require-hook', () => {
229+
const tokens = require(resolve('test/test-cases/extra-extension/source.scss'));
230+
equal(JSON.stringify(tokens), JSON.stringify(expectedTokens));
231+
});
232+
233+
});
234+
222235
});
223236

224237
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"localName": "_test_test_cases_extra_extension_source__localName"
3+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
$color: orange;
2+
3+
.localName {
4+
color: $color;
5+
}

0 commit comments

Comments
 (0)