? ? Pre-Compiler-Helfer für Einzeldateikomponenten
Derzeit unterstützt: .vue, .svelt, .astro
? ️ Spielplatz
Paket installieren:
pnpm install sfc-composer import { MagicSFC as MagicVueSFC } from 'sfc-composer/vue'
import { MagicSFC as MagicSvelteSFC } from 'sfc-composer/svelte'
import { MagicSFC as MagicAstroSFC } from 'sfc-composer/astro' MagicSFC<T> ist die Stammschnittstelle, die von Framework-spezifischen Kinderklassen verlängert werden soll.
scripts: MagicBlock<T>[]
Beziehen Sie sich auf <script> oder JavaScript/TypeScript -Kontexte von SFCs.
templates: MagicBlock<T>[]
In Bezug auf <template> Teile von SFCs.
styles: MagicBlock<T>[]
Bezieht sich auf <style> Teile von SFCs.
customs: MagicBlock<T>[]
Benutzerdefinierte Blöcke aus Frameworks -Parsers, die diese Funktion unterstützen.
getSourcemap(options?: SourceMapOptions): SourceMap
Generiert eine Sourcemap wie MagicString von Version 3.
getTransformResult(): TransformResult
Kompatibel mit vite transform() Hook -Ergebnis.
parse(): Promise<MagicSFC>
Verwendet den Parser, um MagicSFC -Blöcke zu aktualisieren.
Sollte durch Kinderklassen implementiert werden.
Erfahren Sie mehr über alle Verwendungen, indem Sie sich die Tests ansehen!
Bei Verwendung der parse -Funktion spaltet MagicSFC die ausgelieferte Komponente mithilfe Ihres nativen Tools von Framework.
Das Analyseergebnis wird in ein Standardformat aufgeteilt, in dem templates , scripts und styles erkannt werden.
Jedes dieser MagicBlock erhalten die ursprüngliche Form des Parsers, enthüllt aber auch alle relevanten Magicstring -Funktionen.
Jede dieser Funktionen wendet Ihre Änderungen auf dem lokalen Block an.
Sie erhalten auch Zugriff auf _loc und _source für jeden MagicBlock , bei dem es sich um Standardkopien der Blockpositionierung und des Inhalts handelt.
Wenn Sie result aufrufen, erhalten Sie den code als Zeichenfolge und ein geeignetes SourceMap -Objekt.
Schauen Sie sich die Implementierung an.
Frameworks exportiert eine createSfc Funktion erregt, die das Generieren von SFCS programmatisch erleichtert.
Sie alle unterstützen dieselben Eingabeberechnungen:
import { createSFC as createVueSFC } from 'sfc-composer/vue'
import { createSFC as createSvelteSFC } from 'sfc-composer/svelte'
import { createSFC as createAstroSFC } from 'sfc-composer/astro'
const writeableSFC = {
templates : [
{
content : '<div>Hello World!</div>'
}
] ,
scripts : [
{
content : 'console.log(`Hello World!`)'
}
] ,
styles : [
{
content : 'div { color: red; }'
}
]
}
// Will output a valid Svelte SFC
createSvelteSFC ( writeableSFC )
// Will output a valid Astro SFC
createAstroSFC ( writeableSFC )
// Will output a valid Vue SFC
createVueSFC ( {
... writeableSFC ,
// Vue also natively supports `customs` block in its parser.
customs : [
{
type : 'i18n' ,
content : '{ "fr": "Bonjour!", "en": "Hello!" }' ,
}
]
} ) import { MagicSFC as MagicVueSFC } from 'sfc-composer/vue'
import { parse } from 'vue/compiler-sfc'
async function transformVueSFC ( ) {
const sfc = new MagicVueSFC (
'<template><div>Hello World!</div></template>'
+ '<script setup>let test: string</script>'
+ '<style scoped>div { color: red; }</style>' ,
{
parser : parse
}
)
// Process the SFC code through the parser
await sfc . parse ( )
// Append to the <script> tag
sfc . scripts [ 0 ] . append ( ' = `Hello World`' )
return sfc . result ( )
// {
// code: '<template><div>Hello World!</div></template>nn<script setup>let test: string = `Hello World`</script>nn<style scoped>div { color: red; }</style>'
// map: SourceMap
// }
}Erfahren Sie mehr, indem Sie sich die Tests ansehen.
import { createSFC as createVueSFC } from 'sfc-composer/vue'
const MagicVueSFC = createVueSFC ( {
templates : [
{
content : '<div>{{ msg }}</div>' ,
}
] ,
script : [
{
content : 'export default { data() { return { msg: "Hello, world!" } } }'
} ,
{
content : 'const setupMsg = "Hello from setup!"' ,
}
] ,
styles : [
{
lang : 'scss' ,
scoped : true ,
content : '.text { color: red; }' ,
} ,
] ,
} ) <script>
export default { data() { return { msg: "Hello, world!" } }
</script>
<script setup>
const setupMsg = "Hello from setup!"
</script>
<template>
<div>{{ msg }}</div>
</template>
<style scoped lang="scss">
.text { color: red; }
</style>
Erfahren Sie mehr, indem Sie sich die Tests ansehen!
import { MagicSFC as MagicSvelteSFC } from 'sfc-composer/svelte'
import { preprocess } from 'svelte/compiler'
async function transformSvelteSFC ( ) {
const sfc = new MagicSvelteSFC (
'<script>let test: string</script>nn'
+ '<div>Hello World!</div>nn'
+ '<style>div { color: red; }</style>' ,
{
parser : preprocess
}
)
// Process the SFC code through the parser
await sfc . parse ( )
// Append to the <script> tag
sfc . scripts [ 0 ] . append ( ' = `Hello World`' )
return sfc . result ( )
// {
// code: '<script>let test: string = `Hello World`</script>nn<div>Hello World!</div>nn<style>div { color: red; }</style>'
// map: SourceMap
// }
}Erfahren Sie mehr, indem Sie sich die Tests ansehen!
import { createSFC as createSvelteSFC } from 'sfc-composer/svelte'
const MagicVueSFC = createSvelteSFC ( {
templates : [
{
content : '<div>{msg}</div>' ,
}
] ,
script : [
{
content : 'let test = `Hello World!`;'
}
] ,
styles : [
{
content : '.text { color: red; }' ,
} ,
] ,
} ) <script>
let test = `Hello World!`;
</script>
<script setup>
const setupMsg = "Hello from setup!"
</script>
<div>{msg}</div>
<style>
.text { color: red; }
</style>
Erfahren Sie mehr, indem Sie sich die Tests ansehen!
import { MagicSFC as MagicAstroSFC } from 'sfc-composer/astro'
import { preprocess } from '@astrojs/compiler'
async function transformAstroSFC ( ) {
const sfc = new MagicAstroSFC (
'---nlet test: stringn---nn'
+ '<div>Hello World!</div>nn'
+ '<style>div { color: red; }</style>' ,
{
parser : preprocess
}
)
// Process the SFC code through the parser
await sfc . parse ( )
// Append to the <script> tag
sfc . scripts [ 0 ] . append ( 'test = `Hello World`' )
return sfc . result ( )
// {
// code: '---nlet test: stringntest = `Hello World`n---nn<div>Hello World!</div>nn<style>div { color: red; }</style>'
// map: SourceMap
// }
}Erfahren Sie mehr, indem Sie sich die Tests ansehen!
import { createSFC as createAstroSFC } from 'sfc-composer/astro'
const MagicVueSFC = createAstroSFC ( {
templates : [
{
content : '<div>{msg}</div>' ,
}
] ,
script : [
{
content : 'let test = `Hello World!`;' ,
attrs : {
frontmatter : true
}
} ,
{
content : 'let secondTest = `Hello World`;'
}
] ,
styles : [
{
content : '.text { color: red; }' ,
} ,
] ,
} ) ---
let test = `Hello World!`;
---
<script>
let secondTest = `Hello World`;
</script>
<div>{msg}</div>
<style>
.text { color: red; }
</style>
Erfahren Sie mehr, indem Sie sich die Tests ansehen!
corepack enablepnpm installpnpm dev aus Gemacht mit
Veröffentlicht unter MIT -Lizenz.