Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /