Skip to content

Commit 4474c11

Browse files
authored
fix(compiler-sfc): use sass modern api if available and avoid deprecation warning (#11992)
1 parent 9da1ac1 commit 4474c11

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

packages/compiler-sfc/src/style/preprocessors.ts

+34-14
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,48 @@ export interface StylePreprocessorResults {
2323

2424
// .scss/.sass processor
2525
const scss: StylePreprocessor = (source, map, options, load = require) => {
26-
const nodeSass = load('sass')
27-
const finalOptions = {
28-
...options,
29-
data: getSource(source, options.filename, options.additionalData),
30-
file: options.filename,
31-
outFile: options.filename,
32-
sourceMap: !!map,
33-
}
26+
const nodeSass: typeof import('sass') = load('sass')
27+
const { compileString, renderSync } = nodeSass
28+
29+
const data = getSource(source, options.filename, options.additionalData)
30+
let css: string
31+
let dependencies: string[]
32+
let sourceMap: any
3433

3534
try {
36-
const result = nodeSass.renderSync(finalOptions)
37-
const dependencies = result.stats.includedFiles
35+
if (compileString) {
36+
const { pathToFileURL, fileURLToPath }: typeof import('url') = load('url')
37+
38+
const result = compileString(data, {
39+
...options,
40+
url: pathToFileURL(options.filename),
41+
sourceMap: !!map,
42+
})
43+
css = result.css
44+
dependencies = result.loadedUrls.map(url => fileURLToPath(url))
45+
sourceMap = map ? result.sourceMap! : undefined
46+
} else {
47+
const result = renderSync({
48+
...options,
49+
data,
50+
file: options.filename,
51+
outFile: options.filename,
52+
sourceMap: !!map,
53+
})
54+
css = result.css.toString()
55+
dependencies = result.stats.includedFiles
56+
sourceMap = map ? JSON.parse(result.map!.toString()) : undefined
57+
}
58+
3859
if (map) {
3960
return {
40-
code: result.css.toString(),
41-
map: merge(map, JSON.parse(result.map.toString())),
61+
code: css,
4262
errors: [],
4363
dependencies,
64+
map: merge(map, sourceMap!),
4465
}
4566
}
46-
47-
return { code: result.css.toString(), errors: [], dependencies }
67+
return { code: css, errors: [], dependencies }
4868
} catch (e: any) {
4969
return { code: '', errors: [e], dependencies: [] }
5070
}

0 commit comments

Comments
 (0)