feat(compiler-sfc): properly pass on options

This commit is contained in:
Evan You
2019-12-10 12:22:23 -05:00
parent 0a14c04c81
commit c8c5b16ef7
5 changed files with 406 additions and 20 deletions

View File

@@ -1,13 +1,18 @@
import {
CompilerOptions,
CodegenResult,
CompilerError
CompilerError,
NodeTransform
} from '@vue/compiler-core'
import { RawSourceMap } from 'source-map'
import { transformAssetUrl } from './templateTransformAssetUrl'
import {
transformAssetUrl,
AssetURLOptions,
createAssetUrlTransformWithOptions
} from './templateTransformAssetUrl'
import { transformSrcset } from './templateTransformSrcset'
const consolidate = require('consolidate')
import { isObject } from '@vue/shared'
import consolidate from 'consolidate'
export interface TemplateCompileResults {
code: string
@@ -28,6 +33,7 @@ export interface TemplateCompileOptions {
compilerOptions?: CompilerOptions
preprocessLang?: string
preprocessOptions?: any
transformAssetUrls?: AssetURLOptions | boolean
}
function preprocess(
@@ -56,7 +62,8 @@ export function compileTemplate(
options: TemplateCompileOptions
): TemplateCompileResults {
const { preprocessLang } = options
const preprocessor = preprocessLang && consolidate[preprocessLang]
const preprocessor =
preprocessLang && consolidate[preprocessLang as keyof typeof consolidate]
if (preprocessor) {
return doCompileTemplate({
...options,
@@ -83,18 +90,29 @@ export function compileTemplate(
}
function doCompileTemplate({
filename,
source,
compiler,
compilerOptions = {},
filename
transformAssetUrls
}: TemplateCompileOptions): TemplateCompileResults {
const errors: CompilerError[] = []
const nodeTransforms: NodeTransform[] = [transformSrcset]
if (isObject(transformAssetUrls)) {
nodeTransforms.push(createAssetUrlTransformWithOptions(transformAssetUrls))
} else if (transformAssetUrls !== false) {
nodeTransforms.push(transformAssetUrl)
}
const { code, map } = compiler.compile(source, {
...compilerOptions,
filename,
mode: 'module',
mode: 'module', // implies prefixIdentifiers: true
hoistStatic: true,
cacheHandlers: true,
sourceMap: true,
nodeTransforms: [transformAssetUrl, transformSrcset],
nodeTransforms,
onError: e => errors.push(e)
})
return { code, source, errors, tips: [], map }