feat(compiler-sfc): export dependencies for css and css preprocessors (#1278)

This commit is contained in:
underfin
2020-07-17 00:33:37 +08:00
committed by GitHub
parent ecf872fc95
commit e41d8310de
7 changed files with 145 additions and 21 deletions

View File

@@ -1,4 +1,5 @@
import merge from 'merge-source-map'
import path from 'path'
export interface StylePreprocessor {
render(
@@ -13,6 +14,7 @@ export interface StylePreprocessorResults {
code: string
map?: object
errors: Error[]
dependencies: string[]
}
// .scss/.sass processor
@@ -29,18 +31,20 @@ const scss: StylePreprocessor = {
try {
const result = nodeSass.renderSync(finalOptions)
// sass output path is position path
const dependencies = result.stats.includedFiles
if (map) {
return {
code: result.css.toString(),
map: merge(map, JSON.parse(result.map.toString())),
errors: []
errors: [],
dependencies
}
}
return { code: result.css.toString(), errors: [] }
return { code: result.css.toString(), errors: [], dependencies }
} catch (e) {
return { code: '', errors: [e] }
return { code: '', errors: [e], dependencies: [] }
}
}
}
@@ -75,17 +79,26 @@ const less: StylePreprocessor = {
}
)
if (error) return { code: '', errors: [error] }
if (error) return { code: '', errors: [error], dependencies: [] }
// less output path is relative path
const dependencies = getAbsolutePaths(
result.imports,
path.dirname(options.fileName)
)
if (map) {
return {
code: result.css.toString(),
map: merge(map, result.map),
errors: []
errors: [],
dependencies: dependencies
}
}
return { code: result.css.toString(), errors: [] }
return {
code: result.css.toString(),
errors: [],
dependencies: dependencies
}
}
}
@@ -99,17 +112,23 @@ const styl: StylePreprocessor = {
if (map) ref.set('sourcemap', { inline: false, comment: false })
const result = ref.render()
// stylus output path is relative path
const dependencies = getAbsolutePaths(
ref.deps(),
path.dirname(options.fileName)
)
if (map) {
return {
code: result,
map: merge(map, ref.sourcemap),
errors: []
errors: [],
dependencies
}
}
return { code: result, errors: [] }
return { code: result, errors: [], dependencies }
} catch (e) {
return { code: '', errors: [e] }
return { code: '', errors: [e], dependencies: [] }
}
}
}
@@ -123,3 +142,7 @@ export const processors: Record<PreprocessLang, StylePreprocessor> = {
styl,
stylus: styl
}
function getAbsolutePaths(relativePaths: string[], dirname: string): string[] {
return relativePaths.map(relativePath => path.join(dirname, relativePath))
}