Skip to content
This repository was archived by the owner on Jan 18, 2022. It is now read-only.

Commit 084c874

Browse files
committed
Add scss support
1 parent 4d5d80f commit 084c874

File tree

12 files changed

+91
-25
lines changed

12 files changed

+91
-25
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,16 @@
4141
"debug": "^2.6.0",
4242
"html-minifier": "^3.2.3",
4343
"magic-string": "^0.19.0",
44+
"node-sass": "^4.5.0",
4445
"parse5": "^3.0.1",
4546
"postcss": "^5.2.11",
4647
"postcss-modules": "^0.6.4",
4748
"posthtml": "^0.9.2",
49+
"posthtml-attrs-parser": "^0.1.1",
4850
"rollup-pluginutils": "^2.0.1",
4951
"vue-template-compiler": "^2.1.10",
5052
"vue-template-es2015-compiler": "^1.5.0",
51-
"vue-template-validator": "^1.1.5",
52-
"posthtml-attrs-parser": "^0.1.1"
53+
"vue-template-validator": "^1.1.5"
5354
},
5455
"devDependencies": {
5556
"babel-eslint": "^7.1.1",

src/options.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,6 @@ export default {
3939
disableCssModuleStaticReplacement: false,
4040
modules: {
4141
generateScopedName: '[name]__[local]___[hash:base64:5]'
42-
}
42+
},
43+
scss: {}
4344
}

src/style/css.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import postcss from 'postcss'
22
import modules from 'postcss-modules'
33

4-
function compileModule (code, map, options) {
4+
function compileModule (code, map, source, options) {
55
let style
66

77
return postcss([
88
modules({
99
getJSON (filename, json) {
1010
style = json
1111
},
12-
...(options.modules || {})
12+
...options.modules
1313
})
14-
]).process(code, { map: { inline: false, prev: map } })
14+
]).process(code, { map: { inline: false, prev: map }, from: source.id, to: source.id })
1515
.then(
1616
result => ({ code: result.css, map: result.map, module: style }),
1717
error => {
@@ -24,7 +24,7 @@ export default async function (promise, options) {
2424
const { code, map } = ('$compiled' in style) ? style.$compiled : style
2525

2626
if (style.module === true) {
27-
return compileModule(code, map, options).then(compiled => {
27+
return compileModule(code, map, style, options).then(compiled => {
2828
if (style.$compiled) {
2929
compiled.$prev = style.$compiled
3030
}

src/style/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export async function compile (style, options) {
1212
if (style.lang === 'css') {
1313
output = await compileCSS(style, options)
1414
} else {
15-
output = await compileCSS(compilers[style.lang].call(null, style, options), options)
15+
output = await compileCSS(await compilers[style.lang].call(null, style, options), options)
1616
}
1717

1818
return output

src/style/scss.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,19 @@
1-
export default function () {
1+
import sass from 'node-sass'
2+
3+
export default function (style, options) {
4+
const { css, map } = sass.renderSync({
5+
file: style.id,
6+
data: style.code,
7+
omitSourceMapUrl: true,
8+
sourceMap: true,
9+
outFile: style.id,
10+
...options.scss
11+
})
12+
13+
style.$compiled = {
14+
code: css.toString(),
15+
map: map.toString()
16+
}
17+
18+
return style
219
}

test/expects/css-modules-static.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
var cssModulesStatic = { template: "<div class=\"file__test keep-me\">Foo</div>",cssModules: {"test":"file__test"},};
1+
var cssModulesStatic = { template: "<div class=\"css-modules-static__test keep-me\">Foo</div>",cssModules: {"test":"css-modules-static__test"},};
22

33
export default cssModulesStatic;

test/expects/css-modules.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
var cssModules = { template: "<div :class=\"$style.test\">Foo</div>",cssModules: {"test":"file__test"},};
1+
var cssModules = { template: "<div :class=\"$style.test\">Foo</div>",cssModules: {"test":"css-modules__test"},};
22

33
export default cssModules;

test/expects/scss.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.scss__test {
2+
color: red; }

test/expects/scss.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var scss = { template: "<div class=\"scss__test\"></div>",cssModules: {"test":"scss__test"},};
2+
3+
export default scss;

test/fixtures/scss.vue

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<template>
2+
<div class="test"></div>
3+
</template>
4+
5+
<script lang="babel">
6+
export default {}
7+
</script>
8+
9+
10+
<style lang="scss" module>
11+
$var: red;
12+
13+
.test {
14+
color: red;
15+
}
16+
</style>

0 commit comments

Comments
 (0)