diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts
index f28ed5433..b69bbca2e 100644
--- a/packages/compiler-sfc/__tests__/compileScript.spec.ts
+++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts
@@ -1550,4 +1550,19 @@ describe('compileScript', () => {
)
assertCode(content)
})
+
+ test('should not compile unrecognized language', () => {
+ const { content, lang, scriptAst } = compile(
+ ``,
+ )
+ expect(content).toMatch(`export default
+ data: ->
+ myVal: 0`)
+ expect(lang).toBe('coffee')
+ expect(scriptAst).not.toBeDefined()
+ })
})
diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts
index fa81da423..cbd4abdf7 100644
--- a/packages/compiler-sfc/src/compileScript.ts
+++ b/packages/compiler-sfc/src/compileScript.ts
@@ -56,7 +56,13 @@ import { DEFINE_EXPOSE, processDefineExpose } from './script/defineExpose'
import { DEFINE_OPTIONS, processDefineOptions } from './script/defineOptions'
import { DEFINE_SLOTS, processDefineSlots } from './script/defineSlots'
import { DEFINE_MODEL, processDefineModel } from './script/defineModel'
-import { getImportedName, isCallOf, isLiteralNode } from './script/utils'
+import {
+ getImportedName,
+ isCallOf,
+ isJS,
+ isLiteralNode,
+ isTS,
+} from './script/utils'
import { analyzeScriptBindings } from './script/analyzeScriptBindings'
import { isImportUsed } from './script/importUsageCheck'
import { processAwait } from './script/topLevelAwait'
@@ -173,6 +179,8 @@ export function compileScript(
const scopeId = options.id ? options.id.replace(/^data-v-/, '') : ''
const scriptLang = script && script.lang
const scriptSetupLang = scriptSetup && scriptSetup.lang
+ const isJSOrTS =
+ isJS(scriptLang, scriptSetupLang) || isTS(scriptLang, scriptSetupLang)
if (script && scriptSetup && scriptLang !== scriptSetupLang) {
throw new Error(
@@ -181,21 +189,28 @@ export function compileScript(
)
}
- const ctx = new ScriptCompileContext(sfc, options)
-
if (!scriptSetup) {
if (!script) {
throw new Error(`[@vue/compiler-sfc] SFC contains no