refactor: adjust sfc compiler options
This commit is contained in:
		
							parent
							
								
									95b2cb6fd2
								
							
						
					
					
						commit
						3e3188fa9f
					
				@ -27,7 +27,7 @@ body
 | 
				
			|||||||
    p Cool Pug example!
 | 
					    p Cool Pug example!
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
`,
 | 
					`,
 | 
				
			||||||
    { filename: 'example.vue', needMap: true }
 | 
					    { filename: 'example.vue', sourceMap: true }
 | 
				
			||||||
  ).template as SFCTemplateBlock
 | 
					  ).template as SFCTemplateBlock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const result = compileTemplate({
 | 
					  const result = compileTemplate({
 | 
				
			||||||
@ -43,7 +43,7 @@ body
 | 
				
			|||||||
test('warn missing preprocessor', () => {
 | 
					test('warn missing preprocessor', () => {
 | 
				
			||||||
  const template = parse(`<template lang="unknownLang">\n</template>\n`, {
 | 
					  const template = parse(`<template lang="unknownLang">\n</template>\n`, {
 | 
				
			||||||
    filename: 'example.vue',
 | 
					    filename: 'example.vue',
 | 
				
			||||||
    needMap: true
 | 
					    sourceMap: true
 | 
				
			||||||
  }).template as SFCTemplateBlock
 | 
					  }).template as SFCTemplateBlock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const result = compileTemplate({
 | 
					  const result = compileTemplate({
 | 
				
			||||||
 | 
				
			|||||||
@ -98,21 +98,25 @@ function doCompileTemplate({
 | 
				
			|||||||
}: TemplateCompileOptions): TemplateCompileResults {
 | 
					}: TemplateCompileOptions): TemplateCompileResults {
 | 
				
			||||||
  const errors: CompilerError[] = []
 | 
					  const errors: CompilerError[] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const nodeTransforms: NodeTransform[] = [transformSrcset]
 | 
					  let nodeTransforms: NodeTransform[] = []
 | 
				
			||||||
  if (isObject(transformAssetUrls)) {
 | 
					  if (isObject(transformAssetUrls)) {
 | 
				
			||||||
    nodeTransforms.push(createAssetUrlTransformWithOptions(transformAssetUrls))
 | 
					    nodeTransforms = [
 | 
				
			||||||
 | 
					      createAssetUrlTransformWithOptions(transformAssetUrls),
 | 
				
			||||||
 | 
					      transformSrcset
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
  } else if (transformAssetUrls !== false) {
 | 
					  } else if (transformAssetUrls !== false) {
 | 
				
			||||||
    nodeTransforms.push(transformAssetUrl)
 | 
					    nodeTransforms = [transformAssetUrl, transformSrcset]
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const { code, map } = compiler.compile(source, {
 | 
					  const { code, map } = compiler.compile(source, {
 | 
				
			||||||
    ...compilerOptions,
 | 
					    mode: 'module',
 | 
				
			||||||
    filename,
 | 
					    prefixIdentifiers: true,
 | 
				
			||||||
    mode: 'module', // implies prefixIdentifiers: true
 | 
					 | 
				
			||||||
    hoistStatic: true,
 | 
					    hoistStatic: true,
 | 
				
			||||||
    cacheHandlers: true,
 | 
					    cacheHandlers: true,
 | 
				
			||||||
 | 
					    ...compilerOptions,
 | 
				
			||||||
 | 
					    nodeTransforms: nodeTransforms.concat(compilerOptions.nodeTransforms || []),
 | 
				
			||||||
 | 
					    filename,
 | 
				
			||||||
    sourceMap: true,
 | 
					    sourceMap: true,
 | 
				
			||||||
    nodeTransforms,
 | 
					 | 
				
			||||||
    onError: e => errors.push(e)
 | 
					    onError: e => errors.push(e)
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
  return { code, source, errors, tips: [], map }
 | 
					  return { code, source, errors, tips: [], map }
 | 
				
			||||||
 | 
				
			|||||||
@ -11,8 +11,8 @@ import LRUCache from 'lru-cache'
 | 
				
			|||||||
import { generateCodeFrame } from '@vue/shared'
 | 
					import { generateCodeFrame } from '@vue/shared'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface SFCParseOptions {
 | 
					export interface SFCParseOptions {
 | 
				
			||||||
  needMap?: boolean
 | 
					 | 
				
			||||||
  filename?: string
 | 
					  filename?: string
 | 
				
			||||||
 | 
					  sourceMap?: boolean
 | 
				
			||||||
  sourceRoot?: string
 | 
					  sourceRoot?: string
 | 
				
			||||||
  pad?: boolean | 'line' | 'space'
 | 
					  pad?: boolean | 'line' | 'space'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -55,13 +55,13 @@ const sourceToSFC = new LRUCache<string, SFCDescriptor>(SFC_CACHE_MAX_SIZE)
 | 
				
			|||||||
export function parse(
 | 
					export function parse(
 | 
				
			||||||
  source: string,
 | 
					  source: string,
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    needMap = true,
 | 
					    sourceMap = true,
 | 
				
			||||||
    filename = 'component.vue',
 | 
					    filename = 'component.vue',
 | 
				
			||||||
    sourceRoot = '',
 | 
					    sourceRoot = '',
 | 
				
			||||||
    pad = 'line'
 | 
					    pad = 'line'
 | 
				
			||||||
  }: SFCParseOptions = {}
 | 
					  }: SFCParseOptions = {}
 | 
				
			||||||
): SFCDescriptor {
 | 
					): SFCDescriptor {
 | 
				
			||||||
  const sourceKey = source + needMap + filename + sourceRoot + pad
 | 
					  const sourceKey = source + sourceMap + filename + sourceRoot + pad
 | 
				
			||||||
  const cache = sourceToSFC.get(sourceKey)
 | 
					  const cache = sourceToSFC.get(sourceKey)
 | 
				
			||||||
  if (cache) {
 | 
					  if (cache) {
 | 
				
			||||||
    return cache
 | 
					    return cache
 | 
				
			||||||
@ -111,7 +111,7 @@ export function parse(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (needMap) {
 | 
					  if (sourceMap) {
 | 
				
			||||||
    if (sfc.script && !sfc.script.src) {
 | 
					    if (sfc.script && !sfc.script.src) {
 | 
				
			||||||
      sfc.script.map = generateSourceMap(
 | 
					      sfc.script.map = generateSourceMap(
 | 
				
			||||||
        filename,
 | 
					        filename,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user