fix(compiler-sfc): use sass modern api if available and avoid deprecation warning (#11992)

This commit is contained in:
山吹色御守 2024-10-11 11:05:54 +08:00 committed by GitHub
parent 9da1ac1565
commit 4474c113d1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 38 additions and 18 deletions

View File

@ -23,28 +23,48 @@ export interface StylePreprocessorResults {
// .scss/.sass processor // .scss/.sass processor
const scss: StylePreprocessor = (source, map, options, load = require) => { const scss: StylePreprocessor = (source, map, options, load = require) => {
const nodeSass = load('sass') const nodeSass: typeof import('sass') = load('sass')
const finalOptions = { const { compileString, renderSync } = nodeSass
const data = getSource(source, options.filename, options.additionalData)
let css: string
let dependencies: string[]
let sourceMap: any
try {
if (compileString) {
const { pathToFileURL, fileURLToPath }: typeof import('url') = load('url')
const result = compileString(data, {
...options, ...options,
data: getSource(source, options.filename, options.additionalData), url: pathToFileURL(options.filename),
sourceMap: !!map,
})
css = result.css
dependencies = result.loadedUrls.map(url => fileURLToPath(url))
sourceMap = map ? result.sourceMap! : undefined
} else {
const result = renderSync({
...options,
data,
file: options.filename, file: options.filename,
outFile: options.filename, outFile: options.filename,
sourceMap: !!map, sourceMap: !!map,
})
css = result.css.toString()
dependencies = result.stats.includedFiles
sourceMap = map ? JSON.parse(result.map!.toString()) : undefined
} }
try {
const result = nodeSass.renderSync(finalOptions)
const dependencies = result.stats.includedFiles
if (map) { if (map) {
return { return {
code: result.css.toString(), code: css,
map: merge(map, JSON.parse(result.map.toString())),
errors: [], errors: [],
dependencies, dependencies,
map: merge(map, sourceMap!),
} }
} }
return { code: css, errors: [], dependencies }
return { code: result.css.toString(), errors: [], dependencies }
} catch (e: any) { } catch (e: any) {
return { code: '', errors: [e], dependencies: [] } return { code: '', errors: [e], dependencies: [] }
} }