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
...options,
data: getSource(source, options.filename, options.additionalData), const data = getSource(source, options.filename, options.additionalData)
file: options.filename, let css: string
outFile: options.filename, let dependencies: string[]
sourceMap: !!map, let sourceMap: any
}
try { try {
const result = nodeSass.renderSync(finalOptions) if (compileString) {
const dependencies = result.stats.includedFiles const { pathToFileURL, fileURLToPath }: typeof import('url') = load('url')
if (map) {
return { const result = compileString(data, {
code: result.css.toString(), ...options,
map: merge(map, JSON.parse(result.map.toString())), url: pathToFileURL(options.filename),
errors: [], sourceMap: !!map,
dependencies, })
} css = result.css
dependencies = result.loadedUrls.map(url => fileURLToPath(url))
sourceMap = map ? result.sourceMap! : undefined
} else {
const result = renderSync({
...options,
data,
file: options.filename,
outFile: options.filename,
sourceMap: !!map,
})
css = result.css.toString()
dependencies = result.stats.includedFiles
sourceMap = map ? JSON.parse(result.map!.toString()) : undefined
} }
return { code: result.css.toString(), errors: [], dependencies } if (map) {
return {
code: css,
errors: [],
dependencies,
map: merge(map, sourceMap!),
}
}
return { code: css, errors: [], dependencies }
} catch (e: any) { } catch (e: any) {
return { code: '', errors: [e], dependencies: [] } return { code: '', errors: [e], dependencies: [] }
} }